设置:
Fedora 8
Apache 2.2.8
Tomcat 5.5.8
Apache 使用 AJP 转发请求。
问题:
经过一段时间后(根本没有常数,可能在一两个小时之间,或者一天或几天之间)Tomcat 将关闭。它要么停止响应,要么提供通用的“服务暂时不可用”。
诊断:
有两台服务器的设置相同。一个是流量较高的网站(每秒几个请求),另一个是低流量网站(每隔几分钟就有几个请求)。这两个网站是完全不同的代码库,但它们表现出相似的问题。
在第一台服务器上,当问题发生时,所有线程都开始慢慢被占用,直到达到限制(MaxThreads 200)。那时服务器不再响应(并且在很长一段时间后出现服务不可用页面)。
在第二台服务器上,出现问题时,请求需要很长时间,完成后您只能看到服务不可用页面。
除了提到 MaxThreads 问题之外,Tomcat 日志没有指出可能导致此问题的任何特定问题。
但是,在 Apache 日志中,我们看到了涉及 AJP 的随机消息。这是我们看到的随机消息示例(无特定顺序):
[error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[error] (104)Connection reset by peer: ajp_ilink_receive() can't receive header
[error] proxy: AJP: disabled connection for (localhost)
[error] ajp_read_header: ajp_ilink_receive failed
[error] (120006)APR does not understand this error code: proxy: read response failed from 127.0.0.1:8009 (localhost)
[error] ap_proxy_connect_backend disabling worker for (localhost)
Run Code Online (Sandbox Code Playgroud)
我们在更高流量的服务器上注意到的另一件奇怪的事情是,就在问题开始发生之前,数据库查询所用的时间比以前长得多(2000-5000 …
我想使用连接器通过 Apache-webserver 访问 Tomcat。我坚持使用文档:http : //tomcat.apache.org/connectors-doc/generic_howto/quick.html 我只是稍微修改了它以匹配我的 Debian-(Squeeze)-System 上使用的目录结构。
所以我在/etc/apache2/httpd.conf中添加了以下内容:
# Load mod_jk module
# Update this path to match your modules location
#LoadModule jk_module libexec/mod_jk.so
# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
#AddModule mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile /etc/apache2/workers.properties
# Where to put jk shared memory
# Update this path to match your local state …Run Code Online (Sandbox Code Playgroud) 自从我开始在反向代理(Apache2 的 mod_jk)后面使用应用程序后,我注意到有些页面无法加载(如果没有反向代理设置,它们会加载)。
这是一个微妙的错误,我必须检查才能找到它,这要归功于谷歌浏览器:无法加载资源:net::ERR_CONNECTION_RESET。
简单地说,一个 JavaScript 文件将被部分加载(从 ~50KB 中加载了 ~12KB)。
我认为 Apache2、mod_jk、AJP 或 Jetty 有问题。
但后来我进行了一项调查,在那里我将使用不同的浏览器和不同的网络。
结论: 此错误 (ERR_CONNECTION_RESET) 仅在我使用具有静态IP 的网络时发生。
我在一台路由器上降低了安全级别,但徒劳无功。
具有静态 IP 的网络是否配备了更高级别的安全性?
如何克服这个问题?
这是一个僵局,因为反向代理主要是为了利用我们卖点的静态 IP 地址来提高安全级别。
我们正在准备从以下环境迁移:
Apache 2.0.2 --AJP--> JBoss4.2.2
到
Apache 2.2.3 --???--> JBoss 5.1.0
你会如何将两者结合在一起?
选项是:
选项 2 是目前最流行的解决方案,因为它似乎意味着更少的处理,因为不再需要从 AJP 转换 JBoss 的响应,并且 CPU 时间是我们需要在我们的基础设施中密切关注的东西。选项 2 和 3 也随 Red Hat 支持的 Apache 构建一起提供。
目前我看不到我们选择选项 1,因为我们通过选项 3“免费”获得 AJP。
因此,选项 2 和选项 3 的优缺点是什么?对 CPU 负载的担忧真的是我们需要担心的吗?我们在处理二进制数据(AJP 流量)过程中丢失的东西是否会在减少的带宽和 IO 中得到恢复?
我们的基础设施将是 Apache ,在同一台 RHEL 5 机器上运行多达9 个经过大量调优的 JBoss(但通常占一半左右),该机器在私有云中虚拟化。
提前感谢您的任何指示/建议。
富有的
我的 apache (2.2.3) 通过 mod_proxy_ajp 与 tomcat 6.something 对话。
我有一些荒谬的长期请求(2-6 分钟),我认为我们在某个地方遇到了一些默认超时......哪里是提高它的正确位置?
这是我的代理定义:
<Location /blah>
ProxyPass ajp://localhost:8010/blah
ProxyPassReverse ajp://localhost:8010/blah
</Location>
Run Code Online (Sandbox Code Playgroud) 我不使用 AJP 进行负载平衡;我有一个单一的Apache 2.2实例代理某些URL的单一通过AJP的Tomcat 7的实例。
当 Tomcat 关闭时,AJP 代理在第一个失败的请求时被禁用,并且在 Tomcat 恢复时不会重新启用。
是否可以指示 Apache不禁用AJP 连接,即使后端已关闭,以便代理在后端重新联机时开始工作?
这是我的 httpd.conf 的摘录:
ProxyPass /my-web-app ajp://localhost:8009/my-we-app-1.0.2
Run Code Online (Sandbox Code Playgroud)
这是后端关闭时的日志文件:
[error] (OS 10061)No connection could be made because the target machine actively refused it.
[error] ap_proxy_connect_backend disabling worker for (localhost)
[error] proxy: AJP: failed to make connection to backend: localhost
Run Code Online (Sandbox Code Playgroud) 我想在 RHEL 5 服务器上运行 Apache 和 Tomcat,Apache 处理 Ruby on Rails 应用程序(通过 mod_rails/Passenger)和 Tomcat 处理 Java 应用程序。
在 Apache 下,每个 Rails 应用程序都有一个 URL 和 vhost。这些 URL 已经在我们的 DNS 服务器中配置为指向机器。
在Tomcat,每个Java应用程序都有这样的网址:ourserver.ourcompany.com/app1,ourserver.ourcompany.com/app2,等。
服务器已经启动并运行,Tomcat 6 在端口 80 上运行并为多个 Java 应用程序提供服务。我想添加Apache并重新配置。我熟悉如何配置唯一的 Apache 服务器以使用 Passenger 托管 RoR 应用程序。我只是不知道如何让 Apache 和 Tomcat 像这样一起工作。
我通过谷歌搜索找到了各种资源和讨论(例如,这个),但它们往往有点粗略和不完整,或者它们似乎与我想要做的并不真正匹配。我链接到的那个似乎是为了将所有请求发送到 Tomcat,而不仅仅是某些请求并让 Apache 处理其他请求。
有人可以为server.xmland推荐一个示例配置httpd.conf,或者给我一些更详细的资源吗?
我在 Apache (2.4.41) 和 Tomcat (7.0.99) 之间设置机密时遇到问题。我想我在 Tomcat (server.xml) 中正确设置了它:
<Connector ... secretRequired="true" secret="123" />
Run Code Online (Sandbox Code Playgroud)
当我尝试设置 Apache 端 (httpd-ajp.conf) 时:
ProxyPass / ajp://127.0.0.1:8009/ secret="123"
Run Code Online (Sandbox Code Playgroud)
Apache 无法启动,Apache 错误日志显示:
AH00896: failed to make connection to backend: 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
和
AH00957: AJP: attempt to connect to 127.0.0.1:8009
Run Code Online (Sandbox Code Playgroud)
如果它有任何区别,我正在使用 XAMPP for Windows 7.3.13
由于错误 CVE-2020-1938,我们想使用最新的 Tomcat 7.0.100。另请参阅CVE-2020-1938 我们还使用 2.4 版的 Apache 服务器,它通过 AJP 连接到 Tomcat。
最新的 Tomcat 版本需要各种新的安全通信设置,这是我们所做的。不幸的是,我们总是收到 HTTP 错误 403 并且不知道为什么。
在 Apache workers.properties 中,我们有以下设置:
worker.list=okkommwm57f
ps=\
worker.okkommwm57f.type=ajp13
worker.okkommwm57f.host=192.168.181.240
worker.okkommwm57f.secret=123456
worker.okkommwm57f.port=8309
worker.okkommwm57f.socket_keepalive=1
worker.okkommwm57f.connect_timeout=10000
worker.okkommwm57f.prepost_timeout=10000
worker.okkommwm57f.socket_timeout=10
worker.okkommwm57f.connection_pool_timeout=600
Run Code Online (Sandbox Code Playgroud)
AJP 连接器配置如下所示:
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" secretRequired="true" secret="123456" address="192.168.181.240" />
Run Code Online (Sandbox Code Playgroud)
当我测试站点时,我不断收到 HTTP 错误 403。我尝试了不同的版本,但都无济于事。已经将“secretRequired”设置为“false”。也不行。
也许有人有想法,可以帮我解决问题。谢谢你。
您如何看待用于 AJP 负载平衡的 lighttpd?
我为此使用了 Apache 和 mod_jk,它工作正常。将 apache 切换到 lighttpd 有什么好处?
什么软件用于负载平衡 J2EE 应用程序?硬件负载均衡器?
谢谢!
ajp ×10
apache-2.2 ×7
tomcat ×6
apache-2.4 ×3
lighttpd ×1
mod-jk ×1
proxy ×1
static-ip ×1
tomcat7 ×1