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

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会被拒绝。

解决步骤

  1. 修改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;
}
  1. 重启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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:10:19