Nginx 配置 HTTPS 跳转失败通常是因为 80 端口监听缺失、return 语句语法错误或证书路径不正确。排查时优先检查 Nginx 配置文件语法,确认 80 端口是否强制跳转 443,并验证证书文件权限是否允许 Nginx 读取。
先说结论:配置错误、端口阻塞或证书路径问题是导致 HTTPS 跳转失败的三大主因。
- 先确认 Nginx 配置语法通过
- 先处理 80 端口跳转逻辑
- 再验证 HTTPS 响应头
命令速用版
nginx -t
systemctl restart nginx
curl -I http://yourdomain.com为什么会这样
跳转依赖 HTTP 状态码 301 或 302,若 Nginx 未监听 80 端口或 rewrite 规则冲突,浏览器无法完成协议切换。
CN2 VPS 与普通 VPS 在 Nginx 配置层面无差异,但需留意服务商安全组是否放行 80 和 443 端口。
分步处理
第一步检查配置文件语法。执行 nginx -t 命令,若显示 syntax is ok 则继续,否则按提示修改配置文件。
第二步确认 80 端口 server 块配置。确保存在 listen 80; 段落,并包含 return 301 https://$host$request_uri; 指令。
第三步核对证书路径。检查 ssl_certificate 和 ssl_certificate_key 指向的文件是否存在,且 Nginx 运行用户有读取权限。
第四步检查防火墙设置。确认 VPS 服务商控制台安全组规则允许 inbound 80 和 443 端口流量。
怎么验证是否生效
使用 curl -I http://yourdomain.com 命令,观察响应头 Location 是否指向 https 开头地址且状态码为 301。
浏览器访问 http 地址,地址栏应自动变为 https 且无证书报错。
常见坑
配置跳转循环:HTTPS server 块内错误配置了跳转回 HTTP 的规则,导致浏览器报错 ERR_TOO_MANY_REDIRECTS。
浏览器缓存:之前失败的 302 跳转被浏览器缓存,修改配置后需清除浏览器缓存或使用无痕模式验证。
CDN 干扰:若域名接入 CDN,需在 CDN 控制台开启强制 HTTPS,否则源站跳转可能被 CDN 策略覆盖。
常见问题
301 和 302 跳转有什么区别
301 是永久跳转,利于 SEO 权重传递;302 是临时跳转,搜索引擎可能不更新索引。
证书路径正确但仍报错怎么办
检查文件权限,确保 Nginx 进程用户(如 www-data)有权读取私钥文件。
www 和非 www 域名跳转不一致
在 server_name 中同时填写 www 和非 www 域名,或单独配置一个 server 块将非首选域名跳转至首选域名。
参考来源
Nginx 官方文档 - Configuring HTTPS servers https://nginx.org/en/docs/http/configuring_https_servers.html