Apache wsgi 20 秒超时

问题

项目中业务层接口使用django开发,挂载到apache中使用 wsgi 进行部署,由haproxy进行负载均衡。测试时发现接口20秒左右就会超时断开,导致一些耗时操作(如上传文件)无法完成。

分析

  1. 首先怀疑是haproxy中配置的超时时间有问题。所以修改了超时时间为1分钟进行测试。

     timeout client 1m                                                       
     timeout server 1ms
    

    结果没用,还是20秒多就超时。

  2. 于是跳过haproxy直接调用,结果一样。但是如果不使用wsgi启动服务就没有问题。终于确定是Apache的问题。

    于是开始修改Apache的配置。

    TimeOut 600
    

    重启服务后结果还是一样。 期间尝试了很多网上找到的配置方式都是无效。

  3. 最后没办法查看了下都加载了哪些和超时有关的模块,发现了惊喜。

    [[email protected] /]# 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进行控制了。