最推荐用 return 301 实现 HTTP 到 HTTPS 跳转,语法简洁高效、保留完整路径和查询参数、SEO友好;需确保 HTTPS server 块已正确配置并放行 443 端口,修改后执行 nginx -t 和 nginx -s reload 验证。
直接在 Nginx 配置中新增一个监听 80 端口的 `server` 块,用 `return 301` 指令跳转,是最简洁、高效且符合规范的做法。它天然保留原始路径和全部查询参数,对 SEO 友好,也避免了正则匹配开销。在你的 Nginx 配置文件(如 /etc/nginx/conf.d/your-site.conf 或 /www/server/nginx/conf/vhost/域名.conf)中,添加或确认存在如下配置:
listen 80; 必须监听 HTTP 默认端口
server_name 要与 HTTPS 的 server 块保持一致(例如 example.com www.example.com)
return 301 https://$host$request_uri; —— 关键:$request_uri 包含完整路径 + 查询参数(如 /login?next=/admin),不会丢失
示例:
server {listen 80;server_name example.com www.example.com;return 301 https://$host$request_uri;}
如果因历史原因需用 rewrite,语法等效但稍冗余:
注意:不要写成 rewrite ^(.*)$ https://$host$1 permanent; —— $1 在 ^(.*)$ 中虽能捕获,但不如 $request_uri 直观可靠,且易在特殊字符下出错。
确保以下条件已满足,否则跳转会失败或报错:
• curl -I http://example.com/path?x=1 → 应返回 HTTP/1.1 301 Moved Permanently 和正确的 Location 头
• 浏览器访问 http://example.com/test?a=b → 地址栏自动变为 https://...,且参数完整保留
以下方式存在明显缺陷,应避免: