Preciso retornar um código de status 503 de um dos meus sites enquanto estiver em manutenção, da maneira SE_firendly. Parece que não consigo descobrir como fazer isso sem chamar scripts externos, o que prefiro evitar.
Existe uma diretiva apache que me permita retornar um código de status HTTP arbitrário sem recorrer a hacks, como invocar um script php que define o cabeçalho do status?
apache-2.2
http
seo
dan mackinlay
fonte
fonte
Respostas:
Isso atende a cada solicitação uma página de retenção estática junto com o status 503.
RedirectMatch é usado para negar a própria página de espera que, de outra forma, criaria um loop infinito.
O mod_header é usado para definir um cabeçalho Retry-After para que você possa informar ao Google / outros bots etc. que você deve fazer backup após 18000 segundos (5 horas) neste exemplo. Você pode
sudo ap2enmod header
ativar o mod_header (necessário para a diretiva Header).fonte
RedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg)
.Experimentar
Em http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect :
Nota adicional: Isso exibirá o ErrorDocument padrão / configurado para o erro 503.
fonte
Redirect 503 /
parece funcionar.Para tornar seu modo de manutenção mais flexível, configure 503 quando existir um arquivo especial, ala:
NOTA: A localização de DOCUMENT_ROOT pode diferir entre httpd 2.2 e 2.4
Dessa forma, tudo o que você precisa fazer é "tocar em /caminho/para/docroot/.maintenance" e seu site começará a retornar 503 instantaneamente. Em seguida, para facilitar tudo, crie uma página de erro html bem formatada e personalizada e adicione-a ao arquivo de configuração do servidor apache correto:
E para pontos de bônus, se você tiver vários servidores da Web, localize .maintenance em um sistema de arquivos compartilhado ou para obter ainda mais pontos de bônus:
pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"
A vantagem de criar o arquivo no modo de manutenção é que ele funciona quando o aplicativo não é, é rápido e simples e é mais fácil para um proxy de cache de front-end, porque você pode lidar com todos os 503 de back-end de uma só vez.
Fontes:
fonte