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

4

我最近在Amazon ec2上安装了Tomcat 7。我发现默认情况下,Tomcat监听8080端口。

互联网上的文档主张这是因为linux更好地将低端口保留给超级用户。(顺便说一句,在ec2上的解决方案是创建负载均衡器-将端口80的通信定向到目标机器上的端口8080)

然后-让我惊讶的是-我在另一台机器上安装了Apache服务器(yum install httpd),惊奇!-Apache默认监听80端口!

我觉得这很尴尬...现在“端口8080”的拥护者在哪里?

有人能解释一下概念上的区别吗?

谢谢


你可以完全使用80端口来运行Tomcat,但通常会将其保留给Apache httpd服务器。 - Denys Séguret
什么是问题?你不理解80和8080之间的“概念差异”吗?你惊讶于HTTP服务器在端口80上监听吗?你惊讶于Tomcat在端口8080上监听吗?你认为应该有一个有形的“8080端口倡导者团队”吗? - user207421
3个回答

6
区别在现在大多数情况下已经是历史性的,但仍然被Linux和我所知道的大多数Unix实现所执行。 Unix/Linux认为任何小于1024的端口号都是“特权”的,并要求使用root权限进行绑定。任何用户都应该能够绑定到高于1024的端口。如果您的软件包是某个特定年代的,则期望以root身份启动,绑定到一个端口,然后可以选择将有效UID更改为非特权用户。 Apache HTTPD属于此类别。后来创建的软件包(例如Apache Tomcat)通常采用使用非特权用户执行所有操作并默认绑定到较高端口号的方式。
一些防火墙管理员可以详细说明在某些情况下端口小于1024的端口有时会在防火墙配置中得到特殊处理。

1
我继续解释。正如@gunglefunk已经回答的那样,httpd使用80端口是因为它在主守护程序下运行,直到根/特权用户允许绑定任何小于1024的端口。所有其他线程或工作进程都以非特权用户(大多数为apache)运行。
Tomcat可以使用相同的原则。Tomcat完全使用Java编写,因此只有一个用户用于运行整个JVM。通常使用用户“tomcat”。
当您想要侦听Tomcat的80端口时,有两种可能性。
将tomcat在“root”下运行(在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


0

你不需要以root身份运行进程才能将其绑定到特权端口。

你可以使用setcap来授予它这个权限:

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

虽然这并非必需,但您可以简单地使用iptables将其转发到更高的端口。

还有一些工具,例如authbind,专门用于此目的。

另外,如果安全性是一个问题,您也可以在chroot监狱中运行进程。


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