Невозможно запустить Tomcat с 80 портом в Google Compute Engine - PullRequest
0 голосов
/ 10 сентября 2018

Я использовал экземпляр Google Compute Engine с CentOS7 и сервером Tomcat 8.Tomcat, работает нормально с портом 8080, но при смене порта на 80 произошло исключение сокета. Исключение Tomcat:

org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]]
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:552)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:632)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:655)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:995)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
        ... 12 more
Caused by: java.net.SocketException: Permission denied
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:219)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1087)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:265)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
        at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:68)
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:993)

Мои роли брандмауэра, введите описание изображения здесь

Я уже следил Google cloud Compute Engine отказывается от внешнего доступа через apache2 Но не работает .. Пожалуйста, совет .......

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Как сказано выше здесь @ gdahlm,

Порты ниже 1024 в linux / Unix являются «привилегированными портами», для создания которых требуются повышенные привилегии.

Поскольку вы находитесь в GCP (Google Cloud Platform), у вас есть несколько вариантов.

Используйте высокий порт выше 1024 как непривилегированный пользователь и:

  • Подключитесь к этому высокому порту в вашем URL https://foo:8443
  • Используйте GCP балансировщик нагрузки сети или HTTP / HTTPS для перенаправления порта 443 на высокий порт
  • Использование таблиц IP для пересылки пакетов с 443 на высокий порт внутри экземпляра виртуальной машины
  • Запустите сервис, используя suid, sudo или другие метод
  • Предоставьте возможности _CAP_NET_BIND_SERVICE_ (7) процесс.

Последние два варианта имеют сложные последствия для безопасности и следует избегать, если это вообще возможно.

0 голосов
/ 10 сентября 2018

У члена сообщества ранее была похожая проблема . Он смог исправить свою проблему с помощью этой команды:

sudo setcap cap_net_bind_service+ep /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
...