我如何设置Apache和Tomcat使用mod_proxy_ajp?

我想在Apache RHEL 5服务器上运行Apache和Tomcat,使用Apache处理Ruby on Rails应用程序(通过mod_rails / Passenger)和Tomcat处理Java应用程序。

在Apache下,每个Rails应用程序将有一个URL和虚拟主机。 这些URL已经在我们的DNS服务器中configuration为指向机器。

在Tomcat下,每个Java应用程序都有一个这样的URL: ourserver.ourcompany.com/app1

服务器已经启动并运行在端口80上运行的Tomcat 6并提供多个Java应用程序。 我想添加Apache并重新configuration。 我熟悉如何configuration唯一的Apache服务器来使用Passenger来托pipeRoR应用程序。 我只是不知道如何让Apache和Tomcat一起工作。

我通过谷歌search(例如, 这个 )发现了各种资源和讨论,但他们往往有点粗略和不完整,或者他们似乎不符合我想要做的。 我链接的人似乎是如果你想发送所有的请求到Tomcat,而不仅仅是某些,并有Apache处理其他人。

有人可能会提出一个示例configurationserver.xmlhttpd.conf ,或者可能指向我一些更详细的资源?

您不需要对server.xml进行任何更改,只需将Tomcat放回默认端口,以便Apache可以处理端口80.大部分工作将通过Apacheconfiguration文件完成。 我通常把它们留在httpd.conf之外,并把它们放在<ServerRoot>/conf.d/子目录下的小configuration片段中。

给你的例子ourserver.ourcompany.com/app1我会假设一个configuration如下:

 <VirtualHost *:80> ServerName ourserver.ourcompany.com ErrorLog ... CustomLog ... [other VHost configurations] ProxyPass /app1 ajp://tomcat_hostname:8009/app1 ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1 ProxyPass /app2 ajp://tomcat_hostname:8009/app2 ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2 </VirtualHost> 

如果你有多个Tomcat服务器集群,那么你可能需要考虑设置mod_balancer并将ajp://移动到mod_balancer BalancerMember ,并用平衡器configuration的balancer://replace。

我个人不喜欢mod_proxy_ajp; 当在Apache下运行Tomcat时,我正好去安装mod_jk(来自Tomcat编码器的模块)来提供AJP连接。 你可以调整mod_jk星期天的5种方式来performance你的应用程序(线程,超时,敲门等)。

  1. 确保安装了httpd-devel
  2. 将真正的JDK解压到某个path,如/usr/local/jdk1.6.0_18/
  3. 从tomcat.apache.org获取“tomcat-connectors”源代码并进行编译

    cd tomcat-connectors-1.2.28-src / native

    ./configure –with-apxs = / usr / sbin / apxs –with-java = / usr / local / jdk1.6.0_18 –enable-prefork

    使

    cp apache-2.0 / mod_jk.so / usr / local / lib /

现在,您必须将其插入Apacheconfiguration中,然后根据需要插入到每个虚拟主机中。 在整体configuration中添加如下内容:

 LoadModule jk_module /usr/local/lib/mod_jk.so JkWorkersFile /usr/local/tomcat/conf/workers.properties JkShmFile /var/log/httpd/mod_jk.shm JkLogFile /var/log/httpd/mod_jk.log JkLogLevel error 

您将需要创build基本的worker.properties文件,这里是文档: http : //tomcat.apache.org/connectors-doc/reference/workers.html一个非常基本的可能是这样的:

 workers.tomcat_home=/usr/local/tomcat workers.java_home=/usr/local/jdk1.6.0_18 ps=/ worker.list=ajp13 worker.maintain=60 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=ajp13 

这将使用server.xml中的默认端口8009configuration – 这里有一百万个旋钮可以在这里旋转,从而无休止地调节性能。 然后,在每个虚拟主机中,您“安装”所需的应用程序:

 <VirtualHost *:80> ServerName foo.bar.com ...other options ... JkMount /app1/* ajp13 <Location "/app1/WEB-INF/"> deny from all </Location> JkMount /app2/* ajp13 <Location "/app2/WEB-INF/"> deny from all </Location> </VirtualHost> 

正如您在底部看到的那样,不要忘记一点安全性,并且拒绝对您的WEB-INF文件夹的所有访问 – 当部署为warball时,大多数webapps都将其数据库DSN的密码为web.xml。