最常用且推荐的方式是在监听80端口的server块中使用return 301指令跳转到HTTPS,配置需包含listen 80、server_name及return 301 https://$host$request_uri;,同时确保443端口HTTPS server块已正确配置SSL证书与协议。

在 Nginx 中,将所有 HTTP 请求强制跳转到 HTTPS,最常用且推荐的方式是:在监听 80 端口的 server 块中使用 return 301 指令进行永久重定向。
配置监听 80 端口并 301 跳转到 HTTPS
确保你的 Nginx 已启用 HTTPS(即已有监听 443 端口、配置了 SSL 证书的 server 块),然后单独定义一个仅处理 HTTP 的 server 块:
- 监听 80 端口,不加载 SSL 配置
- 使用 return 301 https://$host$request_uri; 实现带原始路径和参数的精准跳转
- $host 保留原域名(支持多域名共用同一配置),$request_uri 保留完整路径和查询参数
示例配置:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
HTTPS server 块需正常配置 SSL
跳转本身不依赖 HTTPS 块是否“完美”,但必须存在且可访问,否则用户会遇到连接失败。关键项包括:
- listen 443 ssl; —— 明确启用 SSL
- ssl_certificate 和 ssl_certificate_key —— 指向有效的证书文件
- 建议开启 ssl_protocols TLSv1.2 TLSv1.3; 等安全协议
避免常见错误
- 不要在同一个 server 块里同时监听 80 和 443 并用 if ($scheme = http) { return 301 ... } —— 效率低且 Nginx 官方不推荐
- 不要写成 return 302 —— 临时跳转会阻碍搜索引擎更新索引,应使用 301 表示永久迁移
- 确保 DNS 解析和防火墙放行 80/443 端口,否则跳转后用户无法访问 HTTPS 站点
验证是否生效
修改配置后执行 nginx -t 测试语法,再 nginx -s reload 重载。随后可:
- 浏览器访问 http://yourdomain.com,观察地址栏是否自动变为 https 且状态码为 301
- 用 curl -I http://yourdomain.com 查看响应头中是否有 Location: https://...


















