Java 为什么Tomcat使用端口8080而不是80?

Java 为什么Tomcat使用端口8080而不是80?,java,linux,tomcat,port,firewall,Java,Linux,Tomcat,Port,Firewall,我已经在8080端口(默认)下启动并测试了Tomcat。现在我将连接器端口改为80并重新启动Tomcat,在我的最小Debian 6.0安装中不会显示任何内容。这里的诀窍在哪里 <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" /> 您是否以root

我已经在8080端口(默认)下启动并测试了Tomcat。现在我将连接器端口改为80并重新启动Tomcat,在我的最小Debian 6.0安装中不会显示任何内容。这里的诀窍在哪里

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


您是否以root用户身份在端口80上启动了Tomcat?您必须是root用户才能绑定到端口停止apache服务,然后运行tomcat您应该很好,默认情况下apache在端口80上运行有两个典型原因:

  • 您很可能没有权限侦听低于1024的端口(通常需要管理权限,例如成为
    root
  • 端口80上可能已在侦听其他内容(例如apache)

转到/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

如果之前的评论都不起作用(就像我遇到的那样),您可以将流量从端口
80
定向到
8080

要做到这一点:

简而言之,在终端中键入以下三个命令:

$ 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 

更改绑定后以root用户身份运行启动脚本

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


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

您是否在catalina.out中获得了BindException?很有可能系统中的其他东西已经绑定到端口80。可能该端口上正在运行另一个服务。首先要做的事情是:查看日志(在tomcat/logs目录中)我想查看日志,在/etc/tomcat6没有,日志文件夹最有可能在哪里?@Jack Murphy:(不是答案,因此评论)值得一提的是,我从来没有将Tomcat作为root或sudo'ed运行过。实际上,在Linux上,我甚至没有将Java作为root安装:我在用户帐户中安装Java,只使用该用户的权限。然后,我在端口8080/8443上运行Tomcat。不过,系统是以root配置的,以透明的方式将端口80重定向到8080等(使用iptables)。值得注意的是:从安全角度来看,将Tomcat作为
根启动通常是个坏主意,除非它能够(并配置)在绑定后将其用户切换到非特权用户(上次我检查时不可能这样做)。我使用/etc/init.d/tomcat6 start启动Tomcat,并使用根帐户登录。我可以修改它以便在端口80下启动它吗?Tomcat配置文件决定要使用哪个端口,如何启动进程并不重要。很可能您在端口80上监听了其他内容。请尝试运行:netstat-an | grep 80,这将让您知道端口80上是否已经有东西在侦听。@Romain您认为在端口80上访问Tomcat的最佳方法是什么?安装Apache httpd server和Tomcat,然后使用Apache httpd server使用mod_proxy代理Tomcat?@arya I pues so-Tomcat+某种反向代理(Apache、Nginx,任何最适合您的用例的)关于端口这一事实,OP中没有提到。你不应该假设。我很确定80上没有运行任何东西,因为它是一个只安装了SSH的基本debian,我用apt-get添加了java和tomcat。在端口上没有运行Apache或其他任何东西80@Romain:嗯,root或类似特权帐户。已编辑以澄清。我相信1024是可以的(也就是说,只有0-1023需要特权,但我可能是错的)在端口80上没有其他东西在侦听。我是root,但我用/etc/init.d/tomcat6 startalso执行它,所以这将只是一个极端情况,正如您所提到的“如果之前的任何评论都不起作用”。其他读者看到了我遗漏的一些东西:*这很简单,并且实现了目标,而无需安装和管理
authbind
*Tomcat侦听数量较少的端口。*Tomcat以非特权用户的身份运行。为什么这是一个极端情况下的解决方案?此解决方案不是很好,因为最终用户将看到端口er在他们的URL中,并看到URL更改。@alexk我没有这个解决方案的URL更改问题-我知道这是一个非常旧的线程。完美的解决方案,为*nix保存了正确的答案,但Windows呢?