我使用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,或者用一些随机生成的文本填充响应。