在 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.js 或 app.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即可直接编辑设置。
我们看到一些 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.js 或 app.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即可直接编辑设置。