Nginx配置实现非www链接重定向到带www的HTTPS站点问题求助
配置错误原因
- 监听443端口的业务server块同时绑定了
example.com和www.example.com,用户访问https://example.com时会直接进入该块处理,不会触发任何跳转规则 - 80端口的原有重定向规则仅完成了HTTP转HTTPS,没有将非www域名跳转为带www的域名
- 后续新增的default_server规则和同端口下明确配置了
server_name的块冲突,Nginx匹配请求时会优先走server_name完全匹配的块,default_server的规则不会生效
正确完整配置
替换你的/etc/nginx/sites-available/example.com全部内容为以下配置:
# 处理所有非www的HTTPS请求跳转 server { listen [::]:443 ssl ipv6only=on; listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; return 301 https://www.example.com$request_uri; } # 带www的HTTPS业务站点配置 server { listen [::]:443 ssl ipv6only=on; listen 443 ssl; server_name www.example.com; root /var/www/example.com; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } # 所有HTTP请求统一跳转对应HTTPS站点 server { listen 80; listen [::]:80; server_name example.com www.example.com; return 301 https://$host$request_uri; }
生效操作步骤
- 执行
nginx -t测试配置是否合法,确认返回test is successful再执行下一步 - 执行
systemctl reload nginx重载Nginx配置 - 测试前清空浏览器缓存,301永久重定向会被浏览器默认缓存,避免旧缓存影响测试结果
内容的提问来源于stack exchange,提问作者user8758206
相关产品推荐
相关产品推荐

