Измените http-статус 503 на 200 при обслуживании app_offline.htm для определенного URL-адреса
Файл app_offline.htm, который обслуживает ASP.NET, возвращает статус http 503. Это правильное поведение для большинства ситуаций. Однако в сценарии, в котором запрашивается конкретный URL-адрес (например, https://www.mywebsite.com/monitor), я хотел бы изменить возвращаемый статус http на 200, в то же время возвращая статус http 503 во всех других ситуациях. Возможно ли это?
Причина, по которой я хочу это сделать - всякий раз, когда мы проводим плановое сопровождение на нашем веб-сайте, мы используем файл app_offline.htm, но мы не хотим, чтобы наша служба мониторинга работоспособности (Pingdom.com) сообщала о простоях во время нашей запланированной техническое обслуживание.
Я предполагаю, что это должно быть на уровне IIS, потому что app_offline.htm получает очень ранний запрос в цикле обработки запроса.
Ответы
Ответ 1
Обратите внимание, что App_Offline
используется только для части ASP.NET, это не имеет никакого отношения к сайту IIS. Все запросы, отличные от nonASP.NET, например,.htm-, будут проходить через обычный конвейер IIS.
При этом a HTTP 503
является недоступной ошибкой службы. App_Offline.htm
частично отключить сайт, это нормально и правильно, что все запросы ASP.NET получают ответ 503
, когда сайт находится в автономном режиме.
Обход этого с помощью HttpModule или любого другого кода в конвейере ASP.NET не является допустимым решением.
Поскольку вы уже создаете/копируете App_Offline.htm
в свой корень IIS во время обслуживания, я предлагаю добавить maintenance.htm
в качестве документа по умолчанию для вашей папки /monitor
или вашего сайта IIS и создать/скопировать maintenance.htm
в нем во время обслуживания: тогда страница по умолчанию будет доступна независимо от того, что сайт ASP.NET отключен или нет.
Если ваш зонд вызывает http://servername/monitor/
uri без какой-либо страницы, он будет работать.
Вам просто нужно удалить его - например, вы удалите свой App_Offline
- после обслуживания.
Ответ 2
Насколько я знаю, логика app_offline.htm обрабатывается внутри модуля ASP.NET 2.0, но до начала загрузки приложения (что, конечно же, является идеей app_offline.htm * g *).
Я предлагаю:
- Добавьте виртуальный каталог с именем
monitor
в корень вашего (отключенного) веб-сайта и назначьте его в какую-то читаемую IIS папку.
- Не превращайте виртуальный каталог в приложение, поэтому ASP.NET должен не выходить из этой папки.
- Положить, например. копию вашего файла
app_offline.htm
, переименованного в default.htm
(или все, что находится в списке имен файлов по умолчанию) в эту папку.
Таким образом, IIS должен обслуживать html файл с ответом 200 при доступе к https://www.mywebsite.com/monitor
.
А, и, чтобы удостовериться в предупреждении Adilson о поисковых системах, просто добавьте <meta name="robots" content="noindex">
к вашему файлу в случае, если сайт доступен поисковыми системами.
Ответ 3
Если вы используете IIS 7 и интегрированный конвейер, вы все равно можете создать HttpModule для запросов, которые не являются частью конвейера ASP.NET, запросы i/e.Htm.
http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/
Жизненный цикл ASP.NET IIS 7
http://learn.iis.net/page.aspx/121/iis-7-modules-overview/
Ответ 4
Вы можете использовать перенаправление http на уровне IIS.
Ответ 5
Вы можете обработать метод Global.asax Application_Error, идентифицировать свой URL-адрес, идентифицировать свою ошибку, перенаправить на свою страницу
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ctx = HttpContext.Current
dim myerror = ctx.Error
If HttpContext.Current.Request.Path = "mypath" Then
HttpContext.Current.Response.Redirect("~/mydestpage.aspx")
End If
End Sub
Это будет возвращено сначала 302 для вашего предыдущего запроса, а затем перенаправляется на страницу с 200...
Ответ 6
Эй, мужчина. Будьте осторожны, когда делаете это! Ответ 200 может сделать вашу страницу ошибки проиндексированной Google и другими поисковыми системами.
Если вы все же решите сделать это, я думаю, вам следует создать HttpModule и поместить его в верхнюю часть стека модулей. Этот модуль должен проверить, существует ли файл App_offline.html, если да, то вы проверяете, пришел ли запрос от Site Monitor. В этом случае вы можете ответить с 200, иначе код ответа должен быть 503, чтобы избежать плохой индексации сайта.
Важно: пул приложений вашего сайта должен находиться в Интегрированном режиме.