Nginx反向代理实现非www转www及HTTP转HTTPS://www重定向
Nginx重定向配置问题排查与修复
你的配置存在两个关键问题,导致非www的HTTP/HTTPS请求无法正常跳转:
1. 语法错误导致非www HTTPS server块失效
在监听443 http2 ssl的非www server块中,listen指令结尾错误使用了冒号:,而非Nginx要求的分号;,这会让Nginx直接忽略该server块:
# 错误写法 listen 443 http2 ssl: # 正确写法 listen 443 http2 ssl;
2. HTTP跳转逻辑冗余(可选优化)
当前监听80的server块使用$host作为跳转目标,会导致http://web.co.uk先跳转到https://web.co.uk,再通过HTTPS非www server块跳转至最终目标,多了一次301跳转。可以直接写死目标域名,一步完成跳转:
server { listen 80; server_name www.web.co.uk web.co.uk; # 直接跳转到最终目标,减少一次跳转 return 301 https://www.web.co.uk$request_uri; }
修复后的完整配置
upstream wwwweb_be { server 111.11.11.111:443; } server { listen 80; server_name www.web.co.uk web.co.uk; return 301 https://www.web.co.uk$request_uri; } server { listen 443 http2 ssl; server_name web.co.uk; return 301 https://www.web.co.uk$request_uri; # 注意:需确保SSL证书包含web.co.uk域名的SAN条目,否则会触发证书错误 ssl_certificate /etc/sslcerts/web.co.uk/fullchain.pem; ssl_certificate_key /etc/sslcerts/web.co.uk/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; } server { listen 443 http2 ssl; server_name www.web.co.uk; ssl_certificate /etc/sslcerts/web.co.uk/fullchain.pem; ssl_certificate_key /etc/sslcerts/web.co.uk/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; access_log /var/log/nginx/wwwweb_access.log; error_log /var/log/nginx/wwwweb_error.log; location / { proxy_pass https://wwwweb_be; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_ssl_server_name on; } }
额外注意事项
- 修复配置后,执行
nginx -t验证语法正确性,再执行systemctl reload nginx使配置生效 - 确保SSL证书包含
web.co.uk和www.web.co.uk两个域名的Subject Alternative Name(SAN),否则非www的HTTPS请求会触发浏览器证书警告
内容的提问来源于stack exchange,提问作者CelticWebs
相关产品推荐
相关产品推荐

