Tomcat需要Apache httpd吗?

40

如果我拥有包含 Java Web 应用程序的 war 文件,并且想在本地运行该 war 文件,那么我只需要 Tomcat,还是我需要同时拥有 Tomcat Apache httpd(或其他 Web 服务器)?谢谢!

4个回答

52

Tomcat是一种独立的web服务器,因此不需要像Apache这样的单独的web服务器。但是可能需要更改Tomcat的端口,因为它默认使用8080端口,而网站通常在80端口上。

我认为人们通常会在Tomcat前面添加Apache,这样可以做到:

  • 使一个网站有几个Tomcat实例。
  • 将静态文件从Apache服务中提取出来以减轻Tomcat的负载。
  • 使用其他您可能需要的Apache功能(模块)。
  • 正如@TacticalCoder在评论中提到的那样,要侦听80端口,您需要具有root权限,因此一些人可能正在使用Apache作为将端口80代理到端口8080的简单方法。

我建议采用YAGNI方法,只使用Tomcat,直到您发现需要Apache的原因。


9
@Bredan Long: “你可能想要更改Tomcat的端口” [sic]... 但是需要注意,在类Unix操作系统上,如果不是root用户,就无法监听80/443端口。但是将Java/Tomcat安装为root并不一定是一个好习惯:在Linux上,您可以在不是root的情况下安装Java。您也可以在不是root的情况下安装Tomcat。然后,作为root用户,您可以使用防火墙(例如iptables)透明地将端口80/443重定向到8080/4443(例如)。这通常被认为比以root身份运行Tomcat并直接监听端口80/443更安全。 - TacticalCoder
2
战术性的 - 只是出于好奇,您能解释一下为什么端口重定向比Tomcat直接监听端口更安全吗? - IAmYourFaja
1
@AdamTannon:因为在Unix上,你必须拥有root权限才能够监听1024以下的端口。我总是喜欢使用最少的权限来安装和运行软件。通过使用端口重定向,只需要以root身份运行一个命令,其余的操作都可以在普通用户账户下完成。当然,你也可以使用authbind或sudo等工具,但这样做有何必要呢?将Java + Tomcat安装为非root用户,并进行端口重定向即可。详情请参见:http://www.jvmhost.com/articles/java-net-bindexception-permisssion-denied-operation-not-permitted - TacticalCoder
3
只是想补充一点,在现实场景中我遇到过这种情况:如果Tomcat存在安全漏洞,并且以root身份运行,则有人可能会利用此漏洞并以root身份访问您的系统。那么您现在会陷入麻烦。如果Tomcat以非root身份运行,攻击者可能只能“仅仅”危害您系统的一些受限部分。这有可能在某一天拯救你的生命... - st-h
1
@TenLeftFingers 你可以试试。由于其流行度(效率、稳定性、每个人都知道配置格式),Apache具有一些优势,但我从未尝试过使用Tomcat,因此我不知道它们如何比较。根据我的个人经验,在将Tomcat添加到混合中时,我已经在运行Apache。 - Brendan Long
显示剩余3条评论

6
只需要Tomcat,HTTPD对于Tomcat并非必需品。

如果Tomcat不需要HTTPD,那么哪个进程会处理传入的服务器请求?能否请您解释一下?谢谢。 - Kanagavelu Sugumar
@KanagaveluSugumar Tomcat在端口8080上运行默认的HTTP服务器(因此,将端口重定向以侦听到达HTTP端口80的请求或在URL请求中指定端口8080)。 此外,在提供的server.xml文件中,您会看到以下元素:<!-- Normal HTTP --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="8080"/> </Connector> 要在Tomcat服务器前设置Apache HTTP服务器,请在server.xml中注释此条目。 - sactiw

2

Tomcat是一个Servlet容器,它有自己的HTTP服务器,因此如果您想运行一个WAR文件,只需要一个Tomcat即可。但是,如果您想运行一个仅包含静态文件(HTML、JS、CSS)的网站,则最好选择Apache,即使Tomcat也可以做到这一点。


0

你只需要Tomcat或任何其他Java Servlet容器(Jetty、Resin等)。


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