Apache proxfy_fcgi - 将请求分派给

2022-08-30 18:31:47

我在Google上有云托管,说实话这很糟糕,但我试图继续下去,我在VM上安装了LAMP堆栈并将我的网站放在htdocs中。当我尝试访问我的网站时,它会给我,但有时它可以工作5分钟左右。request timeout

当我看到apache错误日志时,它会给我这个

075: Error dispatching request to : (polling)
[Tue Oct 27 18:12:55.185819 2015] [proxy_fcgi:error] [pid 4995:tid 140183521683200] (70007)The timeout specified has expired: [client 162.158.255.169:34198] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:12:55.487458 2015] [core:notice] [pid 2953:tid 140183785137920] AH00052: child pid 4995 exit signal Segmentation fault (11)
[Tue Oct 27 18:12:55.787973 2015] [proxy_fcgi:error] [pid 5063:tid 140183530075904] (70007)The timeout specified has expired: [client 199.27.133.137:13151] AH01075: Error dispatching request to : (polling), referer: http://whichtube.com/watch/g9-4dCeFQng/allama-nasir-abbas-jawab-ali-as-nae-talwar-kayou-na-uthai.html
[Tue Oct 27 18:12:57.542883 2015] [proxy_fcgi:error] [pid 5329:tid 140183521683200] (70007)The timeout specified has expired: [client 173.245.56.198:51348] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:12:57.976752 2015] [proxy_fcgi:error] [pid 5063:tid 140183479719680] (70007)The timeout specified has expired: [client 173.245.56.198:63779] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:12:58.993666 2015] [proxy_fcgi:error] [pid 5194:tid 140183496505088] (70007)The timeout specified has expired: [client 162.158.255.141:16226] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:12:59.196701 2015] [proxy_fcgi:error] [pid 5329:tid 140183513290496] (70007)The timeout specified has expired: [client 173.245.56.198:32819] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:13:01.462039 2015] [proxy_fcgi:error] [pid 5329:tid 140183504897792] (70007)The timeout specified has expired: [client 199.27.128.166:48057] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:13:07.518999 2015] [proxy_fcgi:error] [pid 5063:tid 140183471326976] (70007)The timeout specified has expired: [client 173.245.56.198:13694] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:13:16.804990 2015] [proxy_fcgi:error] [pid 5261:tid 140183513290496] (70007)The timeout specified has expired: [client 199.27.128.134:28694] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:13:33.055860 2015] [proxy_fcgi:error] [pid 5328:tid 140183236331264] (70007)The timeout specified has expired: [client 39.41.139.220:52154] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:13:57.391361 2015] [proxy_fcgi:error] [pid 5063:tid 140183521683200] (70007)The timeout specified has expired: [client 39.41.139.220:52029] AH01075: Error dispatching request to : (polling)
[Tue Oct 27 18:13:57.552542 2015] [core:notice] [pid 2953:tid 140183785137920] AH00052: child pid 5063 exit signal Segmentation fault (11)

我的网站是PHP,除了目录权限之外,我没有更改任何其他内容,我缺少什么吗?


答案 1

我遇到了同样的问题,事实证明Apache有处理超时的模块,称为mod_reqtimeout

默认值(您不会在默认的 http.conf 中看到它)是:

RequestReadTimeout handshake=0 header=20-40,MinRate=500 body=20,MinRate=500

在我的情况下,我通过纯HTML表单提交上传文件,因此该文件在技术上是标头的一部分,并且默认配置说标头将在20到40秒时超时。20-40的东西非常酷,因为它将在20秒时超时,但如果在一秒钟内发送500字节,它将增加一秒的等待时间,直到它达到40秒,然后无论如何都超时。

我在我的网站上上传了更大的文件,所以我将这行添加到我的httpd.conf文件中:

RequestReadTimeout handshake=0 header=20-600,MinRate=500 body=20,MinRate=500

因此,只要我的用户以至少 500 字节/秒的速度发送数据,请求就不会超时,直到达到最大 600 秒(最好阅读文档,不要引用我的吞吐率)

它实际上是一个非常酷的Apache模块,但不是非常知名,因为人们建议在其他类似的“指定的超时已过期:”中更改其他apache超时设置,但此问题发生在Apache中默认提交超过40秒的任何帖子中。


答案 2

您的 PHP 代码似乎花费的时间比配置的超时时间长。当 apache 使用 fcgi 加载 PHP 页面时,它会将 请求发送到 PHP-FPM 服务进行处理。如果 PHP-FPM 的响应时间太长,那么您将看到这种类型的超时。可能的原因是;您的PHP代码可能会卡在循环中,或者等待来自数据库的响应,这需要特别长的时间。

为了排除故障,我会使用CLI版本的php来查看脚本是否在合理的时间内完成($ time php /path/to/file.php)。PHP-FPM 日志中可能有其他信息(默认值:/var/log/php-fpm.log)。


推荐