Nginx无法实现www与非www域名跳转 访问www域名显示默认欢迎页求助
问题根源
- 配置冲突:第一个443端口server块同时绑定了
mywebsite.net和www.mywebsite.net,Nginx按配置顺序优先匹配先定义的server,你后续单独写的www跳转server块永远不会被命中 - 缺失80端口处理规则:你所有配置都只覆盖了443 HTTPS端口,访问HTTP协议(http://开头)的域名时会命中Nginx默认的80端口server,返回默认欢迎页,也不会触发跳转
修复方案
1. 调整443端口配置顺序与匹配规则
把www域名的跳转server块放在主站server块前面,主站server块仅绑定非www域名,避免匹配冲突。
2. 新增80端口统一跳转规则
捕获所有HTTP请求,统一跳转到HTTPS协议的非www域名,同时完成协议升级与域名跳转。
修复后完整配置
# 80端口统一跳转:所有HTTP请求直接跳HTTPS非www域名 server { listen 80; listen [::]:80; server_name mywebsite.net www.mywebsite.net; return 301 https://mywebsite.net$request_uri; } # 443端口www跳转:HTTPS的www域名直接跳非www server { listen 443 ssl; listen [::]:443 ssl; server_name www.mywebsite.net; ssl_certificate /etc/letsencrypt/live/mywebsite.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mywebsite.net/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; return 301 https://mywebsite.net$request_uri; } # 443端口主站配置:仅绑定非www域名 server { listen [::]:443 ssl ipv6only=on; listen 443 ssl; server_name mywebsite.net; root /home/myuser/mywebsite/client/build; index index.html index.htm index.nginx-debian.html; ssl_certificate /etc/letsencrypt/live/mywebsite.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mywebsite.net/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location /api { proxy_pass https://localhost:3001/api; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location / { try_files $uri $uri/ /index.html; } }
生效操作
配置修改完成后执行以下命令验证配置合法性,再重载Nginx即可:
# 验证配置是否正确 nginx -t # 重载Nginx使配置生效 systemctl reload nginx
补充说明
你之前curl返回的612字节响应就是Nginx默认欢迎页的标准大小,说明请求命中了默认server块,修复后curlhttp://www.mywebsite.net和https://www.mywebsite.net都会返回301跳转响应,跳转到https://mywebsite.net对应的站点资源。
内容的提问来源于stack exchange,提问作者Daniel Arias
相关产品推荐
相关产品推荐

