Nginx反向代理按server_name路由失效:所有流量流向首个服务器
问题解决:Nginx基于server_name路由失效的修复
你的问题核心在于server_name字段错误地包含了端口号,Nginx的server_name仅用于匹配HTTP请求头中Host字段的域名部分,端口是通过listen指令指定的,不需要加到server_name里。这导致所有请求都无法匹配到正确的server块,只能走配置中第一个定义的默认server。
修正后的配置
server { listen 3978; listen [::]:3978; server_name example.domain.net; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://127.0.0.1:8443; } } server { listen 3978; listen [::]:3978; server_name domain.net www.domain.net; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://127.0.0.1:8020; } }
操作步骤
- 替换原配置文件中的对应server块内容
- 验证配置语法是否正确:
sudo nginx -t - 重启Nginx生效:
sudo systemctl restart nginx
补充说明
Nginx完全支持基于子域名和主域名的路由配置,只要server_name正确匹配请求的Host域名即可。当请求访问example.domain.net:3978时,Host头会包含example.domain.net:3978,Nginx会自动忽略端口部分,仅用example.domain.net匹配对应的server块;同理domain.net:3978会匹配第二个server块。
内容的提问来源于stack exchange,提问作者Bradley
相关产品推荐
相关产品推荐

