我在 Apache 2.4 服务器前使用 nginx 作为 TLS 终止器。
我add_header X-Content-Type-Options nosniff;
在 nginx 中使用此标头添加到每个响应中。
如果 Apache 返回的 HTTP 状态代码低于 400,则表示标头设置正确,但如果状态大于或等于 400,则省略标头。
gzip 模块也是一样。如果状态代码低于 500,gzip 模块会自动压缩响应主体。但是如果 Apache 发出的 HTTP 状态代码大于或等于 500,gzip 模块就不会执行任何操作。
我的 nginx 配置的一些相关部分:
proxy_intercept_errors off;
proxy_ignore_client_abort off;
proxy_http_version 1.1;
proxy_hide_header X-Powered-By;
proxy_set_header Connection ""; #for keepalive to backend
add_header X-Content-Type-Options nosniff;
### gzip ###
gzip on;
gzip_min_length 20; #default: 20
gzip_comp_level 9;
gzip_proxied any;
gzip_vary on;
gzip_types *;
gunzip on;
我可以做些什么来停用此行为并将我的标头添加到 HTTP 错误响应甚至 gzip HTTP 500 响应中?
答案1
今天我偶然发现了这里的 SSL 实验室线程中的解决方案: https://community.qualys.com/thread/17333-hsts-header-not-being-set-by-nginx-on-error
基本上,您必须always
在add_header
配置选项中添加关键字。引用 nginx 文档 (http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header):
如果指定了always参数(1.7.5),那么无论响应代码如何,都会添加标头字段。
这很有帮助,现在每个响应(包括错误)的所有标头都按预期设置。