为啥 Tomcat 使用端口 8080 而不是 80?

Posted

技术标签:

【中文标题】为啥 Tomcat 使用端口 8080 而不是 80?【英文标题】:Why does Tomcat work with port 8080 but not 80?为什么 Tomcat 使用端口 8080 而不是 80? 【发布时间】:2012-05-14 01:40:37 【问题描述】:

我已经在 8080 端口(默认)下启动并测试了 Tomcat。现在我将连接器端口更改为 80 并重新启动 Tomcat,在我的最小 Debian 6.0 安装上什么都不会显示。现在的诀窍在哪里?

<Connector port="80" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           URIEncoding="UTF-8"
           redirectPort="8443" />

【问题讨论】:

您是否在 catalina.out 中遇到了 BindException?系统中的其他东西很有可能已经绑定到端口 80。 可能另一个服务已经在该端口上运行 第一件事:查看日志(在tomcat/logs目录下) 我想查看日志,/etc/tomcat6 没有,日志文件夹最有可能在哪里? @Jack Murphy:(不是答案,因此是评论) 值得我从来没有以 root 或 sudo'ed 或类似的身份运行 Tomcat。实际上,在 Linux 上,我什至不以 root 身份安装 Java:我在用户帐户中安装 Java,仅使用该用户的权限。然后我在端口 8080 / 8443 上运行 Tomcat。但是,系统被配置为(以 root 身份),透明地将端口 80 重定向到 8080 等(使用 iptables)。 【参考方案1】:

转到 /etc/default/tomcat6 并将 #AUTHBIND=no 更改为 AUTHBIND=yes

 # If you run Tomcat on port numbers that are all higher than 1023, then you
 # do not need authbind.  It is used for binding Tomcat to lower port numbers.
 # NOTE: authbind works only with IPv4.  Do not enable it when using IPv6.
 # (yes/no, default: no)
 #AUTHBIND=no

【讨论】:

另见thelowedown.wordpress.com/2010/08/17/…【参考方案2】:

两个典型的原因:

你很可能没有权限监听低于 1024 的端口(通常需要管理权限,例如 root) 其他东西可能已经在监听 80 端口(例如 apache)

【讨论】:

@Romain:好吧,root 或类似特权的帐户。已编辑澄清。我相信 1024 没问题(即只有 0-1023 需要特权,但我可能是错的) 80 端口上没有其他东西在监听。我是 root 但我正在使用 /etc/init.d/tomcat6 start 执行它【参考方案3】:

如果之前的评论都不起作用(就像发生在我身上一样),您可以将流量从端口 80 引导到 8080

这样做:

http://forum.slicehost.com/index.php?p=/discussion/2497/iptables-redirect-port-80-to-port-8080/p1

简而言之,在终端中输入这三个命令:

$ sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 

【讨论】:

这只是一个极端情况,正如您所提到的“如果之前的评论都不起作用”。 其他读者看到了我遗漏的东西:* 这很简单,无需安装和管理 authbind 即可实现目标。 * Tomcat 侦听低号端口。 * Tomcat 作为非特权用户运行。为什么这是一个极端案例解决方案? 这个解决方案不是很好,因为最终用户会在他们的 URL 中看到端口号并看到 URL 更改。 @alexk 我没有遇到此解决方案的 URL 更改问题 - 我知道这是一个非常老的线程。【参考方案4】:

您是否以 root 身份在端口 80 上启动了 Tomcat?您必须是 root 才能绑定到 Linux 中的端口

【讨论】:

值得注意的是:从安全角度来看,以root 启动 Tomcat 通常是一个坏主意,除非它能够(并配置)在绑定后将其用户切换为非特权用户(这'上次我检查时不可能)。 我使用 /etc/init.d/tomcat6 start 启动了 Tomcat,并使用 root 帐户登录。我可以修改它,以便我可以在端口 80 下启动它吗? tomcat 配置文件决定使用哪个端口,如何启动进程并不重要。有可能您在端口 80 上监听了其他东西。尝试运行:netstat -an | grep 80 这会让你知道是否有东西正在监听端口 80。 @Romain 您认为使 Tomcat 在端口 80 上可访问的最佳方法是什么?安装 Apache httpd 服务器和 Tomcat,然后使用 Apache httpd 服务器使用 mod_proxy 代理到 Tomcat? @arya 我是这么想的 - Tomcat + 一些反向代理(Apache、nginx,只要最适合您的用例)【参考方案5】:

更改绑定后以 root 身份运行您的启动脚本。

sudo ./<path to tomcat bin director>/startup.sh

【讨论】:

完美解决方案,拯救了我的一天 *nix 的正确答案,但是 Windows 呢?【参考方案6】:

停止apache服务,然后运行tomcat就可以了,默认情况下apache运行在80端口

【讨论】:

端口 OP 中没有提到这一点。你不应该假设。 我很确定 80 上没有运行任何东西,因为它是一个基本的 debian,只安装了 SSH,我用 apt-get 添加了 java 和 tomcat。 80 端口没有运行 Apache,也没有其他任何东西【参考方案7】:

您可以使用 authbind/privbind 或功能绑定到端口 80。

【讨论】:

以上是关于为啥 Tomcat 使用端口 8080 而不是 80?的主要内容,如果未能解决你的问题,请参考以下文章

为啥idea运行完进入界面网址只到端口

Xampp 1.8.1:Apache 无法在端口 8080 中启动,该端口正被 tomcat 7 使用

Tomcat配置好也已经启动,为啥localhost8080打不开呢?

Tomcat配置好也已经启动,为啥localhost8080打不开呢?

新解压的tomcat为啥不能正常启动访问8080端口?(百分百有效)

用eclipse调试jsp网页,老是访问8080的端口,可是我tomcat的端口改成8090了,为啥会这样,求大神指教