如何同时运行Apache(httpd)和Tomcat?

9

最近我接到了一些使用Struts开发的项目,而且我预计会有更多的JSP项目接踵而至。

在搜索相关问题后,我看到了一些人尝试过做同样的事情的博客。但那些博客并不是一个详细的步骤说明,而更像是提供参考以备将来需要时使用。在某些情况下,作者并没有明确说明他是否成功地同时运行了这两个服务。

不幸的是,我不能遵循他们的“指导”,因为我已经配置了很多PHP项目(上传目录、类路径等)在我的测试服务器上运行,如果我弄错了httpd服务器,我就没有时间重新配置它们了。为了诚实起见,由于犹豫更新配置文件,出于同样的原因,我还没有尝试过同时运行它们的任何一步。

我不确定这是否增加了复杂性,但我通过xampp(其中tomcat是xampp附加组件)运行了这两个服务,以便实现可移植性。

我知道我可以在工作时停止Apache服务,但嘿,这是一个尝试新事物的机会,我不能让它溜走。此外,让两个服务自动启动真的会很方便,这将极大地提高我的生产力,因为我不必在需要时手动切换服务。

希望在这里有人曾经遇到过同样的问题。

编辑: Tomcat版本为6.0.20 Httpd版本为2.2.14


这是非常常见的事情,我有点惊讶你找不到指导。我希望我还记得当时自己是按照哪些指导进行操作的。 - David Z
啊,是的,我相信有很多讨论正在进行中,但公司的互联网政策会阻止留言板。感谢上帝,SO没有被视为公共论坛,呵呵。 - lock
3个回答

8
  • 让Tomcat监听80端口以外的端口。
  • 按照这个指南设置mod_proxy,将特定位置的请求重定向到Tomcat。

如果您只是在测试,请跳过第二步,直接通过Tomcat的不同端口访问服务器。

编辑:另请参阅http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html,了解如何设置mod_proxy_ajp。


建议标记“步骤 1”和“步骤 2(可选)”。并解释在一种替代方案中,网站呈统一状态(步骤 1 和 2)。而在另一种情况下则是分散的(步骤 1),浏览器地址栏中有不同的端口号。(前提是这全部都是正确的;这已经是我猜测的第四次了。) - Bob Stein

1

请注意,在现代版本的Apache中,mod_jk(2?)方法被广泛认为是过时的,因为它已经被mod_proxy_ajp替代。 - Borealid
这是针对httpd和Tomcat 6.0.20的Apache 2.2.14版本 :) 另外,为了避免歧义,我稍微修改了问题。 - lock
1
mod_jk2早已被淘汰。我提供的文档链接是Tomcat网站上最新的文档,其中包括mod_jk1.2.30(今年2月发布)......它几乎没有过时,并且可以与所有版本的Apache一起使用。 - user334583

0

如果您想使用 apache/httpd 来同时为 PHP 和运行在不同端口(比如 8080 端口的 tomcat)上的任何其他服务器提供请求服务,您可以使用 apache/httpd 充当代理,映射由另一个服务器提供的 URL。这是通过使用 ProxyPassProxyPassReverse 配置完成的。

例如: 如果您希望 http://localhost/php 由 PHP 提供服务,http://localhost/tomcat 由 tomcat 提供服务,则需要在 httpd.config/apache.config(根据您使用的 Apache 版本可能是 apache2.config)中进行以下更改:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# Uncomment these to proxy FTP or HTTPS
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so

<VirtualHost *:80>
# Your domain name
# ServerName Domain_NAME_HERE

ProxyPreserveHost On

ProxyPass /tomcat http://localhost:8080/
ProxyPassReverse /tomcat http://localhost:8080/

# The location of the HTML files, and access control information
DocumentRoot /var/www
<Directory /var/www>
    Options -Indexes
    Order allow,deny
    Allow from all
</Directory>

</VirtualHost>

如果您在CentOS上运行httpd并且可能会遇到错误Apache Mod_proxy '[Error] (13)Permission Denied',那么请按照this链接中的说明执行以下命令:
 /usr/sbin/setsebool -P httpd_can_network_connect 1

我建议你阅读mod_proxy

参考:Redhat mod_proxy配置


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接