繁体   English   中英

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

[英]Apache httpd vs. Tomcat 7: port 80 vs. port 8080

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

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

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

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

任何人都可以解释概念上的差异吗?

谢谢

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

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

我继续解释。 由于@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.htmlhttp://tomcat.apache.org /connectors-doc-archive/jk2/proxy.html

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

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

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

但这并不是必需的。

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

还有为此目的而制作的诸如authbind之类的工具。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM