Nginx双虚拟主机配置异常:两域名均指向同一后端服务
解决Nginx双虚拟主机均指向同一后端的问题
可能的原因及修复步骤
1. 验证本地域名解析配置
如果是本地测试场景,必须确保两个域名都正确映射到本机IP(通常为127.0.0.1):
- 编辑本地hosts文件:
- Windows路径:
C:\Windows\System32\drivers\etc\hosts - Linux/macOS路径:
/etc/hosts
- Windows路径:
- 添加以下两行配置:
127.0.0.1 my.first.domain 127.0.0.1 my.second.domain - 保存后执行
ping my.first.domain和ping my.second.domain,确认两者均指向127.0.0.1。
2. 确保Nginx配置生效
修改配置文件后,必须重载或重启Nginx才能让新配置生效:
- 重载配置(不中断服务,推荐使用):
nginx -s reload - 重启Nginx:
nginx -s stop && nginx - 提前用
nginx -t检查配置文件语法,避免因语法错误导致配置未加载。
3. 清除浏览器缓存或使用无痕模式
浏览器可能缓存了旧的请求跳转记录,导致配置更新后依然指向原后端:
- 清除当前浏览器的缓存与Cookie
- 或直接使用无痕/隐私窗口访问两个域名测试
4. 检查Nginx的server匹配逻辑
当多个server块监听同一端口时,Nginx的匹配优先级为:
- 匹配带有
default_server标记的server块 - 匹配请求Host头与
server_name完全一致的server块 - 若以上都不匹配,则使用第一个监听该端口的server块
如果域名解析失败导致请求Host头未正确传递,Nginx会默认走第一个server块(即指向3000端口的配置),进而出现两个域名均跳转同一后端的问题。可以给其中一个server块添加default_server明确默认行为,或确保域名解析和Host头传递正常。
额外验证方法
用curl命令发送指定Host头的请求,直接测试Nginx转发逻辑:
curl -H "Host: my.first.domain" http://localhost curl -H "Host: my.second.domain" http://localhost
查看返回内容是否分别对应3000和4000端口的应用。
内容的提问来源于stack exchange,提问作者Jacob Aleigheri
相关产品推荐
相关产品推荐

