Docker部署WordPress配置HTTPS遇502错误求助
问题排查与解决:Docker部署WordPress HTTPS配置导致502 Bad Gateway
问题描述
尝试用Docker部署WordPress并配置HTTPS后,网站出现502 Bad Gateway错误,Nginx日志显示连接被拒绝,但本地访问http://localhost:8080可正常打开网站。
相关配置文件
docker-compose.yml
version: '3' services: database: image: mysql:8.4 container_name: database volumes: - database_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: ******** MYSQL_DATABASE: wp_database MYSQL_USER: wp_user MYSQL_PASSWORD: ******** networks: - wp_network wordpress: depends_on: - database image: wordpress:latest container_name: wordpress volumes: - ./wordpress:/var/www/html ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: database:3306 WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: ******** WORDPRESS_DB_NAME: wp_database networks: - wp_network nginx: image: nginx:latest container_name: nginx ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./certs/my.website.com.cer.crt:/etc/nginx/ssl/cert.pem - ./certs/my.website.com.key:/etc/nginx/ssl/key.pem depends_on: - wordpress networks: - wp_network volumes: database_data: networks: wp_network: driver: bridge
nginx.conf
server { listen 80; server_name my.website.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name my.website.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; location / { proxy_pass http://wordpress:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Nginx日志信息
2025/01/29 08:28:49 [error] 20#20: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 10.50.15.17, server: my.website.com, request: "GET / HTTP/1.1", upstream: "http://172.29.0.3:8080/", host: "my.website.com"
问题原因
Nginx配置中proxy_pass指向了http://wordpress:8080,但WordPress容器内部实际监听的是80端口(docker-compose.yml里的ports: "8080:80"是将宿主机8080端口映射到容器内部的80端口)。在Docker网络内部,容器间通信需使用容器的内部端口,而非宿主机的映射端口,因此Nginx请求wordpress:8080会被拒绝。
解决步骤
- 修改Nginx配置文件中的
proxy_pass地址,把http://wordpress:8080改为http://wordpress:80:
location / { proxy_pass http://wordpress:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
- 重启Nginx容器使配置生效:
docker restart nginx
额外建议
- 若无需对外暴露WordPress的8080端口,可删除
docker-compose.yml中WordPress服务的ports: "8080:80"配置,仅保留容器间内部通信,提升安全性。 - 登录WordPress后台,将**站点地址(URL)和WordPress地址(URL)**修改为
https://my.website.com,避免出现混合内容加载错误。
内容的提问来源于stack exchange,提问作者Floris van den Berg
相关产品推荐
相关产品推荐

