gpt4 book ai didi

spring - 使用重写规则将 http 重定向到 https 时,AlwaysOn 功能无法正常工作

转载 作者:行者123 更新时间:2023-11-28 21:48:10 25 4
gpt4 key购买 nike

我有一个 Azure PaaS 实例,在 Tomcat8 容器内运行 Spring-Boot 打包的“war”。问题是,经过一段时间的不活动后,“java”进程被终止。

enter image description here

上图是tomcat进程没有被杀死时的样子。

仅当我再次向服务器发出任何类型的请求时,tomcat 进程才会再次启动。

如果我的理解是正确的,标志“WEBSITE_SCM_ALWAYS_ON_ENABLED”是为了使实例保持事件状态,即“w3wp”进程而不是 Tomcat。

此问题的一个解决方案是使用简单的“健康”请求“轮询”我的服务器以使其保持事件状态。

如果它的“httpPlatformHandler”有一些 Azure 配置或 Spring-boot 配置,那就更好了,这样我就可以阻止它进入休眠状态。

感谢任何帮助。

**** 更新 ****

在 @DavidEbbo 的进一步帮助下,问题被追溯到我从“http”到“https”url 的 URL“重写”规则。“AlwaysOn”请求位于 HTTP(端口 80)上,因此每当 Azure 请求被命中时,它都会获得重定向(301)作为回应。仍在等待解决方案。

最佳答案

问题的根源在于您用于将 http 重定向到 https 的 URL 重写规则阻止了 AlwaysOn 预热请求到达您的 Java 应用程序。

幸运的是,有一个解决方案。

解决方案#1:使用 XDT 转换

使用以下步骤:

  • 从 web.config 中删除重写规则
  • 请使用 Kudu Console (或 FTP,但这更难)在“site”文件夹(即 d:\home\site\applicationHost.xdt)下创建一个名为 applicationHost.xdt 文件。提示:您可以在 Kudu 控制台中输入 touch applicationHost.xdt 创建一个空文件。
  • 编辑该文件并粘贴找到的 XDT 文件 here在“将 http 流量重定向到 https”部分下。
  • 保存文件并从门户重新启动您的网站。

请注意,AlwaysOn 请求在 http 日志中仍然看起来像 301,但正确的事情仍然会发生(即 Java 将唤醒)。

解决方案 #2:直接在 web.config 中进行更改

或者,如果您不想使用 XDT 转换并希望将所有内容保留在 web.config 中,则可以在其中添加缺少的部分。具体来说,您需要进行两项更改(与上面的 XDT 匹配):

将此条件添加到您的重写规则中:

<add input="{WARMUP_REQUEST}" pattern="1" negate="true" />

system.webServer下添加此applicationInitialization部分:

<applicationInitialization>
<add initializationPage="/" />
</applicationInitialization>

但我建议使用 XDT 方法,因为它不需要棘手的编辑,并且可以将那些“困惑”的东西与代码库分开。

原始答案

启用“始终开启”的正确方法是在 Azure 门户中将其设置为“开启”。 WEBSITE_SCM_ALWAYS_ON_ENABLED 不是您可以设置的内容,但它是 Azure 由于启用“始终在线”而设置的内容。

启用“始终在线”后,您网站的根目录(即 /)每隔几分钟就会被访问一次,这应该会使其保持事件状态。

如果您需要命中其他路径,可以使用 applicationInitialization。更多详情here .

关于spring - 使用重写规则将 http 重定向到 https 时,AlwaysOn 功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com