【问题标题】:Embedded Tomcat won't listen to port 80 in AWS Elastic Beanstalk嵌入式 Tomcat 不会侦听 AWS Elastic Beanstalk 中的端口 80
【发布时间】:2017-06-27 04:56:53
【问题描述】:

我正在向 Elastic Beanstalk (Java) 实例启动带有嵌入式 Tomcat 的 Spring Boot .jar。

server.port=80 在配置文件中,但是 EB 不会让 Tomcat 绑定到端口 80。

是什么阻止了 Tomcat 监听端口 80,我该如何解决?

这是日志的相关部分:

Caused by: org.apache.catalina.LifecycleException: service.getName(): "Tomcat";  Protocol handler start failed
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:1000) ~[tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.11.jar!/:8.5.11]
    ... 21 common frames omitted
Caused by: java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_121]
    at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_121]
    at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_121]
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_121]
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_121]
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210) ~[tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:980) ~[tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:573) ~[tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:993) ~[tomcat-embed-core-8.5.11.jar!/:8.5.11]
    ... 22 common frames omitted

2017-02-09 09:05:28.126  INFO 2451 --- [           main] o.apache.catalina.core.StandardService   : Stopping service Tomcat
2017-02-09 09:05:28.156  INFO 2451 --- [           main] utoConfigurationReportLoggingInitializer : 

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-02-09 09:05:28.167 ERROR 2451 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The Tomcat connector configured to listen on port 80 failed to start. The port may already be in use or the connector may be misconfigured.

Action:

Verify the connector's configuration, identify and stop any process that's listening on port 80, or configure this application to listen on another port.

2017-02-09 09:05:28.175  INFO 2451 --- [           main] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5387f9e0: startup date [Thu Feb 09 09:05:19 UTC 2017]; root of context hierarchy
2017-02-09 09:05:28.178  INFO 2451 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown

【问题讨论】:

  • 您可以使用sudo 运行您的应用程序,因为ec2-user 不允许绑定到端口80。出于安全考虑,这显然不是一个好习惯。为什么要监听 80 端口?默认情况下,Elastic beanstalk 将代理到端口 8080。
  • 我之前在使用 nodejs 时也遇到了同样的问题。在 beanstalk 中,它使用 nginx 作为代理服务器,将 http 请求传递给 nodejs。

标签: java amazon-web-services tomcat spring-boot amazon-elastic-beanstalk


【解决方案1】:

我假设主题启动器已经解决了这个问题,但我会在此处发布我的解决方案,以供遇到相同问题的新人使用。

通过将环境属性 SERVER_PORT 设置为 5000(您可以在“配置”>“软件配置”中进行设置),我已使我的 Spring Boot 应用程序可以从 AWS Elastic Beanstalk 上的端口 80 访问。

想法来自here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 2015-02-13
    • 2020-11-09
    • 2020-12-30
    • 2019-02-16
    • 2017-11-21
    • 2019-05-05
    • 2019-11-08
    相关资源
    最近更新 更多