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

Nginx 443 SSL 301重定向失效问题求助

解决旧域名HTTPS 301重定向失效的问题

首先得抓住核心问题:HTTPS请求的TLS握手优先级远高于Nginx的重定向逻辑。当用户访问旧域名的HTTPS地址时,浏览器会先尝试和你的服务器建立加密连接,这一步必须要有对应域名的有效SSL证书才能完成。如果没有证书,TLS握手直接失败,连接会被断开,Nginx连执行return 301的机会都没有——这就是为什么你看到“无法访问此网站”的原因,根本没走到重定向那一步。

为什么另一域名thepreventduty.com能正常工作?

大概率是你忽略了这个域名的证书状态:

  • 它的SSL证书可能还在有效期内(你误以为已经过期或不再持有,但实际还能用)
  • 浏览器或CDN缓存了该域名的旧证书,暂时还能完成握手
  • 服务器上存在通配符证书或多域名证书,刚好覆盖了这个域名
  • 该域名的HTTPS请求被其他带有效证书的server块(比如默认443服务器)处理了,间接完成了重定向

正确的解决方案

要让旧域名的HTTPS地址也能正常重定向,必须先解决TLS握手的问题,这里推荐两种可行方案:

方案1:给旧域名申请免费SSL证书(最优解)

既然旧域名还在解析到你的服务器,完全可以用Let's Encrypt申请一个免费证书,让TLS握手正常完成,这样Nginx就能顺利返回重定向。步骤如下:

  1. 安装Certbot(Let's Encrypt的官方工具):

    # 以Debian/Ubuntu为例
    sudo apt update && sudo apt install certbot python3-certbot-nginx
    
  2. 给旧域名申请证书:

    sudo certbot --nginx -d olddomain.co.uk -d www.olddomain.co.uk
    

    跟着提示完成操作,Certbot会自动帮你配置Nginx的证书路径,甚至可能直接生成正确的重定向配置。

  3. 调整Nginx配置(如果Certbot没自动生成):

    # 处理所有HTTP请求,直接重定向到新域名HTTPS
    server {
        listen 80;
        server_name olddomain.co.uk www.olddomain.co.uk;
        # 带上$request_uri可以保留原请求路径,让重定向更友好
        return 301 https://www.newdomain.co.uk$request_uri;
    }
    
    # 处理HTTPS请求,先完成TLS握手再重定向
    server {
        listen 443 ssl;
        server_name olddomain.co.uk www.olddomain.co.uk;
    
        # Certbot生成的证书路径,根据实际情况调整
        ssl_certificate /etc/letsencrypt/live/olddomain.co.uk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/olddomain.co.uk/privkey.pem;
    
        # 可选的TLS安全配置优化
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        return 301 https://www.newdomain.co.uk$request_uri;
    }
    
  4. 重启Nginx生效:

    sudo systemctl restart nginx
    

方案2:使用自签名证书(临时应急)

如果不想用Let's Encrypt,也可以生成自签名证书(但浏览器会提示不安全,用户需要手动确认才能跳转):

  1. 生成自签名证书:
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/olddomain.key -out /etc/nginx/ssl/olddomain.crt
    
  2. 把证书路径配置到Nginx的443 server块中,和方案1的HTTPS配置类似,只是证书路径换成自签名的即可。

额外检查点

  • 查看Nginx错误日志(/var/log/nginx/error.log),确认是否有证书相关的错误提示,比如找不到证书文件、证书格式不正确等。
  • 确认旧域名的DNS解析仍然指向你的服务器,否则HTTPS请求根本到不了你的Nginx。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:20