Mod_jk 和 Tomcat 卡在发送回复

Mod_jk and Tomcat stuck at Sending Reply

目前,工作中的服务器性能不佳,其设置方式也不理想。出于这个原因,我正在尝试寻找一种新的方法来做事,希望对性能和部署都有帮助。

我决定采用的方法是为我们的网络应用程序提供 tomcat 个实例(目前有两个,因此每个网络应用程序一个实例)并使用 Apache 作为“前端”。我在这方面没有经验,所以我在这里和那里遇到问题是正常的,但到目前为止我已经设法解决了这个问题。

我希望从 mysite.com 索引页面重定向到 mysite.com/service1 或 mysite.com/service2。 Service1 在测试服务器的端口 8080 和 service2 中设置在 8081。我昨天安装了 Apache2 和 mod_jk,并使用 mysite.com 的内容设置了 apache。今天开始配置,结果如下:

workers.properties

worker.list=s1

worker.s1.type=ajp13
worker.s1.port=8009

#host is localhost by default according to the documentation

jk.load

LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so

JkWorkersFile /etc/apache2/workers.properties

JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel debug
JkMount /service1/* s1

Service1的server.xml连接器(其余全部默认)

<Connector protocol="AJP/1.3" port="8009" redirectPort="8443" />

我有更多,但由于错误,我退后一步,暂时只尝试一个 tomcat。我将添加第二个 tomcat 和一个负载均衡器。

好的,那怎么回事?

我可以毫无问题地访问服务器和我们系统的索引页。问题是当我尝试重定向到 service1 时。它只是加载而没有响应,但是如果我尝试通过端口 8080 直接访问 service1,它会正常工作(我厌倦了评论这个连接器。运气不好)。

查看服务器状态,我看到请求停留在 w/sending 回复,并且在 mod_jk.log 中我看到工作人员正确匹配请求。因此,虽然我的配置似乎是正确的,但两者之间发生了一些事情。我真的不知道它是否与 Apache 有关,Tomcat 或 Mod_jk。我还尝试遵循一些指南来了解如何执行此操作,但所有这些指南都让我陷入了 404 错误。环顾四周,不幸的是,ServerFault 并没有提供太多信息,所以我现在正在问这个问题。

我错过了什么吗?我应该使用另一种方法吗?我对此很陌生,现在不知所措。配置和日志显示没有任何问题(乍一看,至少......)所以我完全确定我的案例scneario是否甚至可以使用mod_jk ...诚实地运行 返回并尝试使用代理在这一点上非常诱人,但如果我是,我宁愿知道我错在哪里。

附加信息:运行 在 Ubuntu 服务器 18.04 上,最新的 apache2 和 mod_jk 可从 apt(截至 4 月 14 日),java 1.8 和 Tomcat 8.5.64.

去年 Tomcat 有变化(从版本 8.5.51 and version 9.0.31), which introduced a secretRequired attribute to the AJP connector with a default of true (cf. documentation 开始)。因此您可以:

  • 在 AJP 连接器和 mod_jk

    之间添加一个共享密钥
  • 或将 secretRequired="false" 添加到 AJP 连接器:

    <Connector protocol="AJP/1.3" port="8009" secretRequired="false" redirectPort="8443" />
    

备注:AJP是一个非常古老的协议,很少使用。由于您的安装非常新,您可以考虑直接使用 HTTP(参见 this talk)。