Apache + PHP-FPM = 随机“解析脚本头时出错”+ 段错误

Apache + PHP-FPM = 随机“解析脚本头时出错”+ 段错误

我使用 proxy_fcgi 在 Apache 2.4 上设置了 PHP-FPM,一切正常,但每 4-6 次请求,Apache 都会返回一个空白页。这种情况发生在我的主要网站上http://danielhe.com/,但不是子域虚拟主机。

这将显示 Apache 的错误日志,[客户端 x] AH01070:解析脚本头时出错

最后,有时 Apache 会出现段错误 AH00052: child pid 9740 exit signal 段错误 (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

答案1

解决方案是使用此配置

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

答案2

我可以确认上述解决方案对我有用,但我还必须修复我的 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>

答案3

这里的问题是 phpList 的响应没有填满整个包。如果 php-fpm 的响应没有填满至少一个缓冲区,它会过早地断开与 Apache 的连接。作为一种解决方法,您可以暂时切换到 mod_php 或用一些随机生成的文本填充响应。

相关内容