我正在尝试将带有.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.so
到C:\apache\modules
。
然后我将其添加LoadModule jk_module modules/mod_jk.so
到我的httpd.conf
。我重新启动 apache,模块就可以正常加载。
接下来我下载了 mod_jk 源代码来获取workers.properties
文件。我复制workers.properties
到C:\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。没有默认值。