A nbsrv(<back-end>)
busca do estado interno pode ser usada para avalie se o servidor MySQL está ativo, assim como você está usando agora para contar os servidores disponíveis no grupo principal.
A solução mais simples é criar um back end falso sem servidores.
backend dead-end
Em seguida, na configuração front-end, defina o seguinte antes de qualquer outra declaração use_backend
:
use_backend dead-end if { nbsrv(mysql) lt 1 }
É isso.
Ou, se você gosta da sua lógica do outro jeito ...
use_backend dead-end unless { nbsrv(mysql) gt 0 }
Se o número de servidores íntegros no back-end chamou "mysql" (note que esta string "mysql" não é intrinsecamente significativa - está combinando com a string "mysql" que está aparecendo na linha listen mysql
) é menor que 1 (ou, a menos que seja maior que 0), o back-end "sem saída" será usado. E, como esse back-end não tem nenhum servidor configurado, ele também não possui servidores íntegros , portanto, o arquivo de erro 503 seria exibido.
Isso parece fornecer exatamente o comportamento desejado: se o banco de dados estiver inoperante, faça de conta que os servidores da Web estão inativos.
Você pode configurar um errorfile
503 distinto dentro desse backend se desejar que a página de erro seja diferente daquela no front-end, que ainda seria usada se o banco de dados estivesse ativo, mas os servidores web estivessem para baixo.
Você também pode escrever as use_backend
e nbsrv()
como duas linhas, com uma ACL nomeada, mas acho que elas são confusas para muitas pessoas, que tentam exigir uma ACL para corresponder a mais condições adicionando linhas para ele - o que, é claro, faz o oposto - requer essencialmente que elas correspondam a condições menor , já que a correspondência de qualquer linha única faz com que a ACL seja avaliada como verdadeira. E uma ACL anônima só faz muito mais sentido para mim, sempre que a condição é testada em um único lugar.
De uma perspectiva de segurança, você pode considerar se realmente queria definir mysql
como listen
- parece que deve ser backend
, a menos que você realmente queira que essa máquina aceite conexões em porta 3306 e retransmita então para o servidor MySQL real.