Apache httpd与Tomcat 7:端口80与端口8080

时间:2013-06-26 07:08:14

标签: linux apache amazon-ec2 tomcat7 port

我最近在亚马逊ec2上安装了Tomcat 7。我发现Tomcat默认侦听端口8080.

互联网上的文档主张这是因为linux更好地将较低端口保存给超级用户。 (ec2 btw上的解决方案是创建一个负载均衡器 - 将通信从端口80引导到目标机器上的端口8080)

比 - 令我惊讶的是 - 我继续在另一台机器上安装了Apache服务器(yum install httpd),并且惊喜! - Apache默认侦听端口80!

我觉得这很尴尬......现在'端口8080'在哪里提倡?

任何人都可以解释概念上的区别吗?

由于

3 个答案:

答案 0 :(得分:6)

此时差异主要是历史性的,但仍然由Linux和我能想到的大多数Unix实现强制执行。 Unix / Linux考虑任何端口号< 1024为“特权”并要求root权限绑定到它们。任何用户都应该能够绑定到高于1024的端口。如果您的软件包具有特定的年份,则它希望以root用户身份启动,绑定到端口,然后可选地将有效UID更改为非特权用户。 Apache HTTPD属于这一类。稍后创建的软件包(即Apache Tomcat)通常会使用非特权用户执行所有操作,并默认绑定到更高端口号。

有些防火墙管理员可以,我确定,详细了解端口<在某些情况下,1024有时会在防火墙配置中得到特殊处理。

答案 1 :(得分:1)

我继续解释。由于@gunglefunk已经是answare,httpd使用端口80,因为它运行主守护进程直到root /特权用户,允许绑定任何小于1024的端口。所有其他线程或工作者运行非特权用户(主要是apache) )。

Tomcat可以使用相同的原理。 Tomcat完全用Java编写,因此只有一个用户可以运行整个JVM。它通常是用户'tomcat'。

当您想在端口80上侦听Tomcat时,您有两种可能性。

在'root'下运行tomcat(在tomcat.conf或catalina.sh中更改它)。但是由于安全原因,不建议使用它。

在标准用户(通常为tomcat)下的任何高于1024的端口上运行tomcat,并使用proxy_ajp协议。这意味着您还在端口80上运行Apache HTTPD服务器并将流量转发到tomcat端口(默认为8080上的http,8443上的https,8009上的ajp)。请参阅https://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.htmlhttp://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html以及http://tomcat.apache.org/connectors-doc-archive/jk2/proxy.html

答案 2 :(得分:0)

您无需以root身份运行进程即可将其绑定到特权端口。

您可以使用setcap为其授予此权限:

https://wiki.apache.org/httpd/NonRootPortBinding

但这并不是必需的。

例如,您可以简单地使用iptables转发到更高端口。

还有为此目的而制作的authbind等工具。

此外,如果担心安全问题,您也可以在chroot监狱中运行该过程。