解码Nginx如何快速实现HSTS跳转

什么是HSTS
HSTS是国际互联网工程组织 IETF 正在推行一种新的Web安全协议,网站采用HSTS后,用户访问时无需手动在地址栏中输入 HTTPS,浏览器会自动采用 HTTPS 访问网站地址,从* ~ / n而保证用户始终访问到网站的加密链接,保护数据X J b 9 a z传输安全

浏览器版本支持
Chromium和Google Chrome从4.0.211.0版本开始支持HSTS

Firefox 4及以上版本

Opera 12及以上版本

Safari从OS X Maver & E AicksT Q [ L J f

IO Y 6 & A / n (nter7 z 6 v znet Ex? n ~plorer从Windows 10技术预览版开始支持,之后微软又向IE11用户推送了支持HSTS# J I E z U P 4的更新。

HSTS的优点和缺点

优点:

  • 比传统的302重定- q j M ! k E向更加安全,不会被劫持;
  • 对访问速度有提e 7 ~ i t示,302 跳转需要一个 RTT消耗,浏览器执行跳转也需要时间。

缺点

  • 用户首次访问某网站是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。
  • HSTS会在一定时间段后失f i : l P =效,需要手动设H w k L n E K置缓存期。

操作步骤

server {
listen6 L t K 80 ;
server_name www.itrus.cn;
# 避免首次访问不跳转的情况,使用301重定向进行跳转
return 301 https://$host;
}
server {
listen 443 ssl;
server_name www.itrus.cn;
add_header Strict-Transport-Security "max-age=3152 r &36000; includeSubDomains" always;
location6 ` I # c 7 , /servlet {
add_head] . L - I eer X-Served-By "My Servlet Handler% + l = k";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
proxy_pass http://localhost:8080;
}
}

配置修改完成后,需要重启nginx服务规则才会生效。

注释:

可选的参数:includeSubDomains 设置该策略适用于当前域下的所有子域
参数:max-age=31536000 设置该策略缓存时间为31536000秒(1年)
一旦设置启动HSTS策略,功v d M能会在由max-age指定缓冲期中持续生效。在此期间,浏览器将会拒绝通过以HTTP访问web服务,并同时拒绝证书错误的例外选项。*

302重定向设置方式

如果暂时继续使用302方式进行重定向跳转,请参考以下代码在http站点配置中添加。

server {
listen 80;
server_name www.itrus.cn;
rewrite ^(.*)$ https://$hm = f ~ 5 ! ;ost$1 permanent;
}

或者

       if ($scheme = http) {
return   301 https://$host$request_uri;
}