Nginx双域名双端口配置异常:两域名均显示同一站点内容
问题解决:Nginx多站点反向代理配置异常
问题分析
你的配置存在两个关键问题:
- 同一个
server块中同时使用root(静态文件服务)和proxy_pass(反向代理),导致Nginx请求处理逻辑混乱,第一个站点的规则未被正确触发。 - 未将
proxy_pass放入location块内,不符合反向代理的标准配置规范,引发匹配优先级问题。
修正后的配置
server { listen 80; server_name www.domain1.com; location / { proxy_pass http://127.0.0.1:3000; # 传递必要请求头,确保后端服务正确识别请求源 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name www.domain2.com domain2.com; location / { proxy_pass http://127.0.0.1:3004; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
操作步骤
- 验证配置语法:执行命令检查配置合法性
nginx -t - 重载Nginx配置:让新配置生效
# Systemd系统 systemctl reload nginx # SysVinit系统 service nginx reload - 验证域名解析:确保
www.domain1.com和www.domain2.com/domain2.com正确指向服务器IP(测试环境可检查本地hosts文件) - 清除浏览器缓存:避免旧缓存干扰测试结果
关键说明
- 移除
root指令:使用反向代理时,root用于静态文件服务,两者共存会干扰请求路由逻辑,无需保留。 - 标准化反向代理配置:将
proxy_pass放入location /块内,确保所有请求按规则转发到对应后端。 - 添加请求头:后端服务依赖这些头部获取原始请求的域名、IP等信息,避免业务逻辑异常。
内容的提问来源于stack exchange,提问作者Twix
相关产品推荐
相关产品推荐

