我在/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。我究竟做错了什么?
当在较低的块级别存在另一个add_header
语句时,http
块中定义的server
语句不会被add_header
块继承。
当且仅当在当前级别上没有定义add_header指令时,这些指令才从前一级继承。
你需要把你的add_header
陈述放在一起 - 这在这样的情况下是不方便的。
一种可能性是将公共语句移动到单独的文件中,以便它们可以包含在include
语句中。
例如:
server {
...
add_header Strict-Transport-Security "...";
include /path/to/common.headers;
}