Есть ли какой-нибудь умный способ обмануть 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 не может — вместо этого они будут отображать искаженный сжатый контент, потому что он объединяет заголовки с кодировкой контента и декодирует только один раз тело.
Спасибо за любые идеи.
Где-то в nginx.conf, где он применяется (где-то должен быть файл fastcgi_params):
fastcgi_param HTTP_ACCEPT_ENCODING "";
Это отключит кодировку из бэкэнда.
Я надеюсь, что после этого Nginx будет обслуживать закодированный контент. (Я не уверен)
Других решений пока нет …