在 linux Azure 应用服务中重写对 always on bot 的请求

rewrite requests for always on bot in linux Azure app service

我们看到一些 404 日志来自 Azure always On 中的机器人。它每 5 分钟触发一次。我们的健康检查不在根目录下。

我们为此使用 Docker 图片,NodeJs 14.x。在文档中,他们说使用 web.config 来重定向一些网址,但我不确定这是否有效。

<rule name="Redirect AlwaysOn requests from root to custom url" stopProcessing="true">
    <match url="^$" />
    <conditions>
        <add input="{HTTP_USER_AGENT}" pattern="^AlwaysOn$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/status" logRewrittenUrl="true" redirectType="Permanent"/>
</rule>

并且不确定将此文件放在容器中的什么位置。这是 docker 文件

FROM node:15.0.1-alpine3.10

WORKDIR /usr/src/app

RUN mkdir node_modules
RUN mkdir dist
COPY node_modules node_modules
COPY dist dist

COPY apps/api/.docker/sshd_config /etc/ssh/
COPY apps/api/.docker/init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh

ENTRYPOINT ["/usr/local/bin/init.sh"]

404 logs coming from a bot in Azure always On.

  • 可以通过重写 Always on 路径来解决问题。

  • 应用程序冷启动后,AlwaysOn 将向 发送请求ROOT 您的应用程序“/”。请求时无论传递什么文件,/ 都是要预热的文件,它会失败,因为根目录不存在。

  • 使AlwaysOn预热特定页面而不是根,实施URL重写规则。

<?xml version="1.0" encoding="UTF-8" standalone="no">
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite AlwaysOn" stopProcessing="true">
          <match url="^$"  />
          <conditions>
            <add input="{HTTP_USER_AGENT}" pattern="^AlwaysOn$"  />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/status" logRewrittenUrl="true" redirectType="Permanent"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
  • web.config文件需要添加到root的node app

  • 如果您的应用有 server.jsapp.js 文件在你的 Node.js 项目中, web.config 文件应该在同一目录中。

  • 如果你使用的是Visual Studio代码,那么把web.config 文件在 /public 文件夹中,然后在构建过程中将其复制到 /dist 文件夹。

  • 我在 public 文件夹中创建了配置文件,在 运行ning npm 运行 build , web.config 文件被复制到 dist 文件夹。

  • 要创建web.config,右键单击public文件夹 添加新文件,将其命名为 web.config 并添加上述代码段并保存。

  • 进入 Azure 门户,你的 Web App =>Advanced Tools=>KUDU - Debug Console =>CMD => site=>wwwroot,检查 web.config 文件是否存在。

  • 如果你使用Visual Studio,那么select Azure Node.js Express模板来创建Web App,那么web.config会生成automatically.You即可直接编辑设置。