首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache httpd与Tomcat 7:端口80与端口8080

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

Stack Overflow用户
提问于 2013-06-26 15:08:14
回答 3查看 11K关注 0票数 4

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

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

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

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

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-27 02:56:08

在这一点上,这种差异主要是历史上的,但仍然被Linux和我能想到的大多数Unix实现所强制执行。Unix/Linux将任何小于1024的端口号视为“特权”,并要求root privs绑定到它们。任何用户都应该能够绑定到高于1024的端口。如果您的软件包是某个版本的软件包,它希望以root用户身份启动,绑定到端口,然后可选地将有效的UID更改为非特权用户。Apache HTTPD就属于这一类。后来创建的软件包(例如Apache Tomcat)通常会使用非特权用户执行所有操作,并在默认情况下绑定到更高的端口号。

我相信,一些防火墙管理员可以详细说明在某些情况下,端口< 1024有时在防火墙配置中如何得到特殊处理。

票数 6
EN

Stack Overflow用户

发布于 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.htmlhttp://tomcat.apache.org/connectors-doc/ajp/ajpv13a.htmlhttp://tomcat.apache.org/connectors-doc-archive/jk2/proxy.html

票数 1
EN

Stack Overflow用户

发布于 2015-12-08 07:37:12

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

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

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

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

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

还有一些工具,比如authbind,就是为了这个目的而开发的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17313661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档