最轻量可靠的方式是用独立server块在listen 80中写return 301 https://$host$request_uri;,禁用ssl指令;443端口需另配独立ssl server块,并确保证书路径正确、权限合理。

用 return 301 实现 HTTPS 重定向,是 Nginx 下最轻量、最可靠的方式。它不经过 rewrite 引擎解析,无变量拼接开销,响应毫秒级,适合高并发场景。
只在 HTTP server 块中写 return 301
确保这个逻辑只出现在监听 80 端口的独立 server 块里:
- 必须写
listen 80;,不能混在 443 的 SSL 块中 - 使用
return 301 https://$host$request_uri;——$host保留原始域名,$request_uri完整携带路径和参数,对 SEO 友好 - 不要加
ssl on或任何证书指令,否则 Nginx 启动会报错 - 如果域名有多个(如带 www 和不带 www),
server_name要明确列出:server_name example.com www.example.com;
HTTPS server 块必须独立且可用
另一个 server 块专用于 443 端口,它不参与跳转,只负责安全响应:
- 写
listen 443 ssl http2;(http2 非必需但推荐) -
ssl_certificate和ssl_certificate_key路径要绝对准确,且 Nginx 进程有读取权限(私钥建议chmod 600) - 可加 HSTS 头增强安全:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - 不要在这个块里写任何跳回 HTTP 的逻辑,避免形成循环
宝塔用户请改站点配置文件,别碰 nginx.conf
宝塔会覆盖 /usr/local/nginx/conf/nginx.conf,手动改这里等于白做:
- 进「网站」→ 找到对应站点 → 「设置」→ 「配置文件」
- 编辑的是类似
/www/server/panel/vhost/nginx/yourdomain.com.conf的专属文件 - 在里面找
listen 80开头的server块,插入return 301行 - 若用泛域名或 IP 直接访问,
$host可能为空,建议硬编码目标域名:return 301 https://www.example.com$request_uri; - 每行结尾必须有分号,漏掉会导致整个 Nginx 启动失败
验证与排障要点
改完不验证 = 没改:
- 运行
sudo nginx -t,看到successful才算语法通过 - 执行
sudo nginx -s reload(或systemctl reload nginx)使配置生效 - 用
curl -I http://yourdomain.com检查返回是否为HTTP/1.1 301 Moved Permanently且Location头正确 - 浏览器访问 HTTP 地址,应直接跳转,地址栏变 HTTPS 并显示锁图标
- 若提示“重定向次数过多”,重点检查:CDN 是否已强制 HTTPS、宝塔「SSL」页是否重复开启了「强制 HTTPS」、HTTPS 块里是否有错误的
if判断











