У нас есть сервер IIS, на котором размещены сотни отдельных веб-приложений, и физический сервер баз данных, на котором размещены эти приложения, будет переведен в автономный режим на техническое обслуживание на короткий период (мы ожидаем, что это займет менее 15 минут).
В течение этого периода мы хотим перенаправить весь трафик, поступающий с любого веб-сайта, на страницу «В настоящее время мы проводим техническое обслуживание».
Я понимаю, что могу сделать это, зайдя в каждое веб-приложение и настроив правило перезаписи IIS, которое отправляет пользователя на другую страницу для всех запросов в этом приложении. Но это заняло бы больше времени, чем обслуживание базы данных!
Я пробовал три вещи, ни одна из которых не сработала:
Глобальное правило перезаписи IIS
Я искал простой способ применения правила ко всем сайтам одним махом, а затем смог "отменить" это правило в один такой же безболезненный шаг. Пока что ни одна из моих попыток не сработала. Я попытался поместить это правило перезаписи в мой глобальный файл web.config по адресу W: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="redirect all requests" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Redirect" url="http://www.somedomain.com/maintenance" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Это не сработало. Мы запускаем 64-разрядную версию .NET 4.0 в IIS, но «на всякий случай» я поместил одно и то же в глобальные файлы web.config 32-разрядной и 2.0-версии, и все еще без изменений.
App_Offline.htm "специальный файл"
Еще одно предложение, которое я видел, - это «специальный» файл app_offline.htm , но мы возвращаемся к той же самой проблеме: для развертывания этого файла в корне приложения всех наших приложений потребовалось больше времени, чем для его обслуживания.
Сайт "Мы офлайн" в IIS
Все наши сайты настроены в IIS с одним IP. Это работает для нас даже без SNA, потому что все наши приложения имеют один SSL-сертификат (это UCC). Одна вещь, которая пришла мне в голову, состояла в том, что, возможно, я мог бы настроить сайт в IIS, который соответствовал бы всему трафику с IP-адресом, который мы используем, и не указывал значение заголовка узла. Была надежда на то, что я смогу придать ему более высокий «приоритет» и что он при запуске будет сопоставлять весь трафик с этим IP, прежде чем любой из других сайтов сможет его найти. Я мог бы настроить этот сайт так, чтобы он обслуживал одну и ту же страницу для всех запросов, независимо от URL запроса.
Запустите этот сайт, когда проходите техническое обслуживание, и остановите его, когда закончите.
Но я также не смог заставить это работать, поскольку IIS, кажется, сопоставляет HTTP-запрос с более конкретным сайтом, прежде чем менее конкретным. Таким образом, пропуская значение заголовка узла для этого сайта «сообщите пользователям, что мы не в сети», оно не будет сопоставлено, если в запросе не будет значения заголовка узла, соответствующего другому сайту. Это возвращает нас к той же проблеме, когда приходится вручную переходить к каждому веб-приложению и выполнять действия, чтобы отключить его, а затем снова включить, когда мы закончим техническое обслуживание.
Есть ли простой способ сделать это? Казалось бы, конечно, мы не первые, кто столкнулся с этой проблемой.
-Josh