对于百度仅找到 Apache,Nginx,Lighttpd 添加 HSTS 头表示各种不爽,于是我在这里收集了各种添加 HSTS 头的正常方法&奇葩方法,直接找到对应的即可。

Apache

编辑你的 apache 配置文件编辑你的 apache 配置文件(/etc/httpd/conf/httpd.conf)。

首先加载 mod_header 库

LoadModule headers_module modules/mod_headers.so

然后对应站点 VirtualHost 里面插入 HSTS 响应头信息。

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

别忘了保存 Apache 配置文件,然后重启。

Nginx

编辑 Nginx 配置文件(/usr/local/etc/nginx/nginx.conf)。

将以下代码添加到 server 块。

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

如果不行可以试试直接插入到 location ~ *php 内。

location ~ [^/]\.php(/|$) {
	add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
}

记得保存配置文件,然后重启。

Lighttpd

将下述配置增加到你的 Lighttpd 配置文件/etc/lighttpd/lighttpd.conf),没试过不知道什么情况。

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
	setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

一样要记得保存配置文件,然后重启。

IIS

一样没试过,请另行研究。

此模块只支持 IIS7 及以上版本,IIS6 看下面 ASP.NET 怎么加就怎么加吧。

但是加载该模块前最好先设置好强制 HTTPS 跳转规则。

HSTS-IIS 模块下载地址:https://github.com/FWest98/hsts-iis-module/releases

安装:https://github.com/FWest98/hsts-iis-module/blob/develop/documentation/Installation.md

开启 HSTS:https://github.com/FWest98/hsts-iis-module/blob/develop/documentation/Enabling{9cf3b2f3666bc7fdb4a68142d73cab43f336292b6b039880ee5bef944c342b8c}20HSTS.md

Tomcat

编辑 web.xml 文件(tomcat/conf/web.xml)

找到以下几行,去掉注释。

<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
</filter>

在后面添加以下几行:

<init-param>
<param-name>hstsMaxAgeSeconds</param-name>
<param-value>63072000</param-value>
</init-param>

最后找到以下几行,去掉注释。

<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

仍然要记得保存,然后重启。

PHP

PHP 最简单了,将以下代码添加到网站根目录的 index.php 即可。

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

ASP.NET

如果你可以修改 web.config 文件,你可以添加以下代码(如果你已经设置了强制 HTTPS 跳转可以无视前一条规则)。

<rewrite>
 <rules>
  <rule stopprocessing="true" name="HTTP to HTTPS redirect">
   <match url="(.*)" />
   <conditions>
    <add ignorecase="true" pattern="off" input="{HTTPS}" />
   </conditions>
   <action url="https://{HTTP_HOST}/{R:1}" redirecttype="Permanent" type="Redirect" />
  </rule>
 </rules>
 <outboundrules>
  <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
   <match pattern=".*" servervariable="RESPONSE_Strict_Transport_Security" />
   <conditions>
    <add ignorecase="true" pattern="on" input="{HTTPS}" />
   </conditions>
   <action type="Rewrite" value="max-age=63072000; includeSubDomains; preload" />
  </rule>
 </outboundrules>
</rewrite>

JSP

没学过 JSP,咋用自己看着办。

response.setHeader("Strict-Transport-Security", "max-age=63072000; includeSubdomains; preload");

NodeJS

使用 Helmet.js,至于咋用可以看官方文档,链接在文章末尾。

全能方案

如果你使用 CloudFlare CDN,可以通过 CloudFlare 添加 HSTS 。

1,在你的域名后台 Crypto 选项卡找到 HTTP Scrict Transport Security(HSTS)。

QQ截图20170311115917

2,这里你需要确认网站是否启用 HTTPS,

如果开启了 HTTPS,那么可以勾选 I understand 然后点击 Next Step 。

QQ截图20170311115940

3,对 HSTS 进行配置。

max-age 最多只能设置为 12 个月。

QQ截图20170311122406

确认完毕点击 Save 保存即可。

参考文章

部分需 FQ

https://zhangzifan.com/http-hsts.html

https://helmetjs.github.io/docs/hsts/

http://rical.blogspot.jp/2016/10/setting-hsts-in-asp-net.html

http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx

http://stackoverflow.com/questions/21887524/enable-http-strict-transport-security-hsts-in-azure-webroles

http://stackoverflow.com/questions/27541755/add-hsts-feature-to-tomcat