如何刪除 nginx 中的接受編碼請求標頭?

如何刪除 nginx 中的接受編碼請求標頭?

最近對 zlib 的更新是由於安全漏洞當在 Ubuntu 焦點上透過 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 "";

我還檢查了沒有其他指令可以透過 grepnginx -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 "";

相關內容