我在新更新的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中的相同。
我希望有人能帮我解决这个问题。
答案 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服务。