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
相关产品推荐
相关产品推荐

