我在 Ubuntu 10.04 Server 系统上安装了 Apache Tomcat 和 Apache Webserver。我基本上遵循了这些脚步配置mod-jk连接器,我的网络服务器现在似乎将所有流量重定向到Tomcat。
这意味着无论我使用端口 80 还是 8080,我都可以获得 Tomcat ROOT 目录的内容。这很好,但我仍然希望能够使用 Apache 来提供静态和 PHP 内容(例如 PHPMyAdmin)。
答案1
如果您要使用 mod_jk(一种流行的选项),Oscar 的答案是正确的。您需要通过更改以下内容来限制 Tomcat 处理的内容:
JkMount /* ajp13_worker
...仅更改为您希望 Tomcat 处理的路径,例如:
JkMount /*.jsp ajp13_worker
JkMount /*.cfc ajp13_worker
JkMount /*.cfm ajp13_worker
如果您正在寻找其他选项,也可以使用 mod_proxy_http 或 mod_proxy_ajp。我将继续介绍几个将 *.jsp/*.cfm/*.cfc 请求代理到 Tomcat 的简单示例...
如果您想尝试这两个选项,请先启用两个模块(以及任何依赖项),这在 Ubuntu 10.04 中非常简单 ;-)
sudo a2enmod proxy_http proxy_ajp
sudo /etc/init.d/apache2 restart
我喜欢在 Ubuntu 上的 /etc/apache2/conf/httpd.conf 中添加我的代理配置,但您也可以将其放在一个或多个 VirtualHost 配置中。
对于允许的任何代理,假设您在同一台服务器上运行 Apache 和 Tomcat,您需要添加如下指令:
<Proxy *>
Allow from 127.0.0.1
</Proxy>
以下是使用 mod_proxy_ajp 的配置:
ProxyPreserveHost On
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://localhost:8009/$1$2
ProxyPassMatch ^/(.+\.jsp)$ ajp://localhost:8009/$1
显然,可以调整正则表达式以满足您的需要(上述两个 ProxyPassMatch 指令甚至可以相当容易地组合成一个正则表达式)。
要使用 mod_proxy_http 实现相同功能,只需更改协议和端口:
ProxyPreserveHost On
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ http://localhost:8080/$1$2
ProxyPassMatch ^/(.+\.jsp)$ http://localhost:8080/$1
如果您想要代理特定主机,并且可能屏蔽上下文路径,您可能更喜欢在特定的 VirtualHost 中使用类似这样的内容:
ProxyPreserveHost Off
ProxyPass / http://example.site.com:8080/context/
ProxyPassReverse / http://example.site.com:8080/context/
最后,如果您需要一些花哨的东西(比如,检查查询字符串之类的奇怪东西,或者您能用 RewriteCond/RewriteRule 想到的其他任何东西),您甚至可以利用带有代理 (P) 标志的 mod_rewrite 来代理 Tomcat。您需要启用另一个模块 mod_rewrite:
sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart
然后,在 VirtualHost 中,您可以使用以下方式代理 CFML 请求:
RewriteEngine On
RewriteRule ^/(.*\.cf[cm]l?)(/.*)?$ ajp://localhost:8009/$1$2 [P]
正如您所见,您可以变得非常有创造力:P 希望这会有所帮助!
答案2
使用 JkUnmount 来处理你不想由 tomcat 提供的内容:
JkMount /* 你的worker
JkUnMount /*.php 你的worker
JkUnMount /*.png 你的worker
JkUnMount /*.jpg 你的worker
等等...(不确定您是否可以执行:JkUnMount /*.{php|jpg|gif|png|etc..})
或者如果你只对 tomcat 使用 jsp,请尝试:
jkMount/*.jsp 工作者