子域名访问Docker容器服务出现NGINX 502错误,改配置后重定向过多
解决方案
配置错误点排查
你当前的配置存在3个核心错误:
- Nginx upstream配置的WordPress端口不匹配:WordPress容器内部仅监听80端口,你现有配置写的
wp:8000无对应服务 - 反向代理未传递正确的请求头:WordPress无法识别外层访问的HTTPS协议,导致跳转逻辑异常
- proxy_pass使用https协议访问WordPress容器:WordPress容器未配置HTTPS证书,无法响应https请求
分步修复操作
1. 替换nginx.conf为以下配置
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events {} http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # 80端口统一跳转HTTPS server { listen 80; server_name *subdomain* *server_ip*; return 301 https://$host$request_uri; } # 443端口处理业务请求 server { listen 443 ssl; server_name *subdomain* *server_ip*; ssl_certificate /etc/cloudflare/cert.pem; ssl_certificate_key /etc/cloudflare/key.pem; location / { proxy_pass http://wp: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; } } include /etc/nginx/conf.d/*.conf; }
2. 新增WordPress协议识别配置
进入WordPress容器的/var/www/html/wp-config.php文件,在/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */前添加以下代码:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
3. 重启服务生效
执行命令docker-compose down && docker-compose up -d重启所有容器即可。
内容的提问来源于stack exchange,提问作者Jacob Atwell Parry
相关产品推荐
相关产品推荐

