#nginx #nginx-reverse-proxy #ngx-brotli
#nginx #nginx-reverse-proxy #ngx-brotli
Вопрос:
У меня есть обратный прокси-сервер nginx, который получает сжатый ответ brotli от восходящего потока (кэш Varnish). Но обратный прокси-сервер подает сжатый ответ brotli браузеру, только если я настрою «brotli on;» в блоке обратного прокси-сервера.
Моя цель — чтобы обратный прокси-сервер nginx вообще не обрабатывал сжатие. Для достижения этой цели у меня есть следующие вопросы:
-
Ожидается ли, что блок обратного прокси-сервера не будет сжимать полученный ответ и обрабатывать его самостоятельно? Разве он не может напрямую передать ответ восходящего потока обратно клиенту?
-
Есть ли способ сбросить ответ прокси или его размер в журналы nginx? Это поможет лучше отладить проблему.
Комментарии:
1. Здесь снято в темноте, но можно ли это исправить простым
gzip off;
способом в вашей конфигурации nginx?2. Пробовал
gzip off;
и все еще вижу проблему. Кроме того, я могу воспроизвести точно такое же поведение с помощью gzip (нигде нет brotli). Это означает, что я вижу несжатый ответ в браузере, даже если восходящий поток возвращает сжатый ответ, но gzip отключен на обратном прокси-сервере nginx.
Ответ №1:
Я решил эту проблему, поэтому публикую это для всех, кто может столкнуться с подобной проблемой:
- Varnish изменил заголовок моего запроса ‘Accept-Encoding’ на ‘gzip’. Согласно документации Varnish, это так, как задумано (см. Здесь ).
- Однако вышестоящий сервер nginx (за varnish) ответил несжатым содержимым, потому что значение по умолчанию
gzip_http_version
равно 1.0, а значение по умолчаниюproxy_http_version
равно 1.1 . (см. Здесь )
Разрешение было достигнуто путем:
a. настройка Varnish, чтобы не беспокоиться о сжатии, перейдя -p http_gzip_support=off
к varnishd
.
б. установка gzip_http_version
значения 1.1
на восходящем сервере Nginx.
Расшифровка вышеупомянутого поведения стала возможной, потому что я зарегистрировал следующее на своем восходящем сервере nginx (тот, который стоит за varnish):
log_format bytes_sent '$bytes_sent' - '$http_accept_encoding' - '$request';