Apache + PHP-FPM = zufällige "Fehler beim Parsen von Skript-Headern" + Seg-Fehler

8

Ich habe ein PHP-FPM-Setup mit Apache 2.4 unter Verwendung von proxy_fcgi, alles funktioniert einwandfrei, aber bei jeder von 4-6 Anfragen gibt Apache eine leere Seite zurück. Dies geschieht auf meiner Hauptseite http://danielhe.com/ , aber nicht auf Subdomain-Vhosts.

Dies zeigt das Apache-Fehlerprotokoll [client x] AH01070: Fehler beim Parsen von Skript-Headern

Und schließlich manchmal Apache segfaults AH00052: Child PID 9740 Exit Signal Segmentierungsfehler (11)

Ich kann die "Fehler beim Parsen von Skript-Headern" sehr einfach reproduzieren, indem ich die Seite ein paar Mal aktualisiere, aber der Seg-Fehler tritt zufällig nach einigen "Fehler beim Parsen von Skript-Headern" auf.

Update Ich habe eine Lösung für die Seg-Fehler gefunden und das WSOD hat sich anscheinend selbst behoben. mod_deflate hat einige Probleme, aber diese Konfiguration aus der Apache-Dokumentation hat es behoben

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpeg|jpg|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
user9517
quelle
2
Sie sollten Ihre eigene Frage beantworten und als akzeptierte Antwort markieren, damit diese Frage wie eine gelöste aussieht
regilero

Antworten:

2

Die Lösung bestand darin, diese Konfiguration zu verwenden

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpeg|jpg|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
user9517
quelle
Sind Sie sicher, dass das Problem in mod_deflate liegt? Irgendwelche Referenzen? Sieht sehr seltsam aus ...
GioMac
@GioMac: Ich habe keine Ahnung - das OP sagt, dass dies das Problem in der Frage gelöst hat. Ich habe es nur in eine Antwort geschrieben. Beachten Sie, dass SO es uns gesendet hat und es ursprünglich am 9. März 2012 beantwortet wurde.
user9517
0

Ich kann bestätigen, dass die oben genannte Lösung für mich funktioniert hat, musste aber auch meine ProxyPassmatch-Einstellungen korrigieren.

Alte Konfiguration

<IfModule proxy_module>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/YOURDOMAIN/public_html/$1
</IfModule>

Neue Konfiguration - anderer Umschreibungsfilter plus Code von oben

<IfModule proxy_module>
ProxyPassMatch ^(.*\.php)$ fcgi://127.0.0.1:9000/home/YOURDOMAIN/public_html/$1
</IfModule>

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
...code from above
</IfModule>
Alauddin
quelle
0

Das Problem hierbei ist, dass die Antwort von phpList kein vollständiges Paket ausfüllt. php-fpm unterbricht die Verbindung mit Apache vorzeitig, wenn die Antwort nicht mindestens einen Puffer ausfüllt. Als Workaround können Sie vorübergehend zu mod_php wechseln oder die Antwort mit zufällig generiertem Text auffüllen.

Aeyoun
quelle