多Docker-Compose配置下Nginx反向代理WordPress连接失败排查
问题分析与解决方案
你的连接拒绝问题主要出在容器间通信的端口配置错误,再加上Nginx配置的小语法问题,咱们一步步来解决:
1. 核心错误:反向代理用了宿主机映射端口而非容器内部端口
你的WordPress容器配置里,ports: - "8080:80" 是把宿主机的8080端口映射到容器内部的80端口。但容器之间通过Docker网络通信时,应该直接用容器内部的端口(80),而不是宿主机的映射端口(8080)。
你当前Nginx配置里的proxy_pass http://$docker_host:8080; 是错误的,必须改成http://$docker_host:80;。
2. 修复Nginx配置的语法问题
你提供的Nginx配置片段有语法错误:127.0.0.11; 前面缺少了resolver关键字,正确的完整配置应该是:
server { listen 80; server_name myapp.local; # Docker内置DNS解析器 resolver 127.0.0.11 valid=30s; location / { set $docker_host "app_web"; proxy_pass http://$docker_host:80; # 新增代理头,避免WordPress重定向/内容加载异常 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_set_header X-Forwarded-Proto $scheme; } }
补充:添加
valid=30s能优化DNS缓存效率,而代理头可以让WordPress正确识别请求来源,避免后续出现后台登录跳转异常、静态资源加载失败等问题。
3. 确保Nginx与WordPress在同一网络
检查你的nginx/docker-compose.yml,必须让Nginx服务加入test_network网络(你的WordPress服务已经在这个网络里)。完整的Nginx docker-compose示例如下:
# nginx/docker-compose.yml version: '3' services: nginx: image: nginx:stable-alpine container_name: test.nginx volumes: - "./nginx.conf:/etc/nginx/conf.d/default.conf" ports: - "80:80" networks: - test_network networks: test_network: external: true # 因为你提前创建了这个网络
4. 验证与重启服务
完成修改后,按顺序重启所有服务:
- 停止现有容器:
docker-compose -f wordpress/docker-compose.yml down docker-compose -f nginx/docker-compose.yml down - 重新启动WordPress服务:
docker-compose -f wordpress/docker-compose.yml up -d - 重新启动Nginx服务:
docker-compose -f nginx/docker-compose.yml up -d
现在访问myapp.local应该就能正常反向代理到WordPress了。
额外优化建议
- 尽量避免使用
links指令(Docker官方已不推荐),你用自定义网络的方式是正确的,继续保持。 - WordPress的
ports: 8080:80可以保留,方便你直接通过宿主机localhost:8080测试,但容器间通信始终用内部端口80即可。
内容的提问来源于stack exchange,提问作者Ionel Lupu
相关产品推荐
相关产品推荐

