Nginx反向代理配置问题:多域名无法指向对应后端服务器
解决Nginx反向代理多域名匹配错误问题
你遇到的核心问题是server_name配置格式错误,导致Nginx无法正确区分两个域名的请求,最终所有访问都落到了默认站点。下面是具体的修正方案和原因分析:
错误根源
你的两个自定义server块中,server_name字段错误地包含了http://前缀:
server_name http://ineedbabypics.com www.ineedbabypics.com;
Nginx的server_name是用来匹配HTTP请求头里的Host字段,而Host字段只会包含纯域名(比如ineedbabypics.com或www.ineedbabypics.com),不会携带http://协议前缀。这就导致Nginx无法匹配到这两个自定义server块,所有请求都被默认的server_name _的server块处理,最终出现所有域名都跳转至同一站点的问题。
修正后的配置
1. 修正ineedbabypics.conf
server { listen 80; listen [::]:80; server_name ineedbabypics.com www.ineedbabypics.com; set $upstream 192.168.1.96; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://$upstream; } }
2. 修正ineedtoclose.conf
server { listen 80; listen [::]:80; server_name ineedtoclose.com www.ineedtoclose.com; set $upstream 192.168.1.83; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://$upstream; } }
3. 优化默认server块(可选但推荐)
为了避免默认server块干扰,你可以修改它的行为,比如直接返回404:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 404; }
验证步骤
- 保存所有配置文件后,执行
nginx -t检查配置是否合法 - 如果检查通过,执行
nginx -s reload重新加载配置 - 分别访问两个域名,验证是否正确指向对应的内网IP
内容的提问来源于stack exchange,提问作者Yetimandaddy
相关产品推荐
相关产品推荐

