繁体   English   中英

无法在 Google Compute Engine 中使用 80 端口启动 tomcat

[英]Unable to start tomcat with 80 port in Google Compute Engine

我在 CentOS7 和 Tomcat 8 中使用了 Google Compute Engine 实例

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)

我的防火墙角色,在此处输入图像描述

我已经通过 apache2 关注谷歌云计算引擎拒绝外部访问但没有工作..请指教....

社区成员以前也有类似的问题 他能够通过运行以下命令解决其问题:

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

正如@gdahlm在这里所说的,

在Linux / Unix上,低于1024的端口是“特权端口”,需要更高的特权才能创建。

与使用GCP(Google云平台)一样,您有多种选择。

使用高于1024的高端口作为非特权用户,并且:

  • 连接到您的网址https:// foo:8443中的高端口
  • 使用GCP网络或HTTP / HTTPS负载平衡器将端口443转发到高端口
  • 利用IP表将数据包从443转发到VM实例内部的高端口
  • 使用suid,sudo或其他方法运行服务
  • 将_CAP_NET_BIND_SERVICE_功能(7)授予该进程。

后两个选项具有复杂的安全隐患,应尽可能避免使用。

这是我用于 iptables 将端口 80 转发到 8080 的命令:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

不要忘记为 443 做同样的事情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM