Como fazer o HAProxy reescrever para um back-end diferente quando o primeiro está faltando no arquivo? O que eu preciso é errorloc
apenas fazer uma reescrita em vez de redirecionar, para que o cliente não esteja ciente do redirecionamento.
Desenvolvemos um aplicativo com o NginX em mente, que era o proxy reverso do balanceamento de carga e o servidor da web para arquivos estáticos. O aplicativo é baseado na estrutura Opa , que requer sessões persistentes baseadas em cookies - suportadas pelo NginX e pelo HAproxy. O recurso do aplicativo com o qual temos problemas é a geração dinâmica de conteúdo. Ele gera imagens sob demanda, mas após a geração é salvo em disco e pode ser acessado estaticamente com caminho determinístico.
O problema foi facilmente resolvido com o NginX - ele tenta ler o arquivo local e usar o back-end com balanceamento de carga somente se o arquivo estiver ausente (ainda não gerado):
server {
server_name wkaliszu.pl;
location /thumb {
root /path_on_disk/to_cached_content;
expires 7d;
# try to access already generated content
try_files $uri @wkaliszu;
}
location / {
# reverse proxy to the application
[...]
}
location @wkaliszu {
# reverse proxy to the application
[...]
}
}
O servidor foi migrado e agora usa o HAPproxy para balanceamento de carga, que não é servidor da Web e não suporta esse recurso. Agora, a geração dinâmica de software é realizada sempre que o cliente tenta acessar o recurso, o que é muito mais lento e desperdiça recursos. Seria bom se ele pudesse usar o próximo back-end se o primeiro (servidor web de cache simples para arquivos estáticos) falhar com o erro 404, mas não consigo encontrar uma maneira de fazê-lo de maneira simples. Redirecionar /thumb
para o NginX, que tenta ler o arquivo estático e reescreve novamente no HAproxy com o novo cabeçalho HTTP, vem à minha mente, mas gostaria de encontrar algo melhor.