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

Nginx反向代理Docker部署双Django应用8001端口访问异常如何解决

问题根源

你遇到的问题核心是Nginx的Host匹配规则、Docker服务配置、访问方式三者不匹配导致的,按以下步骤修改即可解决:

解决方案

1. 修正Nginx配置,补充代理头与匹配规则

你当前的配置缺少必要的代理请求头,且server_name匹配规则限制了访问方式,修改nginx.conf如下:

events {

}

http {
  server {
    listen 8000;
    # 如果你需要同时支持IP和域名访问,改为server_name _;
    server_name web.appli1.com;

    location / {
      proxy_pass http://web:8000;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
  server {
    listen 8001;
    # 如果你需要同时支持IP和域名访问,改为server_name _;
    server_name web2.appli2.com;

    location / {
      proxy_pass http://web2:8001;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
}

修改后重启Nginx容器生效:docker compose restart reverse-proxy

2. 调整访问方式/匹配规则

  • 如果你要使用域名访问:必须完整输入http://web2.appli2.com:8001,不能用IP+端口访问,否则Host头匹配不到web2.appli2.com,会返回默认站点内容
  • 如果你要使用IP+端口访问:把两个server块的server_name改为_(代表匹配所有Host)即可

3. 校验web2服务配置

  • 确认web2服务使用的是appli2的代码:你当前配置中web和web2都用build: .构建,也就是用同一份代码构建镜像,如果你要部署两个不同的应用,需要把web2的build参数改为appli2的代码存放路径
  • 检查web2服务运行状态:执行docker compose logs web2确认服务没有启动报错,端口监听正常

可选优化(免端口访问)

如果希望不用带端口直接通过域名访问两个应用,调整配置如下:

  1. 修改nginx.conf的两个server块监听端口都改为80,靠server_name区分站点
  2. 修改docker-compose中reverse-proxy的端口映射为- 80:80
  3. 直接访问http://web.appli1.com和http://web2.appli2.com即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:15:03