使用 Windows 应用服务计划部署到 Azure 应用服务时,Java Web 应用不响应 HTTP 请求

问题描述

我构建了一个只需使用 java -jar app.jar 即可运行的网络应用。它查看环境变量 PORT 来决定监听哪个端口。现在我想使用 Windows 应用服务计划将其部署到 Azure,这称为 Azure 中的“Java SE 部署”。

在 Linux 应用服务计划中,我可以简单地部署 app.jar 文件(使用 vs code 插件、zipdeploy 或其他),设置环境变量 PORT,一切都很好。

对于 Windows 应用服务计划,尝试访问该应用会出现 500 错误,正文为“Web 服务器未能在指定时间内响应”。我已经打开了所有可能的日志记录,我可以看到请求进入了 IIS,但没有迹象表明它试图将请求发送到我的应用程序。

不过,我可以使用 curl http://localhost:<port> 直接从 Azure 控制台访问我的应用程序。所以我知道它已经启动了。

我已经完成了本教程 https://docs.microsoft.com/en-us/azure/app-service/quickstart-java?tabs=javase&pivots=platform-windows效果很好,但我没有使用 maven 或 spring boot - 我需要自己构建 jar 文件

我读过 https://docs.microsoft.com/en-us/azure/app-service/deploy-ziphttps://docs.microsoft.com/en-us/azure/app-service/configure-language-java?pivots=platform-windows,但它们似乎没有告诉我任何我不知道的东西。

解决方法

通过在我的应用程序中转储环境,我发现 Azure 将环境变量 SERVER_PORT 设置为一个数字,如果您监听该数字,请求将正确转发。它实际上设置了相当多的环境变量到同一个端口号,但我选择了SERVER_PORT,因为它看起来是最有意义的名称,并且在各种博客等中也有一些引用。HTTP_PLATFORM_PORT也设置了。

我仍然很感激任何对微软官方文档的引用,所以至少我知道是否有一种“正确”的方法来做到这一点。