使用PHP在后台运行许多长的cURL请求,导致错误504

时间:2019-03-08 23:05:53

标签: php apache curl fastcgi

我正在使用Plesk运行Ubuntu 16.04 VPS,并托管了一些用PHP编码的网站。

其中一个网站具有通过cURL向另一台服务器发出POST请求的功能(我们称其为服务器#2)。

当用户按下服务器1上运行的网站上的按钮时,我需要服务器1向服务器2发出POST CURL请求。 服务器#2大约需要15-60秒才能响应请求。

为解决用户在我的网站上等待60秒的问题,我将缓慢的CURL请求移到了单独的PHP文件中,并使用shell_exec对其进行了调用。 这样,我网站上的用户不必等待请求完成。它在后台运行。

这是我正在调用的shell_exec函数:

role Maybe[::T] {
    # ...
}

sub foo(--> Int) { rand < 0.5 ?? 1 !! fail 'oops' }

my Maybe[Int] $foo = foo;

=====

当有多个网站用户同时调用同一功能时,就会出现此问题。如果一次有5个请求,则我的网站开始显示504网关超时错误。

我的error_log上也得到以下输出。

对等方重置的连接:[客户端CLIENT_IP_HERE:****] AH01075:将请求分发到时出错: [客户端CLIENT_IP_HERE] AH01067:无法读取FastCGI标头

我已经尝试了Plesk文档中的以下解决方案: https://support.plesk.com/hc/en-us/articles/115000064929-Website-on-Plesk-server-is-not-accessible-504-Gateway-Time-out-The-timeout-specified-has-expired-client-203-0-113-2-54693-AH01075-Error-dispatching-request-to

但是这种解决方案似乎只能解决耗时60秒以上的请求,而不是大量并发请求。

如何通过shell_exec增加可以同时运行的请求数?

还是有比shell_exec更好的解决方案来在后台运行缓慢的请求? (我不能只是将请求的超时时间设置为1,因为我需要响应)。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

听起来您应该看看how queues work