现代浏览器对HTTP明文请求的危险提示,使得强制HTTPS不再是高级选项,而是网站的基础配置。如果你使用Nginx搭建网站,如何优雅、安全地配置HTTPS自动跳转?
Nginx作为高性能反向代理服务器,可以通过server块进行不同端口、协议的监听。其重定向逻辑通常为监听80端口的HTTP请求,检测域名访问是否非HTTPS,301永久跳转至HTTPS地址。这种做法称为HTTP→ HTTPS强制重定向,既利于SEO,又改善用户访问体验。
在正式配置之前,确保你已经完成以下工作:
- 安装好Nginx;
- 拥有域名并正确解析至服务器;
- 申请并安装了SSL证书
- 拥有Nginx的root权限进行配置修改。
标准配置方式:一步实现强制HTTPS跳转
假设你的网站域名为example.com,SSL证书已经准备好。下面是标准的两段配置。
HTTP请求监听与重定向配置
server {
listen 80;
server_name example.com www.example.com;
# 重定向所有 HTTP 请求到 HTTPS(永久跳转)
return 301 https://$host$request_uri;
}
这段代码表示:所有访问80端口的请求(无论是根目录还是某个子路径),都将被永久重定向到对应的HTTPS地址。
HTTPS服务配置(已启用SSL)
server {
listen 80;
server_name example.com www.example.com;
# 重定向所有 HTTP 请求到 HTTPS(永久跳转)
return 301 https://$host$request_uri;
}
配置完成后:
http://example.com → 自动跳转至 https://example.com
用户无须记住端口和协议,自动进入加密连接
多域名、多端口与 HSTS 设置
场景 1:多个域名统一跳转
server {
listen 80 default_server;
server_name _;
return 301 https://example.com$request_uri;
}
可用于将所有“未知域名”的请求统一跳转至主域名的 HTTPS 页面。
场景 2:添加 HSTS 安全头(强制浏览器使用 HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
max-age=63072000:强制使用 HTTPS 2 年
includeSubDomains:子域名也适用
preload:可提交到浏览器 HSTS 列表(需验证)
注意:一旦开启 HSTS,短期内无法回滚,务必确保 SSL 证书持续有效。
配置验证与测试方法
完成 Nginx 配置后,使用以下方式测试是否正确:
本地 curl 检查重定向:
curl -I http://example.com
输出应包含:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
浏览器访问:
直接访问 http://example.com,看是否自动跳转并显示安全锁。
在Nginx中强制启用HTTPS,是保障用户隐私、网站数据完整性的重要步骤。通过简单的配置文件调整,你可以获得浏览器信任,提升SEO权重,阻止中间人攻击,构建专业可信的网站形象。作为一名开发者或运维工程师,掌握HTTPS重定向不仅是技能,更是对用户的一份责任。