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

Docker Compose+Nginx多子域名本地环境搭建及访问问题排查

问题解答

一、可行性确认

完全可以通过Docker Compose + Nginx实现该需求,核心是利用Nginx虚拟主机配置匹配子域名,通过Docker网络让Nginx与后端服务连通,同时将Cookie的domain设为.app.com实现跨子域名共享。

二、无法访问service3.app.com的常见错误点

1. /etc/hosts配置缺失

仅添加app.com的映射是不够的,service3.app.com必须也在/etc/hosts中绑定本地IP。需添加类似配置:

127.0.0.1   app.com nginx.app.com service1.app.com service3.app.com

所有需要访问的子域名都要指定到本地(或Docker宿主机IP)。

2. Nginx虚拟主机配置错误

  • 未为service3.app.com配置对应server块,或server_name匹配错误(比如拼写错误、多了末尾的点)。正确示例:
server {
    listen 443 ssl;
    server_name service3.app.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://service3:8080; # 需对应Docker Compose中service3的服务名
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # JSESSION Cookie共享配置
        proxy_cookie_path / "/; domain=.app.com; HttpOnly; Secure";
    }
}
  • 若使用通配符server_name *.app.com;,要确保该server块不会被更精确的app.com server块覆盖,导致子域名请求匹配错误。

3. Docker Compose网络配置问题

  • 确保Nginx与service3服务在同一个Docker网络中。默认网络下,Nginx的proxy_pass必须使用服务名(如http://service3:8080),而非localhost或宿主机IP(容器内localhost指向自身,而非宿主机)。
  • 若自定义网络,需在docker-compose.yaml中为两者都指定该网络:
services:
  nginx:
    networks:
      - app-network
  service3:
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

4. SSL证书问题

如果用HTTPS,证书需支持通配符*.app.com,否则浏览器会因证书不匹配拒绝访问。自签名证书需导入本地浏览器信任列表,否则会被拦截。

5. 端口映射问题

Nginx容器的443端口必须正确映射到宿主机443端口,docker-compose.yaml中配置应类似:

ports:
  - "443:443"

若宿主机443端口被占用,映射到其他端口(如4430:443),访问时需加端口号(https://service3.app.com:4430),否则无法连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:22:10