【发布时间】:2020-12-15 17:19:52
【问题描述】:
所以,我尝试将 Spring Boot 应用程序部署到 PCF 服务器。当我部署它时,日志显示我的应用程序已关闭,因为它无法打开 tomcat 服务器,因为有一个 java.netsocketexception 表示权限被拒绝。 tomcat服务器一时间还好好的(成功使用了端口),但下一刻,因为有权限被拒绝的netsocketexception,它被关闭了。
我尝试使用的端口是 443 端口。我尝试查找多种问题。其中之一说我需要具有 root 访问权限才能使用低于 1000 的端口。问题是,即使我使用端口 443,我的其他应用程序,即尤里卡服务器也能完美运行。
配置、构建包和一切都是一样的。它甚至部署在同一个pcf平台上。那么,为什么这个应用程序会失败,而另一个(eureka 服务器)可以使用 443 端口。
谁能告诉我需要检查哪些内容才能确定问题所在?
【问题讨论】:
-
您不应该尝试设置端口,您需要让 Java buildpack 为您设置要使用的端口(它将根据平台告诉它的内容执行此操作)。此外,您无需将应用程序配置为使用 HTTPS。同样,该平台将为您处理所有这些。停止所有这些,看看会发生什么或解释你为什么要这样做。
-
我的 buildpack 和 env 配置默认端口是 8080,因为我想在端口 443 中部署我的应用程序,所以我在 application.yml 中将 server.port 设置为 443
-
我问的问题是为什么我的其他应用可以部署在 443 端口,但我尝试部署的却不行
-
如答案中所述,您不想设置
server.port(我有点惊讶Java buildpack 并没有压缩您的设置)。无论如何,正如我上面提到的,TLS/HTTPS 是平台给你的礼物。它可以正常工作,您无需在应用程序中执行任何特定操作来支持它。只需将路由映射到您的应用程序并通过 HTTPS 访问该路由。 TLS 由平台终止,流量通过端口 8080 上的 HTTP 路由到您的应用程序。 -
我不知道为什么它以前有效。没有更多信息很难说。 Java buildpack 可能会覆盖您的设置,它通过
SERVER_PORTenv 变量提供端口,该变量应该覆盖 application.yml 中的设置(请参阅docs.spring.io/spring-boot/docs/current/reference/html/…,其中列出了 Spring Boot 加载设置的顺序和位置)。也有可能您使用了 TCP 路由或内部路由,它们可以在端口 443 上工作,但您会知道是否这样做。
标签: spring-boot tomcat cloud-foundry