Wie kann ich einen Accept-Encoding-Anforderungsheader in Nginx entfernen?

Wie kann ich einen Accept-Encoding-Anforderungsheader in Nginx entfernen?

Das jüngste Update von zlib aufgrundeine Sicherheitslückescheint ein großes Problem zu verursachen, wenn PHP-FPM 8.0 über nginx auf Ubuntu Focal bereitgestellt wird. Alle Anfragen mit einer GZIP-Kodierung schlagen gleich zu Beginn der Antwort fehl, obwohl nginx die Anfragen als erfolgreich und mit der richtigen Größe protokolliert. Wenn ich Anfragen ohne Header mache Accept-Encoding, funktioniert es perfekt. Als Workaround versuche ich, die gesamte GZIP-Unterstützung zu deaktivieren, aber es scheint bemerkenswert hartnäckig zu sein ... Bisher habe ich diese Einstellungen in nginx ausprobiert:

gzip off;
fastcgi_buffering off;
add_header Accept-Encoding "";
proxy_set_header Accept-Encoding "";

und ich habe auch überprüft, dass es keine anderen Anweisungen gibt, die diese durch Greppen der Ausgabe wieder einschalten nginx -T.

Wenn ich jedoch die Anforderungsheader aus PHP lösche (also nachdem sie durch Nginx gegangen sind), sehe ich immer noch diesen Accept-Header:

Accept-Encoding: deflate, gzip, br, zstd

also ist nginxnichtEntfernen Sie es aus der Anfrage, bevor diese an PHP-FPM weitergeleitet wird. Ich habe versucht, diese Anweisungen auf Server- und Standortebene festzulegen, mit demselben Ergebnis.

In PHP habe ich die gesamte Ausgabepufferung deaktiviert, aber es scheint nicht möglich zu sein, zlib ohne eine Neukompilierung zu deaktivieren.

Wie kann ich nginx dazu bringen, diesen Anforderungsheader zu entfernen, sodass weder nginx noch PHP die Antworten komprimieren?

Antwort1

proxy_set_headerRichtlinie ist fürProxy-VergabeAnfragen, also deren WeiterleitungHTTP-zu-HTTP-Serverkette. Und Sie haben dieFastCGIServer als nächster in der Kette, Ihr Satz von Anweisungen beginnt also bei fastcgi_.

Sie können die Übergabe von Anforderungsheadern an PHP vollständig deaktivieren, indem Sie die Option fastcgi_pass_request_headersauf „Off“ setzen, oder Sie können den spezifischen Header löschen, indem Sie ihn mit zurücksetzen fastcgi_set_header.

Antwort2

Bei fastcgi wird eine etwas andere Syntax verwendet. Anstatt den Header zu setzen, wird ein Parameter gesetzt, der dem Header entspricht. Die Parameternamen beginnen mit "HTTP_", dann folgt der Headername in Großbuchstaben. Bindestriche werden im Parameternamen durch Unterstriche ersetzt.

fastcgi_param HTTP_ACCEPT_ENCODING "";

verwandte Informationen