我最近在亚马逊ec2上安装了Tomcat7。我发现Tomcat在默认情况下侦听端口8080。
互联网上的文档主张这是因为linux可以更好地将较低的端口保存给超级用户。( ec2 btw上的解决方案是创建一个负载均衡器-将通信从端口80定向到目标机器上的端口8080 )
令我惊讶的是,我继续在另一台机器上安装了一台Apache服务器(yum install httpd),令人惊讶的是,Apache默认监听端口80!
这很尴尬我想..。“8080端口”的拥护者现在在哪里?
谁能解释一下概念上的区别?
谢谢
发布于 2013-06-27 02:56:08
在这一点上,这种差异主要是历史上的,但仍然被Linux和我能想到的大多数Unix实现所强制执行。Unix/Linux将任何小于1024的端口号视为“特权”,并要求root privs绑定到它们。任何用户都应该能够绑定到高于1024的端口。如果您的软件包是某个版本的软件包,它希望以root用户身份启动,绑定到端口,然后可选地将有效的UID更改为非特权用户。Apache HTTPD就属于这一类。后来创建的软件包(例如Apache Tomcat)通常会使用非特权用户执行所有操作,并在默认情况下绑定到更高的端口号。
我相信,一些防火墙管理员可以详细说明在某些情况下,端口< 1024有时在防火墙配置中如何得到特殊处理。
发布于 2013-06-27 03:20:56
我继续解释。正如@gunglefunk已经回答的那样,httpd使用端口80,因为它运行主守护进程,直到root /特权用户,即允许绑定任何小于1024的端口。所有其他线程或工作线程都运行非特权用户(主要是apache)。
Tomcat可以使用相同的原理。Tomcat完全是用Java编写的,所以只有一个用户用来运行整个JVM。通常是用户'tomcat‘。
当您想在端口80上监听Tomcat时,有两种可能。
在“根目录”下运行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.html和http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html和http://tomcat.apache.org/connectors-doc-archive/jk2/proxy.html
发布于 2015-12-08 07:37:12
您不需要以root用户身份运行进程即可将其绑定到特权端口。
您可以使用setcap来赋予它此权限:
https://wiki.apache.org/httpd/NonRootPortBinding
不过,这并不是真正必要的。
例如,您可以简单地使用iptables转发到更高的端口。
还有一些工具,比如authbind,就是为了这个目的而开发的。
此外,如果安全性是一个问题,您也可以在chroot监狱中运行该进程。
https://stackoverflow.com/questions/17313661
复制相似问题