HTTPS下Nginx如何正确配置非www域名到www的重定向
正确实现HTTPS裸域到www域名重定向的配置方法
你之前新增443重定向server块报错,基本是两个配置冲突导致:一是重复设置了ipv6only=on监听参数,二是可能证书未覆盖裸域触发SSL层错误,按以下步骤调整即可:
前置检查
先确认你的Let's Encrypt证书包含裸域redvi.eu,如果之前签发时只绑定了www域名,执行以下命令重新签发包含两个域名的证书,避免重定向时触发证书不信任警告:
certbot --nginx -d www.redvi.eu -d redvi.eu
执行后证书路径不会变化,无需修改原有证书配置项。
配置调整
你只需要在现有配置基础上,新增一个独立的443端口server块专门处理裸域请求即可,注意不要和现有www站点的监听参数重复:
- 保留原有80端口的HTTP跳转配置不变
- 新增裸域HTTPS跳转server块,不要给这个块加
ipv6only=on参数(同端口的IPv6监听仅允许一个server块设置该参数,重复配置会直接报错) - 原有www域名的443业务server块保持原有配置不动
完整配置参考如下:
# HTTP 统一跳转HTTPS的www域名 server { listen 80 default_server; listen [::]:80 default_server; server_name www.redvi.eu redvi.eu; return 301 https://www.redvi.eu$request_uri; } # HTTPS 裸域统一跳转www域名 server { listen 443 ssl; listen [::]:443 ssl; server_name redvi.eu; # 复用现有SSL证书配置 ssl_certificate /etc/letsencrypt/live/www.redvi.eu/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.redvi.eu/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; return 301 https://www.redvi.eu$request_uri; } # 原有www域名的业务服务配置 server { listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot server_name www.redvi.eu; root /home/deploy/redvi/current/public; passenger_enabled on; passenger_app_env production; location /cable { passenger_app_group_name redvi_websocket; passenger_force_max_concurrent_requests_per_process 0; } client_max_body_size 100m; location ~ ^/(assets|packs) { expires max; gzip_static on; } ssl_certificate /etc/letsencrypt/live/www.redvi.eu/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/www.redvi.eu/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
生效验证
配置修改完成后,先执行配置校验命令,确认无报错再重载服务:
# 校验Nginx配置合法性 nginx -t # 校验通过后重载配置生效 nginx -s reload
注意事项
- 独立server块实现重定向是Nginx官方推荐的方案,不要在业务server块内使用
if指令判断Host做跳转,if指令在server上下文存在多个已知的行为陷阱,容易出现不可预期的匹配错误。 - 正式配置301永久跳转前,可以先把返回状态码改成302临时跳转,测试所有访问规则正常后再换回301,避免浏览器长期缓存错误的重定向规则。
内容的提问来源于stack exchange,提问作者Juanse Cora
相关产品推荐
相关产品推荐

