Как отключить двойную кодировку Nginx gzip, когда бэкэнд fastcgi иногда выполняет сжатую кодировку контента?

Есть ли какой-нибудь умный способ обмануть nginx, чтобы остановить gzip, если бэкэнд уже установил заголовок «content-encoding»?

Nginx настроен для gzip вывода из бэкэнда php fastcgi.

Это прекрасно работает в 99% случаев.

За исключением редких случаев, php отправит сырой gzipped файл и приложит Content-Encoding: gzip заголовок.

К сожалению, Nginx попытается скопировать этот контент во второй раз.

Производит двойной content-encoding: gzip content-encoding: gzip заголовок и двойное кодированное сжатое тело.

Большинство современных браузеров могут справиться с этим, Firefox, Chrome.

IE8 не может, Safari mobile не может, старый Safari 5 для Windows не может — вместо этого они будут отображать искаженный сжатый контент, потому что он объединяет заголовки с кодировкой контента и декодирует только один раз тело.

Спасибо за любые идеи.

3

Решение

Где-то в nginx.conf, где он применяется (где-то должен быть файл fastcgi_params):

fastcgi_param  HTTP_ACCEPT_ENCODING      "";

Это отключит кодировку из бэкэнда.

Я надеюсь, что после этого Nginx будет обслуживать закодированный контент. (Я не уверен)

1

Другие решения

Других решений пока нет …