You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/;
    }
}

排查步骤

  1. 验证配置语法:执行nginx -t检查配置文件是否有语法错误,根据提示修正。
  2. 重启Nginx:配置修正后执行nginx -s reload或重启Nginx容器。
  3. 检查容器连通性:在Nginx容器内执行ping tr和ping pageviewfront,确认能解析到目标容器IP;再用curl http://tr:9090/trend测试后端服务是否正常响应。
  4. 查看日志定位问题:查看Nginx错误日志(通常在/var/log/nginx/error.log),获取具体报错信息。

内容的提问来源于stack exchange,提问作者UME

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:30:54