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

Next.js 14.x站点Nginx非www转www配置失效求助

排查非www转www重定向失效的问题

核心问题分析

你的当前配置只处理了HTTP协议下的example.com重定向,但用户访问HTTPS协议的example.com时,Nginx没有对应的规则处理,会直接导致重定向失效。另外还要先确认DNS解析、证书覆盖范围这两个前提条件。

分步排查与修复

1. 确认DNS解析正确性

确保example.com和www.example.com的A/AAAA记录都指向你的服务器公网IP,这是重定向生效的基础。

2. 补充HTTPS非www域名的重定向规则

在现有配置中添加一个处理https://example.com的server块,同时要确保你的SSL证书包含example.com域名(通配符证书或多域名SAN证书均可)。修改后的完整配置如下:

# 处理所有HTTP请求,统一重定向到HTTPS的www域名
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

# 处理HTTPS的example.com,重定向到HTTPS的www域名
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;
    ssl_certificate /etc/nginx/ssl-certs/lapki-certs-key/common-cert.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/lapki-certs-key/9172942.key;
    return 301 https://www.example.com$request_uri;
}

# 处理HTTPS的www.example.com,反向代理到Next.js应用
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/nginx/ssl-certs/lapki-certs-key/common-cert.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/lapki-certs-key/9172942.key;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_cache_bypass $http_upgrade;
        # 补充必要头部,避免Next.js获取不到正确的请求域名
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. 验证配置并平滑重启Nginx

  • 先测试配置语法是否正确,避免破坏现有服务:
    sudo nginx -t
    
  • 如果提示test is successful,执行平滑重启(不会中断当前用户的访问):
    sudo systemctl reload nginx
    

4. 清除缓存后测试

因为301是永久重定向,浏览器会缓存旧的跳转规则,建议用隐私窗口访问example.com,或者用curl命令测试:

curl -I https://example.com

如果返回HTTP/1.1 301 Moved Permanently且Location字段为https://www.example.com/,说明配置生效。

额外注意事项

  • 确保你的SSL证书同时覆盖example.com和www.example.com,如果证书只包含其中一个,访问未覆盖的域名会出现SSL错误,导致重定向无法触发。
  • 若使用Let's Encrypt证书,可通过以下命令重新申请包含两个域名的证书:
    sudo certbot certonly --nginx -d example.com -d www.example.com
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:46:20