Nginx配置问题:非www域名重定向至www HTTPS(SSL_ERROR_BAD_CERT_DOMAIN)
解决Nginx下非www HTTPS域名无法访问及统一重定向问题
我一眼就看到你遇到的核心问题——https://example.com访问时的SSL证书域名不匹配错误,根源出在Nginx配置的语法错误上,咱们一步步来修复:
问题诊断
你第一个listen 443 ssl的server块里,server_name example.com后面漏掉了分号,直接跟了ssl_certificate指令,这会导致Nginx完全无法解析这个server配置,相当于这个块根本没生效。当用户访问https://example.com时,Nginx找不到匹配的server,就会默认使用标注了default_server的www.example.com server块,而这个块的证书是针对www.example.com的,自然就触发了SSL_ERROR_BAD_CERT_DOMAIN错误。
修正后的完整Nginx配置
把语法错误修复后,就能实现所有请求统一重定向到https://www.example.com的需求:
# 处理不带www的HTTPS请求,用对应证书完成重定向 server { 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; return 301 https://www.example.com$request_uri; } # 处理带www的HTTPS请求,提供站点内容 server { listen 443 ssl default_server; server_name www.example.com; root /home/build/; index index.html index.htm; ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; location / { try_files $uri /index.html; } } # 统一处理所有HTTP请求,重定向到目标HTTPS地址 server { listen 80; server_name example.com www.example.com; return 301 https://www.example.com$request_uri; }
关键修正与说明
- 修复了第一个server块的语法错误,让它能正常匹配
https://example.com的请求,使用对应的证书完成重定向,彻底解决证书不匹配问题。 - 保留了所有HTTP请求的统一重定向逻辑,确保用户不管输入哪种HTTP地址,最终都会跳转到
https://www.example.com。
验证步骤
- 先检查Nginx配置语法是否正确:
输出sudo nginx -ttest is successful就说明配置没问题。 - 重启Nginx让配置生效:
sudo systemctl restart nginx - 测试所有访问场景:
http://example.com→ 自动跳转到https://www.example.comhttps://example.com→ 自动跳转到https://www.example.comhttp://www.example.com→ 自动跳转到https://www.example.comhttps://www.example.com→ 正常加载站点内容
这样就能完全实现你想要的所有交互都在www.example.com上的需求了。
内容的提问来源于stack exchange,提问作者crellee
相关产品推荐
相关产品推荐

