我最近更改了我的 nginx 配置,将所有 http 流量重定向到 https(并将所有 www 流量重定向到 no-www)。
也添加add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
到我的服务器块是否有意义?或者这是不需要的,因为我已经重定向了所有流量?知道优点(和缺点,如果有的话)会很棒。
如果相关,我当前的虚拟主机配置是:
server {
server_name example.com www.example.com;
listen 80;
return 301 https://example.com$request_uri;
}
server {
server_name www.example.com;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/cert_chain.crt;
... other SSL related config ...
return 301 https://example.com$request_uri;
}
server {
server_name example.com;
listen 443 ssl;
... other SSL related config ...
... remaining server configuration ...
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*Tim 16
HSTS 告诉浏览器总是使用 https,而不是 http。添加该配置可能会减少从 http 到 https 的转发需求,因此它可能会略微提高网站性能并非常轻微地降低服务器负载。
作为参考,这是我在基于 Nginx 的网站上使用的安全标头。我将它保存到一个文件中,并从需要它的所有服务器(包括 http 和 https 服务器)中包含它。它允许加载一些常见的资源,如 Google 和 Facebook。
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Content-Security-Policy "default-src 'self' www.google-analytics.com ajax.googleapis.com www.google.com google.com gstatic.com www.gstatic.com connect.facebook.net facebook.com;";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "origin";
Run Code Online (Sandbox Code Playgroud)
澄清
您仍然需要适当的 http 到 https 重定向。
小智 9
接受的答案很好,但已经过时了,并且有一个我在逐行研究时发现的缺陷。
HSTS 标头的持续时间必须至少为三个月才能满足安全要求。我在安全标头片段中使用了以下内容,在 SSL 测试中获得了 A+:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
Run Code Online (Sandbox Code Playgroud)
其次,不推荐使用X-Frame-Options
(并且许多/大多数主要浏览器从未支持)。当前的标准(即在所有主要现代浏览器中实现)是Content-Security-Policy
(CSP)。
add_header Content-Security-Policy 'frame-ancestors https://mywebapp.mywebsite.example';
Run Code Online (Sandbox Code Playgroud)
从示例中可以明显看出,CSP 标头必须在每个站点的基础上设置(除非我还没有见过聪明的正则表达式/等)。
小智 5
我建议指定always
参数add_header
以包含内部生成的错误页面的标头。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Run Code Online (Sandbox Code Playgroud)
另外,将该preload
指令添加到响应标头,以便您稍后可以将您的网站添加到预加载列表中