Apache + PHP-FPM =随机“parsing脚本标题错误”+ Seg故障

我使用Apache 2.4使用proxy_fcgi进行PHP-FPM设置,所有工作都正常,但是在4-6个请求中,每个Apache都返回一个空白页。 这发生在我的主要网站http://danielhe.com/ ,但不是子域名虚拟主机。

这显示了Apache的错误日志,[客户端x] AH01070:分析脚本头错误

最后,有时候Apache的segfaults AH00052:child pid 9740退出信号分段错误(11)

我可以很容易地通过刷新页面几次重现“错误parsing脚本头”,但seg错误发生在几个“错误parsing脚本头”

更新我已经find了seg错误的修复,WSOD显然已经修复了。 mod_deflate有一些问题,但是这个来自Apache文档的configuration修复了它

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 

解决scheme是使用这种configuration

 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 

我可以确认上述解决scheme为我工作,但我不得不解决我的ProxyPassmatch设置。

旧的configuration

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

新的configuration – 不同的重写filter,加上上面的代码

 <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> 

这里的问题是phpList的响应不能填充完整的包。 如果php-fpm的响应不能填充至less一个缓冲区,php-fpm会中断与Apache的连接。 作为解决方法,您可以暂时切换到mod_php,或者用一些随机生成的文本填充响应。