Apache + PHP-FPM = случайный «Ошибка синтаксического анализа заголовков скриптов» + Seg Faults

8

У меня есть настройка PHP-FPM с Apache 2.4 с использованием proxy_fcgi, все работает нормально, но каждый из 4-6 запросов, Apache возвращает пустую страницу. Это происходит на моем основном сайте http://danielhe.com/ , но не на поддоменах vhosts.

Это показывает журнал ошибок Apache, [клиент x] AH01070: Ошибка синтаксического анализа заголовков скрипта

И в конце концов, иногда Apache segfaults AH00052: дочерний pid 9740, выходной сигнал Ошибка сегментации (11)

Я могу очень легко воспроизвести «Ошибка синтаксического анализа заголовков сценария», обновив страницу пару раз, но ошибка сегмента происходит случайно после пары «Ошибка синтаксического анализа заголовков сценария»

Обновление Я нашел исправление для ошибок seg, и WSOD, по-видимому, исправил себя. У mod_deflate есть некоторые проблемы, но этот конфиг из документации Apache исправил это

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
источник
2
Вы должны ответить на свой вопрос и пометить его как принятый, чтобы этот вопрос выглядел как решенный
regilero

Ответы:

2

Решение было использовать эту конфигурацию

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
источник
Вы уверены, что проблема в mod_deflate? Любые ссылки? Выглядит очень странно ...
GioMac
@GioMac: Понятия не имею - ОП говорит, что это решило проблему в вопросе. Я просто положил это в ответ. Обратите внимание, что SO отправил его нам, и на него изначально был дан ответ 9 марта 2012 года.
user9517
0

Я могу подтвердить, что вышеупомянутое решение работает для меня, но мне также пришлось исправить настройки ProxyPassmatch.

Старый конфиг

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

Новый конфиг - другой фильтр перезаписи, плюс код сверху

<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>
Алауддина
источник
0

Проблема здесь в том, что ответ от phpList не заполняет полный пакет. php-fpm преждевременно разрывает соединение с Apache, если его ответ не заполняет хотя бы один буфер. В качестве обходного пути вы можете временно переключиться на mod_php или дополнить ответ каким-нибудь случайно сгенерированным текстом.

Aeyoun
источник