
最近對 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 "";