使用ProxyPass后,Apache请求非常缓慢

7
我正在Windows Server 2012上运行Tomcat(8.0),并在Apache(2.4)后面使用ProxyPass来传递所有流量。一切都正常,但每当我没有任何操作60秒钟,然后再次访问服务器时,会出现8-20秒的延迟,就像Apache正在创建一个新进程来处理请求。
我的配置基本上是Apache Haus默认的配置,除了代理部分,我认为这是罪魁祸首。
ProxyPass         /static/ !
ProxyPass         /  http://localhost:8088/
ProxyPassReverse  /  http://localhost:8088/

我添加了

/static/!

的例外情况,以查看是否会在提供静态文件时出现相同问题,显然确实如此。我进一步缩小了范围,通过注释掉所有ProxyPass内容,并验证我的静态文件始终加载得很快。然后我取消了ProxyPass内容的注释,仅请求了我的静态文件,它再次总是返回得很快。但是一旦我访问需要通过代理的URL,等待一分钟,然后再次访问它,就会发生可怕的事情。下面是两个请求的网络监视器输出,第一个请求是在使用代理之前延迟1分钟后请求的静态文件,另一个是在使用代理两次之间延迟后请求的。

3501   4:17:48 PM 10/21/2015   104.2752287   httpd.exe   HTTP   HTTP:Request, GET /static/index.html 
3502   4:17:48 PM 10/21/2015   104.2760830   httpd.exe   HTTP   HTTP:Response, HTTP/1.1, Status: Not modified, URL: /static/index.html 

之后(8秒后返回):

24232   4:26:13 PM 10/21/2015   608.7355960   httpd.exe   HTTP   HTTP:Request, GET /static/index.html 
24775   4:26:20 PM 10/21/2015   616.0896861   httpd.exe   HTTP   HTTP:Response, HTTP/1.1, Status: Not modified, URL: /static/index.html 

在最初被破坏后,我注意到越来越多的SynReTransmit行出现,不确定它是否相关:

24226   4:26:13 PM 10/21/2015   608.7286692   httpd.exe   TCP   TCP:[SynReTransmit #24107]Flags=......S., SrcPort=61726, DstPort=HTTP(80), PayloadLen=0, Seq=1157444168, Ack=0, Win=8192 ( Negotiating scale factor 0x2 ) = 8192

基本上,无论是调用静态文件还是代理,如果距离上一次调用已经超过60秒,每个调用都需要很长时间才能得到响应!有什么想法吗?
更新: 我运行的是稍旧版本的Apache,2.4.12,但更新到最新版本2.4.17也没有解决问题。我尝试了各种keepalive设置,但似乎都没有帮助。在另一个论坛上,我被引导到这个Apache开发线程,其中提出了一个类似问题的建议补丁,我猜我会等待Apache的更新:

http://marc.info/?l=apache-httpd-dev&m=144543644225945&w=2


你解决了吗? - Maen
不,我已经放弃并转而使用nginx作为我的代理... - Klaus Rubba
3个回答

5

1
在httpd配置文件中,添加以下代码行:
AcceptFilter http none 
AcceptFilter https none 
EnableSendfile Off 
EnableMMAP off

这行之后:

Listen 80

我的响应时间少于2次,但仍比正常情况下慢得多。
来自https://www.apachelounge.com/viewtopic.php?p=26601

1

我曾使用Apache httpd作为反向代理,但速度非常慢(加载一个网页需要2分钟)。但是,当我将主机名更改为IP地址后,速度变得非常快。

更改前: ProxyPass "/home" "http://hostname.domain.com:port/home"

更改后: ProxyPass "/home" "http://ip:port/home"

希望对某些人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接