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

无付费SSL证书时Nginx将HTTPS重定向至HTTP的最优配置咨询

如何在反向代理场景下将HTTPS请求重定向至HTTP(无付费SSL证书)

我懂你的困扰——没有付费SSL证书,想把用户的HTTPS请求转去HTTP,但之前的配置都触发了ERR_SSL_PROTOCOL_ERROR。问题的核心出在SSL握手环节:当用户发起HTTPS请求时,浏览器会先和Nginx尝试建立SSL连接,如果Nginx在443端口没配置任何SSL证书相关设置,握手会直接失败,浏览器根本等不到重定向指令执行就报错了。

要解决这个问题,你需要先让Nginx能在443端口完成SSL握手(哪怕用免费的自签名证书),再执行重定向。下面是最简洁的可行方案:

步骤1:生成自签名SSL证书

先在服务器上生成一个免费的自签名证书(不需要付费CA机构认证),执行以下命令:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/yourdomain.key -out /etc/nginx/ssl/yourdomain.crt

执行时会提示填写一些域名、地区等信息,随便填写即可,重点是生成yourdomain.key(私钥)和yourdomain.crt(证书)两个文件。

步骤2:配置Nginx

替换成下面的Nginx配置:

# 处理HTTP请求,反向代理到你的Node.js服务
server {
    listen 80;
    server_name xxxx.com;

    location / {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8090;
    }
}

# 处理HTTPS请求,完成SSL握手后重定向到HTTP
server {
    listen 443 ssl;
    server_name xxxx.com;

    # 指定刚才生成的自签名证书和私钥路径
    ssl_certificate /etc/nginx/ssl/yourdomain.crt;
    ssl_certificate_key /etc/nginx/ssl/yourdomain.key;

    # 永久重定向所有HTTPS请求到HTTP
    return 301 http://$host$request_uri;
}

为什么之前的配置失败?

  • 第一种配置里listen 443但没加ssl参数,也没配置证书,Nginx不会在这个端口处理SSL连接,浏览器发起HTTPS请求时无法完成握手,直接抛出协议错误。
  • 第二种配置同样没给443服务器块配置SSL证书和ssl参数,导致握手提前失败,重定向指令根本没机会执行。

注意事项

用户访问HTTPS时,浏览器会弹出“不安全连接”的警告(因为是自签名证书),但用户确认后会被正常重定向到HTTP。这是没有付费证书情况下的最优方案——毕竟HTTPS协议本身要求必须有证书才能建立连接。

内容的提问来源于stack exchange,提问作者ATX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:29:27