如何正确运行 Tomcat 和 Apache?

如何正确运行 Tomcat 和 Apache?

我在 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 工作者

相关内容