我们在 Windows Server 2008 R2 上实施了 Apache 2.4 64bit 作为反向代理,以利用我们域的通配符证书。即使是轻负载,我们对性能也感到失望,所以我可能配置错误了。代理 (Glassfish 3.0.1) 服务的网站变得越来越慢,甚至没有响应。重新启动 Apache 可以暂时解决问题,但它很快就会变得没有响应。通过直接转到 Glassfish 服务器的 IP 地址绕过代理,我们可以看到 GF 不是问题所在。我们唯一要做的就是在 Apache 上反向代理 SSL 前端,并使用 http 将内部网络上的流量传递到 Glassfish 服务器。
当网站没有响应时,查看 Windows Server 进程会发现活动非常少。CPU 可能以 10% 运行(单个 CPU)。TCP 连接数少于 30。内存利用率不到 1 GB(这是一台 4GB 的机器)。网络流量几乎没有突破 100kbps 的阈值。所有迹象都表明服务器几乎没有出什么问题,但网站却没有响应。
我已设置以下属性:
SSLSessionCache "shmcb:C:/Apache_direct/logs/ssl_scache(1024000)"
SSLSessionCacheTimeout 300
ThreadsPerChild 3000
MaxRequestsPerChild 0
KeepAlive On
KeepAliveTimeout 15
ProxyRequests Off
SSLStrictSNIVHostCheck off
ProxyBadHeader Ignore
我为每个服务器的每个 http 和 https 端口设置了虚拟主机。VHost 设置类似于:
<VirtualHost *:443>
ServerName test.domain.org
#
ProxyPreserveHost On
SSLEngine on
ProxyPass / http://192.168.80.196:8080/
ProxyPassReverse / https://192.168.80.196:8080/
</VirtualHost>
我是否遗漏了重要的设置或错误配置了设置?根据我所读的内容,Apache 应该能够轻松处理我们的流量,如下所示:
800 visits an hour. 13k visits daily.
100 uploads an hour of roughly 60mb MP3 files.
400 downloads an hour of those same MP3 files.
800 downloads of small (100k) pdf files.
Glassfish 负责所有文件上传/下载,我们允许这些会话持续长达一小时。由于大多数文件都是唯一的,我们不太确定应该使用什么缓存设置(如果有的话)。也许我应该省略 SSL 缓存设置?
网络上有很多关于 Apache 性能调优的文章,但很少有专门针对反向代理、SSL 并根据流量类型/数量提供建议的文章。有些建议会很有帮助。
答案1
我将回答我自己的问题,以便如果有人遇到这个问题,他们至少会看到某种答案......
我从未确认过这个特定的配置是正确的、错误的或者可以改进。但我知道我们决定再试一次,并进行以下修改(这纯属我的猜测):
Threadlimit 3000
ThreadsPerChild 3000
MaxRequestsPerChild 0
KeepAlive On
KeepAliveTimeout 15
AcceptFilter https none
AcceptFilter http none
EnableSendfile Off
EnableMMAP off
ProxyRequests Off
SSLStrictSNIVHostCheck off
ProxyBadHeader Ignore
HostnameLookups off
ExtendedStatus off
使用此配置我们没有遇到任何性能问题,因此我们在生产中使用它。主要问题是如何在反向代理环境中获得良好的性能,这个问题已经通过反复试验得到了解答。