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.comserver块覆盖,导致子域名请求匹配错误。
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
相关产品推荐
相关产品推荐

