Organizando um failover no IIS para quando tudo der errado

Tenho trabalhado em um site que está caindo muito. MUITO. E estamos tentando consertar isso há dias (a situação normal – funciona bem em dev boxes e test boxes, mas as live box são todas como “wtf?”). Tem sido muito, muito estressante tanto para minha equipe de suporte quanto para nosso cliente (que é grande o suficiente para ser um nome familiar).

Devido ao feriado bancário que se aproxima (na Inglaterra e, mais importante, no País de Gales), precisamos manter o site ativo enquanto estivermos fora, então sugeri (e o cliente concordou) ter uma página inicial HTML estática derivada do site ao vivo Saída de PHP. É apenas a página inicial que está sendo atingida por conteúdo não autorizado e / ou uma tarefa invasora, portanto, o resto do site precisa ser acessado pelo roteamento normal. Para tornar as coisas mais complicadas, nosso cliente está em uma pilha completa do Windows, enquanto as habilidades dentro da empresa estão muito mais sintonizadas com Linux com Apache ou Nginx, então eu tive que fazer alguns ajustes na reescrita do IIS.

Aqui está o que eu terminei. É muito elegante, considerando o que temos que fazer, e funciona muito bem …

<rule name="Failover" stopProcessing="true">
<match url="^$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{DOCUMENT_ROOT}/failover.html" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/failover.html" />
</rule>

O que isso faz? Bem, se você está acessando a raiz do site e atualmente há um arquivo chamado failover.htmlna raiz também, ele o usará em sua página inicial. Se não estiver lá, é business as usual. Isso vai além das outras regras que passam o controle para o nosso código.