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

将本地域名绑定到Django:Docker多应用域名访问配置求助

问题排查与解决方案

1. 先修复Host文件的泛解析问题

绝大多数系统(Windows、部分Linux发行版)的hosts文件不支持*.mydomain.local这种泛域名写法,你加的这条规则根本不会生效。直接改成具体域名:

127.0.0.1 test1.mydomain.local
127.0.0.1 test2.mydomain.local
127.0.0.1 localhost

修改完刷新DNS缓存:

  • Windows:执行命令 ipconfig /flushdns
  • Linux/macOS:执行 sudo dscacheutil -flushcache 或 sudo systemctl restart nscd

2. 配置反向代理(核心步骤)

Host文件只是把域名指向本地,但浏览器访问域名默认用80/443端口,你的容器跑在8000、8001端口,必须通过反向代理把不同域名的请求转发到对应容器。这里给出两种常见实现方式:

方式一:用Nginx容器快速搭建代理

  1. 创建nginx.conf配置文件:
server {
    listen 80;
    server_name test1.mydomain.local;

    location / {
        proxy_pass http://host.docker.internal:8000; # 指向宿主机的8000端口(对应test1应用)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name test2.mydomain.local;

    location / {
        proxy_pass http://host.docker.internal:8001; # 指向宿主机的8001端口(对应test2应用)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. 启动Nginx容器:
docker run -d \
  --name nginx-proxy \
  -p 80:80 \
  -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf \
  nginx:alpine

方式二:Docker Compose整合代理(更适合多应用场景)

在你的docker-compose.yml里添加Nginx服务,同时把所有应用和代理放到同一个网络:

version: '3.8'
services:
  test1-app:
    # 你的test1应用原有配置
    ports:
      - "8000:80" # 假设应用内部监听80端口
    networks:
      - app-network

  test2-app:
    # 你的test2应用原有配置
    ports:
      - "8001:80"
    networks:
      - app-network

  nginx-proxy:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    networks:
      - app-network
    depends_on:
      - test1-app
      - test2-app

networks:
  app-network:
    driver: bridge

这种情况下,Nginx配置里的proxy_pass可以直接用容器名,比如http://test1-app:80,无需再用host.docker.internal。

3. 验证与排错

  1. 访问test1.mydomain.local,检查是否正常跳转至对应应用
  2. 如果失败,按以下步骤排查:
    • 查看Nginx日志找报错:docker logs nginx-proxy
    • 确认宿主机80端口未被防火墙拦截
    • 验证应用容器本身是否正常:docker exec <容器名> curl localhost:80(替换为应用内部实际端口)

4. 关于.env文件的说明

你在.env里配置的域名仅对应用内部生效,和外部域名访问的映射逻辑无关,外部访问的核心是Host解析+反向代理这两步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:10:55