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

Nginx配置www跳转至非www域名时出现400错误及浏览器SSL警告问题求助

Nginx配置www跳转至非www域名时出现400错误及浏览器SSL警告问题求助

嘿,兄弟,我之前也碰到过几乎一模一样的问题,帮你捋捋:

你现在的情况是:想把www域名跳转到非www,非www的SSL证书正常,Nginx也配了跳转,但Windows Firefox和Mac Safari访问www的时候先弹SSL警告,加例外后还出400错误。核心问题其实俩:一是www域名没配SSL证书,浏览器自动升级HTTPS后找不到对应证书就炸;二是Nginx的配置没处理好www的HTTPS请求,导致400。

先解决SSL证书的问题

Let's Encrypt可以直接申请同时包含主域名和www域名的证书,不用单独弄。你用certbot重新申请就行,命令敲这个:
sudo certbot --nginx -d examplesite.com -d www.examplesite.com
这个命令会自动帮你把证书覆盖到两个域名,之后浏览器就不会再弹那个可疑域名的警告了。

然后调整Nginx的跳转配置

你得把HTTP和HTTPS的请求都处理到位,不管用户用啥方式访问www,都给转到非www的HTTPS地址。给你个靠谱的配置模板:

首先是处理80端口的所有HTTP请求,直接跳转到HTTPS的主域名:

server {
    listen 80;
    server_name examplesite.com www.examplesite.com;
    return 301 https://examplesite.com$request_uri;
}

然后是HTTPS的server块,分两个:一个专门处理www的跳转,一个处理主域名的正常业务:

# 处理www的HTTPS请求,直接跳转到主域名
server {
    listen 443 ssl http2;
    server_name www.examplesite.com;
    # 这里用刚申请的包含两个域名的证书路径
    ssl_certificate /etc/letsencrypt/live/examplesite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/examplesite.com/privkey.pem;
    return 301 https://examplesite.com$request_uri;
}

# 主域名的正常业务配置
server {
    listen 443 ssl http2;
    server_name examplesite.com;
    ssl_certificate /etc/letsencrypt/live/examplesite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/examplesite.com/privkey.pem;

    # 下面是你原来的主域名配置,比如根目录、路由规则这些
    root /var/www/examplesite;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

最后验证配置并重启

改完配置后先检查有没有语法错误,敲:
sudo nginx -t
如果显示nginx: configuration file /etc/nginx/nginx.conf test is successful,就重启Nginx生效:
sudo systemctl restart nginx

为啥之前会出400错误?

大概率是你之前的Nginx配置里,没有专门给www的HTTPS请求配server块,当用户用HTTPS访问www的时候,Nginx找不到对应的配置,就直接返回400错误了。

备注:内容来源于stack exchange,提问作者Ngine5

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:43:07