Punho de tudo, deixe-me dizer que é muito difícil dar conselhos sem ver sua configuração real do VCL.
Para responder à sua pergunta atual
Você pode definir um host padrão no início de seu vcl_recv
, observe que seus back-ends devem ser configurados para responder a esse host exato
sub vcl_recv {
/* set a default host if no host is provided on the request or if it is empty */
if ( ! req.http.host
|| req.http.host == "") {
set req.http.host = "your.default.host.tld";
}
# ...
}
Acho que você não precisa mexer com IPs e req.http.host
, é melhor usar o curl para passar um cabeçalho de host para o verniz (algo como curl -H "Host: your.default.host.tld" http://XX.XX.XX.XXX/
)
Algumas sugestões gerais sobre o tema:
Adicione uma lógica de controle mal comportada ao seu VCL [1]
Você está configurando seu back-end corretamente?
Lembre-se de que o verniz usará back-end "padrão" (ou diretor), a menos que seja instruído a usar outro em sua lógica de VCl
Adicione análises de integridade e veja quais back-ins estão falhando
Use testes de saúde consistentes [2] e use o comando da linha de comando varnishadm debug.health
para ver os documentos para um melhor entendimento [3]
Adicione uma lógica de reinicialização ao seu erro de vlc
Algo parecido com isto
sub vcl_error {
# ...
/* Try to restart request in case of failure */
if (obj.status == 503 && req.restarts < 5) {
set obj.http.X-Restarts = req.restarts;
return(restart);
}
# Before any deliver
return (deliver);
}
Adicione a lógica de depuração à sua resposta sintética de erro de vlc
Lembre-se de que você pode adicionar cabeçalhos de depuração em vcl_fetch
passando o código de erro de backend à sua resposta de erro do verniz:
sub vcl_fetch {
# ...
set beresp.http.X-Debug-Backend-Code = beresp.status;
# ...
}
sub vcl_error {
# ...
synthetic {""
# Insert the following at the end of your current response
<p>Backend Status code was "} + obj.http.X-Debug-Backend-Code + {"</p>
</body>
</html>
"};
# ...
return (deliver);
}
[1] link
[2] link
[3] link