Comment désactiver le double encodage gzip de Nginx lorsque le back-end de fastcgi sert occasionnellement du gzippé avec l’encodage du contenu?

Existe-t-il un moyen astucieux de piéger nginx pour qu’il arrête gzip si le backend a déjà défini l’en-tête “content-encoding”?

Nginx est configuré pour compresser le résultat du backend php fastcgi.

Cela fonctionne très bien dans 99% des cas.

À de rares occasions, php envoie un fichier gzippé brut et joint un en Content-Encoding: gzip tête Content-Encoding: gzip .

Nginx ira malheureusement de l’avant et essaiera de créer ce contenu une seconde fois.

Le produit un double content-encoding: gzip content-encoding: gzip tête content-encoding: gzip et corps gzippé à double encodage.

La plupart des navigateurs modernes peuvent gérer cela, Firefox, Chrome.

IE8 ne peut pas, Safari mobile ne peut pas, ancien Safari 5 pour Windows ne peut pas – au lieu de cela, ils afficheront du contenu gzippé brouillé car il fusionne les en-têtes de codage de contenu et ne décode le corps une fois.

Merci pour toutes les idées.

Quelque part dans nginx.conf où il s’applique (il devrait y avoir un fichier fastcgi_params quelque part):

 fastcgi_param HTTP_ACCEPT_ENCODING ""; 

Cela désactivera l’encodage du backend.

J’espère que Nginx servira encore le contenu encodé après cela. (Je ne suis pas sûr)