提问者:小点点

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


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

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

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

这就尴尬了,我想…8080端口的拥护者现在在哪里?

谁能解释一下概念上的区别?

谢啦


共3个答案

匿名用户

在这一点上,差异主要是历史上的,但仍然由Linux和我能想到的大多数Unix实现强制执行。Unix/Linux考虑任何端口号

我敢肯定,一些防火墙管理员可以详细说明如何移植

匿名用户

我继续解释。由于@gun glefunk已经有了一个软件,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上的超文本传输协议,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

匿名用户

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

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

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

不过,这并不是真的必要。

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

还有一些工具,例如为这个目的而制作的autobind。

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