Apache wsgi 20 秒超时
问题
项目中业务层接口使用django开发,挂载到apache中使用 wsgi 进行部署,由haproxy进行负载均衡。测试时发现接口20秒左右就会超时断开,导致一些耗时操作(如上传文件)无法完成。
分析
-
首先怀疑是haproxy中配置的超时时间有问题。所以修改了超时时间为1分钟进行测试。
timeout client 1m timeout server 1ms
结果没用,还是20秒多就超时。
-
于是跳过haproxy直接调用,结果一样。但是如果不使用wsgi启动服务就没有问题。终于确定是Apache的问题。
于是开始修改Apache的配置。
TimeOut 600
重启服务后结果还是一样。 期间尝试了很多网上找到的配置方式都是无效。
-
最后没办法查看了下都加载了哪些和超时有关的模块,发现了惊喜。
[root@localhost /]# apachectl -M|grep timeout reqtimeout_module (shared)
原来有
reqtimeout_module
这么各module被加载了,查了下其默认配置为:RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
所以20秒就超时了,终于找到了原因。
解决
修改vhost的配置:
...
RequestReadTimeout header=0
RequestReadTimeout body=0
...
重启服务,再次尝试,超时可以由haproxy进行控制了。