Nginx反向代理配置问题:无法转发请求至HTTPS后端
解决Nginx反向代理导致ERR_CONNECTION_REFUSED的问题
你的配置存在几个关键问题导致连接失败,我来一步步帮你排查修复:
1. 缺少HTTPS监听配置
你希望通过https://myexample.com访问服务,但当前Nginx配置只监听了80端口(HTTP),完全没处理443端口的HTTPS请求。浏览器发起HTTPS连接时,Nginx没有对应端口响应,自然会返回ERR_CONNECTION_REFUSED。
你需要添加443端口的server块并配置SSL证书(假设你已经拥有有效的SSL证书和密钥文件,比如Let's Encrypt颁发的):
server { listen 443 ssl; server_name myexample.com; # 替换为你的SSL证书和密钥实际路径 ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem; access_log /var/log/nginx/nginx.access.log; error_log /var/log/nginx/nginx.error.log; proxy_buffers 16 64k; proxy_buffer_size 128k; location / { proxy_pass https://cluster; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 若上游服务使用自签SSL证书,需添加以下两行跳过验证(生产环境谨慎使用) # proxy_ssl_verify off; # proxy_ssl_trusted_certificate /path/to/your/self-signed-cert.pem; } }
同时建议添加HTTP到HTTPS的自动跳转,避免用户访问80端口时出现异常:
server { listen 80; server_name myexample.com; return 301 https://$host$request_uri; }
2. 验证上游服务的可达性
先确认myexample.com:32437的服务确实在运行,并且Nginx服务器能正常访问这个端口:
在Nginx服务器上执行以下命令测试连通性:
curl -v https://myexample.com:32437
如果这个命令无法连接,说明上游服务未启动,或者防火墙/安全组阻止了32437端口的访问,需要先解决这个基础连通问题。
3. 调整上游配置细节
如果上游服务绑定了特定的Host头,可能需要修改proxy_set_header Host为$host:32437;另外如果上游SSL证书存在验证问题,务必开启之前注释的proxy_ssl_verify相关配置(生产环境优先使用可信证书而非跳过验证)。
最后,修改配置后重启Nginx生效:
sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者thinkingmonster




