Nginx反向代理多站点异常:Docker容器中一个网站无法访问
问题分析与解决
配置文件中的明显问题
先看两个网站的Nginx配置:
网站1配置(/etc/nginx/conf.d/tr.conf)
server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/tr.crt; ssl_certificate_key /etc/nginx/ssl/tr.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; server_name trac.internal.local; location /trend { proxy_pass http://tr/trend:9090; # 格式错误 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_redirect http://tr/trend /; # 对应错误的proxy_pass地址 } }
网站2配置(/etc/nginx/conf.d/pageview.conf)
server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/pageview.crt; ssl_certificate_key /etc/nginx/ssl/pageview.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; server_name pageview.internal.local; location /pageview { proxy_pass http://pageviewfront:8080; 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_redirect http://pageviewfront /; } }
核心错误点
- 网站1的proxy_pass格式错误:
http://tr/trend:9090不符合Nginx语法,正确格式应为http://容器名:端口/路径,端口必须放在容器名后方,比如目标服务在tr容器的9090端口,对应路径/trend,应写成http://tr:9090/trend/(末尾斜杠避免路径拼接异常)。 - proxy_redirect配置不匹配:网站1的
proxy_redirect基于错误的后端地址,需要同步修正。
修正后的配置
网站1修正版
server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/tr.crt; ssl_certificate_key /etc/nginx/ssl/tr.key; # 建议升级到更安全的TLS版本 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!RC4; server_name trac.internal.local; location /trend/ { proxy_pass http://tr:9090/trend/; 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_redirect http://tr:9090/trend/ /trend/; } }
网站2优化建议
server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/pageview.crt; ssl_certificate_key /etc/nginx/ssl/pageview.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!RC4; server_name pageview.internal.local; location /pageview/ { proxy_pass http://pageviewfront:8080/; 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_redirect http://pageviewfront:8080/ /pageview/; } }
排查步骤
- 验证配置语法:执行
nginx -t检查配置文件是否有语法错误,根据提示修正。 - 重启Nginx:配置修正后执行
nginx -s reload或重启Nginx容器。 - 检查容器连通性:在Nginx容器内执行
ping tr和ping pageviewfront,确认能解析到目标容器IP;再用curl http://tr:9090/trend测试后端服务是否正常响应。 - 查看日志定位问题:查看Nginx错误日志(通常在
/var/log/nginx/error.log),获取具体报错信息。
内容的提问来源于stack exchange,提问作者UME
相关产品推荐
相关产品推荐

