我已经在系统上设置了 Apache 和 Tomcat,我想使用 Mod_JK 将两者结合起来。我创建了一个 mod_jk worker (ajp13_worker),并在我的 Apache 配置中添加了一个虚拟主机:
<VirtualHost *:80>
ServerName tomcat.mydomain.com
DocumentRoot /usr/local/tomcat/webapps/
# Tomcat
JkMount /* ajp13_worker
JkMount /*.jsp ajp13_worker
JkMount /*.jspx ajp13_worker
</VirtualHost>
运行正常,我最终进入了默认的 Tomcat 页面。管理器应用程序也运行正常。
接下来,我有我的应用程序,它位于 PATH-TO-TOMCAT/webapps/myapp 文件夹中。它应该可以在 myapp.mydomain.com 下访问,因此我添加了第二个虚拟主机,这次使用“DocumentRoot /usr/local/tomcat/webapps/myapp”。但它不起作用:我总是进入默认的 Tomact 页面,而不是进入我的应用程序的根目录。因此,我使用 ModRewite 将请求重写到我的应用程序的上下文中。Apache 虚拟主机如下所示:
<VirtualHost *:80>
ServerName myapp.mydomain.com
DocumentRoot /usr/local/tomcat/webapps/myapp/
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/myapp/.*
RewriteRule ^/(.*)$ /myapp/$1 [PT]
# Tomcat
JkMount /* ajp13_worker
JkMount /*.jsp ajp13_worker
JkMount /*.jspx ajp13_worker
</VirtualHost>
该 vhost 可以工作,请求被重写,并且我的应用程序可以在 myapp.mydomain.com 下访问,但是现在,我的 Tomcat 会为每个请求创建一个新的会话,并且当一些用户访问该页面时,会话计数就会激增。
我尝试了几个教程,但大多数都没有解决这个问题。我想我漏掉了一些东西。有人能向我解释如何在 Apache/Tomcat/Mod-JK 组合中正确设置虚拟主机吗?
多谢,
克劳德
答案1
好的,我找到了。在 Tomcat sever.xml 中,您可以为每个主机指定上下文路径:
<Host name="app.mydomain.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="PATH-TO-TOMCAT/webapps/app"/>
</Host>
我的错误是,我总是试图修改 appBase 参数而不知道 Context 元素!