
zlibの最近のアップデートにより、セキュリティホールUbuntu focus で 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 "";
また、出力を grep して、これらを再度オンにする他のディレクティブがないことも確認しましたnginx -T
。
ただし、PHP からリクエスト ヘッダーをダンプすると (つまり、nginx を通過した後に)、次の accept ヘッダーがまだ表示されます。
Accept-Encoding: deflate, gzip, br, zstd
nginxはないPHP-FPM に渡される前にリクエストからそれを削除します。サーバーレベルと場所レベルでこれらのディレクティブを設定してみましたが、結果は同じでした。
PHP ではすべての出力バッファリングを無効にしましたが、再コンパイルせずに zlib を無効にすることはできないようです。
nginx も PHP も応答を圧縮しないように、nginx でこのリクエスト ヘッダーを削除するにはどうすればよいでしょうか?
答え1
proxy_set_header
指令はプロキシリクエストを渡すためのHTTPからHTTP-サーバーチェーン。そして、高速CGIチェーン内の次のサーバーは なので、ディレクティブのセットは から始まりますfastcgi_
。
をオフに設定することで、リクエスト ヘッダーを PHP に渡すことを完全に無効にしたりfastcgi_pass_request_headers
、 でリセットすることで特定のヘッダーを削除したりできますfastcgi_set_header
。
答え2
fastcgi の場合は、少し異なる構文を使用します。ヘッダーを設定する代わりに、ヘッダーに対応するパラメータを設定します。パラメータ名は「HTTP_」で始まり、その後に大文字のヘッダー名が続きます。パラメータ名のダッシュはアンダースコアに置き換えられます。
fastcgi_param HTTP_ACCEPT_ENCODING "";