如何在 nginx 中删除 accept-encoding 请求标头?

如何在 nginx 中删除 accept-encoding 请求标头?

最近对 zlib 的更新是由于安全漏洞在 Ubuntu Focal 上通过 nginx 提供 PHP-FPM 8.0 时似乎会导致严重问题。任何使用 gzip 编码的请求都会在响应开始时失败,尽管 nginx 将请求记录为成功且大小正确。如果我发出没有标头的请求Accept-Encoding,它会完美运行。作为一种解决方法,我试图禁用所有 gzip 支持,但它似乎非常持久……到目前为止,我在 nginx 中尝试了这些设置:

gzip off;
fastcgi_buffering off;
add_header Accept-Encoding "";
proxy_set_header Accept-Encoding "";

并且我还检查了没有其他指令可以通过 greppingnginx -T输出再次打开这些指令。

但是,如果我从 PHP 转储请求标头(即,在经过 nginx 之后),我仍然会看到这个接受标头:

Accept-Encoding: deflate, gzip, br, zstd

所以 nginx 是不是在请求传递到 PHP-FPM 之前将其从请求中剥离。我尝试在服务器和位置级别设置这些指令,结果相同。

在 PHP 中,我已禁用所有输出缓冲,但似乎无法在不重新编译的情况下禁用 zlib。

我怎样才能让 nginx 删除这个请求标头,以便 nginx 和 PHP 都不会压缩响应?

答案1

proxy_set_header指令是为了代理请求,即通过HTTP 到 HTTP-服务器链。并且你有快速CGI服务器在链中的下一个,因此您的指令集从 开始fastcgi_

您可以通过设置为 off 来完全禁用将请求标头传递给 PHP fastcgi_pass_request_headers,或者您可以通过使用 重置来删除特定标头fastcgi_set_header

答案2

对于 fastcgi,您使用的语法略有不同。您不是设置标头,而是设置与标头对应的参数。参数名称以“HTTP_”开头,然后是大写的标头名称。参数名称中的破折号被替换为下划线。

fastcgi_param HTTP_ACCEPT_ENCODING "";

相关内容