为啥 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?的主要内容,如果未能解决你的问题,请参考以下文章
Xampp 1.8.1:Apache 无法在端口 8080 中启动,该端口正被 tomcat 7 使用
Tomcat配置好也已经启动,为啥localhost8080打不开呢?
Tomcat配置好也已经启动,为啥localhost8080打不开呢?