Temos um servidor IIS que hospeda centenas de aplicativos da web separados, e o servidor de banco de dados físico que hospeda esses aplicativos será colocado off-line para manutenção por um breve período (esperamos que leve menos de 15 minutos) .
Durante esse período, queremos redirecionar TODO o tráfego que chega, para qualquer website, a uma página "estamos passando por manutenção".
Sei que posso fazer isso indo a todos os aplicativos da web e configurando uma regra de reconfiguração do IIS que envie o usuário para outra página para todas as solicitações nesse aplicativo. Mas, levaria mais tempo para fazer isso do que para fazer a manutenção do banco de dados!
Eu tentei três coisas, nenhuma delas funcionou:
Regra de Regravação Global do IIS
Estou procurando uma maneira simples de aplicar uma regra a todos sites, de uma só vez - e, em seguida, ser capaz de "desfazer" essa regra em uma etapa igualmente indolor. Até agora, nenhuma das minhas tentativas funcionou. Eu tentei colocar essa regra de reescrita no meu web.config global em 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>
Isso não funcionou. Estamos executando o .NET 4.0 de 64 bits no IIS, mas "apenas no caso" eu coloquei a mesma coisa nos arquivos web.config globais de 32 e 2.0, e ainda sem alterações.
App_Offline.htm "arquivo especial"
Uma outra sugestão que vi foi o app_offline.htm arquivo "especial" , mas estamos de volta a mesma questão de levar mais tempo para implantar este arquivo para a raiz do aplicativo de todos os nossos aplicativos do que para realmente fazer a manutenção.
"Estamos offline" Site no IIS
Todos os nossos sites são configurados no IIS com um único IP. Isso funciona para nós, mesmo sem SNA, porque todos os nossos aplicativos compartilham um único certificado SSL (é um UCC). Uma coisa que me ocorreu foi que talvez eu pudesse configurar um site no IIS que correspondesse a todo o tráfego para o IP que estamos usando, e não especificou um valor de cabeçalho de host. A esperança era que eu pudesse dar uma "precedência" mais alta e que, quando iniciada, correspondesse a todo o tráfego para aquele IP, antes que qualquer um dos outros sites tivesse uma chance de combinar. Eu poderia configurar esse site para atender a mesma página para todas as solicitações, independentemente do URL de solicitação.
Inicie o site em manutenção e pare quando terminar.
Mas também não consegui fazer isso funcionar, pois o IIS parece corresponder a uma solicitação HTTP para um site mais específico antes de ser menos específico. Assim, ao omitir um valor de cabeçalho de host para esse site "informe aos usuários que estamos off-line", ele não corresponderia a menos que a solicitação não tivesse um valor de cabeçalho de host que correspondesse a outro site. O que nos coloca de volta ao mesmo problema de ter que ir manualmente a cada aplicativo da Web e realizar uma ação para colocá-lo offline e, em seguida, colocá-lo novamente on-line quando terminarmos a manutenção
Existe uma maneira simples de conseguir isso? Parece que certamente não somos os primeiros a encontrar esse problema.
-Josh