
Недавнее обновление zlib из-задыра в безопасностиПохоже, что это вызывает серьезную проблему при обслуживании PHP-FPM 8.0 через nginx на Ubuntu focal. Любые запросы с кодировкой gzip терпят неудачу прямо в начале ответа, хотя nginx регистрирует запросы как успешные и с правильным размером. Если я делаю запросы без заголовка Accept-Encoding
, все работает отлично. В качестве обходного пути я пытаюсь отключить всю поддержку gzip, но это, кажется, удивительно устойчиво... Пока что я пробовал следующие настройки в nginx:
gzip off;
fastcgi_buffering off;
add_header Accept-Encoding "";
proxy_set_header Accept-Encoding "";
и я также проверил, нет ли других директив, которые снова включают их, проверив nginx -T
вывод с помощью grep.
Однако если я сбрасываю заголовки запроса из PHP (т.е. после того, как он прошел через nginx), я все равно вижу этот заголовок accept:
Accept-Encoding: deflate, gzip, br, zstd
так что nginx этонетудаляя его из запроса перед тем, как он будет передан в PHP-FPM. Я пробовал устанавливать эти директивы на уровне сервера и местоположения, с теми же результатами.
В PHP я отключил всю буферизацию вывода, но, похоже, отключить zlib без перекомпиляции невозможно.
Как заставить nginx удалить этот заголовок запроса, чтобы ни nginx, ни PHP не сжимали ответы?
решение1
proxy_set_header
Директива предназначена дляпроксированиезапросы, т.е. для их прохождения черезHTTP-to-HTTP-серверная цепочка. И у вас естьFastCGIследующий сервер в цепочке, поэтому ваш набор директив начинается с fastcgi_
.
Вы можете полностью отключить передачу заголовков запросов в PHP, установив fastcgi_pass_request_headers
значение off, или можете удалить определенный заголовок, сбросив его с помощью fastcgi_set_header
.
решение2
Для fastcgi используется немного другой синтаксис. Вместо установки заголовка вы устанавливаете параметр, соответствующий заголовку. Имена параметров начинаются с "HTTP_", затем следует имя заголовка в верхнем регистре. В имени параметра тире заменяются подчеркиваниями.
fastcgi_param HTTP_ACCEPT_ENCODING "";