Azure应用服务始终打开,自定义域重定向未访问默认网页

Meg*_*ez7 5 iis azure azure-web-sites

一旦没有为Web应用程序设置自定义域,Azure App Service AlwaysOn就能完美运行.一旦添加了自定义域以及URL重写规则以将所有传入请求重定向到它,应用程序在一段时间不活动后开始缓慢响应.日志显示AlwaysOn仍然ping天蓝色域并获取HTTP 301响应,而不是尝试请求新URL.

没有自定义域的日志:

2017-06-20 17:17:02 ZZTESTSITE GET / X-ARR-LOG-ID=743965b6-d3e2-42b9-9353-7772f9fbc898 80 - ::1 AlwaysOn ARRAffinity=b5289afa9cd711b67c1fe9137a6e3ff232f80bd3fa1bd96e9fc89992472b4e57 - zztestsite.azurewebsites.net 200 0 0 11433 652 15
Run Code Online (Sandbox Code Playgroud)

使用自定义域记录

2017-06-21 13:28:52 ZZTESTSITE GET / X-ARR-LOG-ID=ffcd5992-5019-48ca-a386-76443a8c7226 80 - ::1 AlwaysOn ARRAffinity=b5289afa9cd711b67c1fe9137a6e3ff232f80bd3fa1bd96e9fc89992472b4e57 - zztestsite.azurewebsites.net 301 0 0 553 652 46
Run Code Online (Sandbox Code Playgroud)

URL重写规则:

<rule name="Redirect requests from default azure websites domain to custom one" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAny">
    <add input="{HTTP_HOST}" pattern="^zztestsite\.azurewebsites\.net$" />
  </conditions>
  <action type="Redirect" url="http://mycustomdomain.com" redirectType="Permanent" appendQueryString="false"/>
</rule>
Run Code Online (Sandbox Code Playgroud)

此外,一旦启用了SSL并添加了另一个规则以将所有请求重定向到HTTPS,就会出现同样的问题.

我该如何解决这个问题?我发现了两个可能的方向:

  1. 按AlwaysOn以ping自定义域(可能选择https)
  2. 将URL重写规则更改为允许AlwaysOn ping天蓝域的规则,但所有其他域都应重定向

请指教.

Dav*_*bbo 5

尝试将此行添加到您的条件中:

<conditions>
  <add input="{HTTP_HOST}" pattern="^zztestsite\.azurewebsites\.net$" />
  <add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
</conditions>
Run Code Online (Sandbox Code Playgroud)

这告诉我不要重定向Always On ping.还要注意我删除了MatchAny,因为你真的想要MatchAll在这里(当你只有一个时无关紧要).

请参阅此处以获取更完整的示例.它用于将http重定向到https,但核心思想与Always On请求相同.该示例是一个xdt转换,因此它看起来与'直接'配置略有不同.实际上,您可能会考虑使用此类xdt而不是污染您的web.config.


Meg*_*ez7 4

最后我找到了有效的规则

<rule name="AlwaysOn agent requests without any redirections" stopProcessing="true">
  <match url="^$"/>
  <conditions>
    <add input="{HTTP_USER_AGENT}" pattern="^AlwaysOn$" />
  </conditions>
  <action type="None" />
</rule>
Run Code Online (Sandbox Code Playgroud)

我把它作为第一条规则。然后遵循其他规则,例如“天蓝色域到自定义域重定向”和“HTTP 到 HTTPS”。大卫的回答很有帮助,但解决了一些不同的问题。