WordPress站点配置SSL后出现502 Bad Gateway(SSL握手错误:版本号不匹配)求助
解决WordPress + Nginx SSL配置后的502 Bad Gateway错误
从你的错误日志和配置来看,问题的核心很明确:Nginx试图与上游的localhost:3000建立SSL连接,但你的WordPress服务在3000端口运行的是HTTP而非HTTPS,导致SSL握手失败,触发502错误。日志里的SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number)就是最直接的证据。
下面是分步解决的方案:
1. 修正Nginx的反向代理配置
你之前尝试把proxy_pass改成http后网站能部分加载,但静态资源和后台无法访问,这是因为缺少必要的请求头,导致WordPress不知道用户是通过HTTPS访问的,进而输出HTTP格式的资源链接。
修改你的example.com的443 server块中的location /部分:
location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 关键:告诉WordPress当前请求是HTTPS协议 proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; }
2. 配置WordPress强制HTTPS并识别反向代理请求
打开WordPress根目录下的wp-config.php,添加以下代码(放在/* That's all, stop editing! Happy publishing. */之前):
# 强制后台使用HTTPS define('FORCE_SSL_ADMIN', true); # 让WordPress识别反向代理传递的HTTPS请求 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; } # 确保siteurl和homeurl是HTTPS(你已经设置过,但可以再确认) define('WP_SITEURL', 'https://example.com'); define('WP_HOME', 'https://example.com');
3. 重启服务并验证
- 重启Nginx:
sudo systemctl restart nginx - 重启运行WordPress的服务(如果是PHP-FPM:
sudo systemctl restart php-fpm,如果是其他运行在3000端口的HTTP服务器,也对应重启)
完成后访问你的网站,静态资源和/wp-login应该都能正常加载,502错误也会消失。
额外检查点
- 确认3000端口的服务确实在运行:
curl http://localhost:3000,如果能返回WordPress的页面内容,说明上游服务正常。 - 检查Nginx错误日志,确认没有新的报错:
tail -f /var/log/nginx/error.log
内容的提问来源于stack exchange,提问作者DavidPH




