You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动