在Ubuntu 14.04LTS中,Tomcat7绑定到端口80失败

时间:2014-04-24 15:00:35

标签: tomcat7 port80 ubuntu-14.04

我在新更新的Ubuntu系统上安装了tomcat7时出现问题。自从更新到14.04 LTS以来,tomcat拒绝在端口80上启动时出现我无法解决的错误,也找不到任何关于如何解决它的问题:

    Information: Initializing ProtocolHandler ["http-bio-80"]
Apr 24, 2014 4:39:37 PM org.apache.coyote.AbstractProtocol init
Schwerwiegend: Failed to initialize end point associated with ProtocolHandler ["http-bio-80"]
java.net.SocketException: Datei oder Verzeichnis nicht gefunden
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
    at java.net.ServerSocket.bind(ServerSocket.java:376)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at java.net.ServerSocket.<init>(ServerSocket.java:181)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:397)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:640)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:813)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454)

问题是,我完成了我之前在Ubuntus(运行12.04 LTS)中完成的工作,简而言之,将server.xml编辑到端口80并且还更改了/ etc /中的authbind默认/ tomcat7为yes,所以基本上你需要做的就是在端口80上运行tomcat。

在12.04LTS上执行这些步骤可以正常工作,就在14.04LTS上它现在抛出这个&#34;文件或目录未找到&#34;错误。

当将12.04LTS(在端口80上运行的tomcat运行正常)升级到14.04LTS时,它突然抛出上面的错误,而所有配置都与12.04LTS中的相同。

我希望有人能帮我解决这个问题。

4 个答案:

答案 0 :(得分:117)

以下作品:

apt-get install authbind

首先,在AUTHBIND=yes文件

中设置/etc/default/tomcat7
sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown tomcat7 /etc/authbind/byport/80

这里有一个参考网址,但该网站已被黑客攻击(在Edge中标记为不安全,Chrome会提示我安装浏览器扩展程序)。

答案 1 :(得分:13)

在server.xml中默认使用端口8080

运行: sudo / sbin / iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

EN 这在Ubuntu 14.04中将流量从端口80重定向到8080(默认在tomcat中),无法在server.xml中将默认端口设置为80。

FR (Ceci redirige le trafic du port 80 vers 8080(Pardédautanstomcat)dans Ubuntu 14.04 il n'pas pas de mettre le portpardéfautà80dans server.xml。)

使这个持久化: sudo apt-get install iptables-persistent

EN 此程序包允许您保存先前输入的iptables规则。一定要回答是(保存当前设置)。 FR Ce packet permet de sauvegarderlesrèglesiptablesentréesprécédemment。 Ilfautrépondreouaux questions,(sauvegarderlesparamètresenitels)。

答案 2 :(得分:1)

我遇到了同样的问题。最后,我使用了iptables端口重定向而不是authpriv机制

1)在/ etc / default / tomcat7中,设置authpriv = no

2)在/etc/tomcat7/server.xml中,使用

<Connector port=8080...
而不是80

3)ufw允许8080 / tcp

4)按照此处的说明操作:https://serverfault.com/questions/238563/can-i-use-ufw-to-setup-a-port-forward

如果需要,可以对端口443(SSL)执行相同的操作

答案 3 :(得分:1)

使用authbind启动tomcat服务,这将允许用户启动小于1024的端口,我们不需要重定向或iptables。

  

apt-get install authbind -y

安装Authbind软件

  

chmod -R 755 / etc / authbind

组应该是用户组。

  

chown -Rh root:group / etc / authbind

之后运行以下命令

  

cd / etc / authbind / byuid

例如,让imagne用户ID为2000,您可以使用您的用户ID号

  回声&#39; 0.0.0.0/0:1,1023&#39; &GT; 2000

该文件应由用户和组拥有。

chown:2000

chmod 700 2000

在tomcat启动文件$ CATALINA_BASE / startup.sh

中添加以下行
export JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"

使用Authbind服务startup.sh

启动tomcat

评论以下行

#$CATALINA_HOME/bin/startup.sh

将此结尾添加为文件的末尾

AUTHBIND_COMMAND="/usr/bin/authbind --deep /bin/bash -c " 

$AUTHBIND_COMMAND $CATALINA_HOME/bin/startup.sh   

现在你应该能够以少于1024个端口的用户启动tomcat服务。