Nginx hsts选项禁用其他安全性

时间:2018-03-02 13:00:50

标签: ubuntu nginx ubuntu-16.04

我在/etc/nginx/sites-available/default

中有此配置
server {
   listen 443 ssl; # managed by Certbot
   ...
   # add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";
}

我在/etc/nginx/nginx.conf

中有以下内容
http {
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    ...

}

现在,如果我使用https://securityheaders.io/使用该配置测试我的网站,我会通过XSS,内容类型和帧的3个测试,但我没有通过HSTS测试。

如果我评论HSTS add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";行,我会通过STS测试,但我不再通过其他3。我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

add_header块中定义的http语句在server块中继承 时,如果另一个add_header语句位于较低位置块级别。

来自the documentation

  

当且仅当,这些指令继承自上一级别   在当前级别上没有定义add_header指令。

您需要将add_header语句放在一起 - 这在此类情况下不方便。

一种可能性是将公共语句移动到单独的文件中,以便它们可以包含在include语句中。

例如:

server {
     ...
     add_header Strict-Transport-Security "...";
     include /path/to/common.headers;
}