Tomcat7 связывается с портом 80 в Ubuntu 14.04LTS
У меня возникла проблема с моей установкой tomcat7 в недавно обновленной системе Ubuntu. С момента обновления до 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, а также изменил authbind в /etc/default/tomcat 7 на да, так что в основном все, что вам нужно сделать, чтобы запустить tomcat на порту 80.
Выполнение этих шагов на 12.04LTS отлично работает, только на 14.04LTS он теперь выдает эту ошибку "файл или каталог не найден".
Также при обновлении 12.04LTS (на котором tomcat работает нормально на порту 80) до 14.04LTS он неожиданно выдает ошибку выше, а вся конфигурация идентична той, что работала в 12.04LTS.
Я надеюсь, что кто-нибудь может помочь мне исправить эту проблему.
Ответы
Ответ 1
Следующие работы:
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 предлагает мне установить расширение браузера).
Ответ 2
Разрешить порт 8080 по умолчанию в server.xml
Запуск:
sudo/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT - to-port 8080
RU
Этот перенаправляющий трафик с порта 80 на 8080 (по умолчанию в tomcat) в Ubuntu 14.04 невозможно установить порт по умолчанию на 80 в server.xml.
FR
(Ceci redirige le trafic du port 80 vers 8080 (Par défaut dans tomcat) dans Ubuntu 14.04 il nest pas possible de mettre le port par défaut à 80 dans server.xml.)
Чтобы сделать это постоянным:
sudo apt-get install iptables-persistent
RU
Этот пакет позволяет вам сохранить ранее введенные правила iptables. Обязательно ответьте "Да" (сохраните текущие настройки).
FR
Ce pack permet de sauvegarder les règles iptables entrées précédemment. Вопросы и ответы, (sauvegarder les paramètres actels).
Ответ 3
Запустите службы tomcat, используя authbind, это позволит пользователю запускать порты менее 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, вы можете использовать свой идентификатор пользователя
echo '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"
Для запуска tomcat с использованием службы Authbind startup.sh
Прокомментировать нижнюю строку
#$CATALINA_HOME/bin/startup.sh
Добавить этот конец как конец файла
AUTHBIND_COMMAND="/usr/bin/authbind --deep /bin/bash -c "
$AUTHBIND_COMMAND $CATALINA_HOME/bin/startup.sh
теперь вы должны иметь возможность запускать службы tomcat как пользователь с менее 1024 портами.
Ответ 4
У меня была та же проблема. В конце я использовал перенаправление портов iptables вместо механизма authpriv
то есть.
1) в /etc/default/tomcat 7, установите authpriv = no
2) в файле /etc/tomcat 7/server.xml, используйте
<Connector port=8080...
вместо 80
3) ufw разрешить 8080/tcp
4) следуйте инструкциям здесь: https://serverfault.com/info/238563/can-i-use-ufw-to-setup-a-port-forward
То же самое можно сделать для порта 443 (SSL) при необходимости