我们面临一个奇怪的问题...我们有一个繁忙的服务器...响应时间大约为每请求 1 分钟(非常慢).....它运行在 Tomcat 前面.....如果我们使用 xyz.com:8080 访问网站,它的速度非常快(1 个请求/秒).....我们正在使用 Mod_Proxy 将请求重定向到 tomcat.....我的问题是,我们可以直接将请求发送到 tomcat 而不是将请求从 apache 传递到 tomcat...或者我们是否需要在 Apache 中进行一些配置.......
Httpd.conf 文件如下所示。
ProxyPreserveHost On
ProxyPass / http://localhost:8080/ retry=1 acquire=300 timeout=60 Keepalive=On
ProxyPassReverse / http://localhost:8080/ ErrorLog /Path/To/Logs/Apache.log LogLevel warn
答案1
我猜想您的 Apache 运行速度很快,但 Tomcat 请求速度很慢?问题不完全清楚,如果您的 Apache 本身很慢,那么您需要检查一下。只有一个进程可以监听端口 80,因此如果您不想指定端口,那么您将不得不通过 Apache。或者完全放弃 Apache,让 tomcat 监听端口 80。但是 Apache 的速度应该足够快,可以代理此操作。
如果 Apache 本身速度很快,但是代理的 Tomcat 请求速度很慢,我可以提出一些建议:
这可能是 DNS 查找速度慢,但在 localhost 上这种情况很少见。我假设 localhost 在 hosts 文件中?您可以将其更改为 127.0.0.1,这样就不需要 DNS 查找了?
您需要所有这些选项吗?
- ProxyPreserveHost - Tomcat 是否需要知道主机名?如果不需要,是否需要保留它?
- retry/aquire/timeout/keepalive - 它们更适用于代理不处于可靠连接或位于防火墙后面的情况。当 Apache 和 Tomcat 位于同一台服务器上时,它们就不需要了。
- 代理请求的自定义日志文件可能很有用,但我自己没有使用过。
不明白为什么它们会引起问题,但我没有使用它们,所以第一个建议是将它们移除,看看是否能改善情况。然后,如果需要它们,请将它们逐一添加回去,看看问题出在哪里。
因此我将简化并替换为:
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0:8080/
然后再试一次。
我还假设您正在加载 mod_proxy?有时最简单的事情可能会被忽略 ;-)