41

我在新更新的 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/default/tomcat7 中的 authbind 更改为 yes,所以基本上你必须做的一切都是在端口 80 上运行 tomcat。

在 12.04LTS 上执行这些步骤可以正常工作,只是在 14.04LTS 上它现在会引发此“找不到文件或目录”错误。

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

我希望任何人都可以帮助我解决这个问题。

4

4 回答 4

116

以下作品:

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

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

于 2014-05-08T16:41:39.827 回答
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 (Par défaut dans tomcat) dans Ubuntu 14.04 il n'est pas possible de mettre le port par défaut à 80 dans server.xml.)

要使其持久化: sudo apt-get install iptables-persistent

CN 这个包允许你保存之前输入的 iptables 规则。请务必回答是(保存当前设置)。FR Ce packet permet de sauvegarder les règles iptables entrées précédemment。Il faut répondre ou aux questions, (sauvegarder les paramètres actuels)。

于 2014-06-17T18:50:34.030 回答
2

使用 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

例如让我们想象用户 ID 为 2000,您可以使用您的用户 ID 号

回声“0.0.0.0/0:1,1023”> 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

添加 This End 作为文件的结尾

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

$AUTHBIND_COMMAND $CATALINA_HOME/bin/startup.sh   

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

于 2015-10-14T07:47:01.357 回答
1

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

IE

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

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

<连接器端口=8080...
而不是 80

3) ufw 允许 8080/tcp

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

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

于 2014-05-04T22:50:51.257 回答