用户代理正在等待每个http查询的最大Keepalive超时

时间:2019-02-18 18:04:27

标签: php apache timeout keep-alive chunked

浏览器正在等待symfony主页的最大保持活动时间。

如果我禁用Keepalive(apache),就可以了。接收到响应标头“ Connection: Close”,浏览器停止等待。总时间接近200毫秒。

如果启用Keepalive(Apache),则标头响应为:

  

连接:保持活动状态
  保持活动状态:超时= 5,最大= 500
  传输编码:分块

没有'Content-Encoding'标头
没有“ content-length”标头(保持活动状态)

Php.ini:

  

output_buffering = 4096

我在远程服务器上使用php-fpm。这是apache的配置:

  

ProxyPassMatch ^ /(。 .php(/.)?)$   fcgi://192.168.1.1:9000 / var / php-fpm / www / public / $ 1

浏览器收到数据,但正在等待5秒。看来浏览器正在等待分块数据的结束(最后一个0大小的数据包)。

Web服务器是apache2.4.6,代码是php7.1.8 / synfony4。在开发环境中,相同的代码可以正常工作(另一台主机)。

apache日志中的执行时间接近20毫秒(不是5秒!)。浏览器等待传输结束,并因keepalive超时而停止。 如果我将Keepalive超时设置为20秒,则浏览器在接收到数据后会等待20秒。

Symfony性能指标“总执行时间”为18ms(在开发模式下)。 Internet Explorer时间轴(F12)在细节末尾显示5.35毫秒,其中“响应时间”为5秒。

如果我得到一个简单的页面(phpinfo),则没有问题,这与symfony主页有关,仅与生产服务器有关。

使用curl进行的简单测试(没有ajax,js ...)显示了问题:完全接收到数据(</html>),但是curl仍在等待5秒并写入消息:

  

传输关闭,剩余未读数据

而不是:

  

与主机xxxxxxx完整连接的连接#0

如果我禁用ssl apache虚拟主机并使用Fiddler进行测试,则当我单击以解码响应正文时,Fiddler会显示此错误消息:

  

块状主体未正确终止为0大小的块

php / synfony是否存在php块问题?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

我已经解决了我的问题。 apache中的指令“ FallbackResource”会导致此“块”问题。此选项允许禁用AllowOverride和.htaccess用法,并要求Apache Web服务器将所有请求重定向到一个页面(不再需要DirectoryIndex)。但是,它似乎与索引页面的KeepAlive不兼容。我不知道这是否是Apache错误。