Tomcat 的 Apache mod_jk 设置 - worker.properties

Tomcat 的 Apache mod_jk 设置 - worker.properties

我正在尝试将带有.jsp扩展名的文件定向到 tomcat。否则,我希望 apache 直接提供该文件(而不是 tomcat)。目前我有一个测试页面它应该创建一个 HTML 页面,并在正文中包含当前日期。当我转到该页面时,.jsp我看到的是 JK 状态管理器。mod_jk.logs唯一显示的是init_jk::mod_jk.c (3365): mod_jk/1.2.35 initialized

我的服务器上安装了 tomcat 和 apache。Apache 在 80 上运行,而 tomcat 在 8080 上运行。localhost:8080 显示 tomcat 欢迎页面。我下载tomcat-connectors-1.2.35-windows-i386-httpd-2.2.x并复制mod_jk.soC:\apache\modules

然后我将其添加LoadModule jk_module modules/mod_jk.so到我的httpd.conf。我重新启动 apache,模块就可以正常加载。

接下来我下载了 mod_jk 源代码来获取workers.properties文件。我复制workers.propertiesC:\apache\confg。然后我添加了这个用户,

workers.tomcat_home="C:/Program Files/Apache Software Foundation/Tomcat 7.0"
workers.java_home="C:/Program Files/Java/jdk1.7.0_03"

worker.list=ajp13
worker.ajp13.port=8080
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.socket_timeout=10

当我尝试在 httpd.conf 中使用 ajp13 用户时,出现以下错误mod_jk.log

[Wed Mar 28 13:08:51 2012] [2196:4100] [info] ajp_connection_tcp_get_message::jk_ajp_common.c (1258): (ajp13) can't receive the response header message from tomcat, network problems or tomcat (127.0.0.1:8080) is down (errno=60)
[Wed Mar 28 13:08:51 2012] [2196:4100] [error] ajp_get_reply::jk_ajp_common.c (2117): (ajp13) Tomcat is down or refused connection. No response has been sent to the client (yet)
[Wed Mar 28 13:08:51 2012] [2196:4100] [info] ajp_service::jk_ajp_common.c (2614): (ajp13) sending request to tomcat failed (recoverable),  (attempt=1)

接下来我更新我的 httpd.conf,

JkWorkersFile C:/apache/conf/workers.properties
JkLogFile C:/apache/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

我也JkMount /*.jsp jk-status像这样添加到我的虚拟主机,

<VirtualHost 192.168.5.250:80>
   JkMount /*.jsp jk-status
   #JkMount /*.jsp ajp13
   ServerName bgsisson.com
   ServerAlias www.bgsisson.com
   DocumentRoot C:/www/resume
</VirtualHost>

我想我需要包括一个uriworkermap.properties文件,但这就是我陷入困境的地方。

我已经在bgsisson.com/test.jsp当我使用时,它显示 JK Status Manager,JkMount /*.jsp jk-status当我使用时,它显示 502 Bad GatewayJkMount /*.jsp ajp13

测试页面

<%-- use the 'taglib' directive to make the JSTL 1.0 core tags available; use the uri
"http://java.sun.com/jsp/jstl/core" for JSTL 1.1 --%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<%-- use the 'jsp:useBean' standard action to create the Date object;  the object is set
as an attribute in page scope
--%>
<jsp:useBean id="date" class="java.util.Date" />

<html>
<head><title>First JSP</title></head>
<body>
<h2>Here is today's date</h2>

<c:out value="${date}" />

</body>
</html>

答案1

您的配置已经非常接近了,只有几处不对。

首先,AJP 不通过端口 8080 运行,默认情况下它通过端口 8009 运行。它是一个不同的连接器。您可以通过查看文件中的以下server.xml行来验证 AJP 为哪个端口设置:

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

因此,您需要将worker.ajp13.port=8080指令更改为worker.ajp13.port=8009

其次,您的 httpd.conf 有点不对:

JkAutoAlias <path_to_tomcat>/webapps
JkMount /<your_webapp>/*.jsp ajp13

Tomcat 连接器文档很好地解释一下 JKAutoAlias:

自动将 webapp 上下文目录别名到 Apache 文档空间。使用此指令后,应注意确保仅通过 httpd 提供静态内容。httpd 提供的任何静态内容都将绕过应用程序的 web.xml 中定义的任何安全约束。有关继承规则,请参阅:JkMountCopy。没有默认值。

相关内容