使用FastCgiExternalServer解决apache和php-fpm之间的空闲超时问题

时间:2018-01-10 16:17:27

标签: php apache sockets

我正在使用apache版本2.2.15和php-fpm与php 7.1.12,我让它们通过unix套接字进行通信,

在我的apache配置中,我使用FastCgiExternalServer进行此设置,如下所示

FastCgiExternalServer /var/www/cgi-bin/php-fastcgi -idle-timeout 30 -socket /var/run/php-fpm/www.sock -pass-header Authorization

我遇到的问题是,对于需要很长时间才能执行的脚本,一旦达到30秒的空闲超时,apache将以500错误消失。我的问题是我无法更改上面FastCgiExternalServer行中设置的idle-timeout。

现在,如果我的脚本定期返回文本(并执行flush()),则永远不会达到此ilde-timeout,脚本将继续运行,并且apache在完成后返回结果。 不幸的是,我需要运行的脚本在执行期间不能回显随机文本,但如果我可以在套接字级别上返回“keepalive”消息,这可能会阻止apache形式达到空闲超时。

我很惊讶我还没有找到php-fpm中的设置,这使得它在运行脚本时向apache发送keepalive信号。也许有这样的环境,如果是这样,我很想知道它。

现在,这不能在php-fpm的设置中设置,也许可以在php代码中完成,也许使用socket_set_option()函数或socket_sendmsg()或类似的东西

socket_set_option($sock, SOL_SOCKET, SO_KEEPALIVE, 1)

但我还没有找到如何让它发挥作用。我尝试以各种方式使用php://输出,但没有让它工作。

所以我的问题是你知道有没有办法让php-fpm或php-script向apache发回某种信号,这种信号会阻止达到idle-timeout并且不会污染最终输出不需要的字符。

感谢

0 个答案:

没有答案