Thi*_*ilo 4 nginx proxy http-headers 500-error 400
我在 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;
Run Code Online (Sandbox Code Playgroud)
我可以采取什么措施来停用此行为并将标头添加到 HTTP 错误响应甚至 gzip HTTP 500 响应中?
今天,我在 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),则无论响应代码如何,都会添加标头字段。
这很有帮助,现在每个响应(包括错误)都按预期设置了所有标头。