如何在 IIS 中创建多个自定义 503 页面
Posted
技术标签:
【中文标题】如何在 IIS 中创建多个自定义 503 页面【英文标题】:how to create multiple custom 503 pages in IIS 【发布时间】:2021-01-06 03:56:45 【问题描述】:一个临时的向下页面(例如更新你的服务器软件)应该有一个理想的响应代码 503,但你可以逃脱 307,但在任何情况下都不应该是 200(因为谷歌会索引这个,它会影响你搜索引擎优化)
在 IIS 重写规则中,您有 3 个选项用于实现重定向到向下页面、重写、重定向和自定义响应:
<action type="Rewrite" url="/site1.html" />
<action type="Redirect" url="/site1.html" redirectType="Temporary" />
<action type="CustomResponse" statusCode="503" subStatusCode="0" statusReason="Site Unavailable" statusDescription="Down for maintenance" />
问题是如果你想要一个 503 响应,你不能重定向到所需的页面。
我们有 3 个使用 Episerver CMS 的不同品牌的网站。
当我们进行维护或只是想关闭网站时,我们有一个 azure web 应用程序(又名 iis),它有 3 个保持页面,每个页面一个。
所以我们的网站有 3 个页面:
/site1.html
/site2.html
/site3.html
我们使用 Azure 流量管理器指向实时站点或站点关闭页面,我们目前有重定向哪些工作,但错误地给出 200 响应:
<rewrite>
<rules>
<rule name="site1" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="HTTP_HOST" pattern="mysite" />
</conditions>
<action type="Rewrite" url="/site1.html" />
</rule>
<rule name="site2" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="HTTP_HOST" pattern="myothersite" />
</conditions>
<action type="Rewrite" url="/site2.html" />
</rule>
etc.
</rules>
</rewrite>
为了解决此问题(为每个站点提供不同的站点向下页面,并以 503 响应),有哪些选项?
我猜它可以设置类似 3 个不同的命名虚拟主机,每个主机除了自定义 503 错误页面 + 捕获所有 CustomResponse 操作之外什么都没有?有这样的配置的例子吗?
需要明确的是,我们的应用程序可能运行正常,但我们可能希望使用流量管理器将公众指向在维护期间具有 503 响应的“关闭”页面。提供向下页面的网站与服务于该网站/应用程序本身的网站无关。
【问题讨论】:
【参考方案1】:遗憾的是,正如 Microsoft document 所描述的 - 无法自定义 503 HTTP 错误。
甚至使用rewrite让它显示自定义的503页面,实际上请求进入IIS并重写成功,然后响应客户端。整个过程很完美,你的网络服务不会停止。
IIS 服务器在尝试将传入请求交给应用程序时检测到该错误。应用程序所做的一切都在其应用程序池中执行。重写和自定义错误页面等模块都是以这种方式执行的。 503 由 http.sys 处理,您根本无法创建自定义错误页面,因为它在进入 iis 之前已被处理。所以,既希望web服务器停止报503,也希望服务器能够处理请求,显示你定义的页面。这两个冲突。
如果您的应用程序是asp.net,还有另一种自定义503的方法。您可以在站点的根目录中放置一个名为“app_offline.htm”的文本文件,对该网站的所有请求都将重定向到该app_offline.htm文件.基本上,如果您需要使整个 ASP.NET 站点脱机,您可以在该文件中放置一些不错的消息。然后,对该网站中某个 URL、任何 URL 的任何新请求都将重定向到该文件,从而允许您对站点进行维护、升级或其他任何操作。不过,这并不是真正的重定向。 ASP.NET 实质上会关闭站点,将其从服务器上卸载,并停止处理对该站点的任何请求。也就是说,在您删除 app_offline.htm 文件之前,一切都会照常进行,并且您的 ASP.NET 站点将重新加载并开始为请求提供服务。
【讨论】:
以上是关于如何在 IIS 中创建多个自定义 503 页面的主要内容,如果未能解决你的问题,请参考以下文章