Reescrita de URL HAProxy no erro 404


9

Como fazer o HAProxy reescrever para um back-end diferente quando o primeiro está faltando no arquivo? O que eu preciso é errorlocapenas 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 /thumbpara 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.


Qual pilha de aplicativos você utiliza servidores de aplicativos de back-end?
jeffatrackaid

Respostas:


1

Os back-end do HAProxy estão ativos ou inativos (ou a caminho de ativos / inativos).

Existem várias maneiras de verificar a integridade de um back-end, mas não conheço nenhuma que forneça rastreamento baseado em solicitação. Quando uma solicitação falhar, esse back-end será marcado como inativo ou falhará (a caminho de ser considerado inativo).

Essa é uma lógica muito diferente da configuração do Nginx, que estava encaminhando solicitações por solicitação.

Vejo algumas opções aqui:

  • Nginx como proxy de cache
  • Use servidores de aplicativos para conteúdo estático
  • Use uma CDN

Cache de Proxy

No HAProxy, você usaria ACLs para rotear solicitações de conteúdo estático para um back-end específico. Esses nós de back-end executariam o nginx com um proxy de cache. Se o nginx tivesse o arquivo em cache, ele seria útil. Caso contrário, chamaria o seu back-end.

Use servidores de aplicativos para conteúdo estático

Se os servidores de aplicativos forem eficientes na veiculação de conteúdo estático, talvez você não precise dividir a solicitação em haproxy. Basta enviar todas as solicitações para os back-end do seu aplicativo. Crie lógica neles para veicular conteúdo estático, se disponível, e se não enviar a solicitação ao back-end.

Opção CDN

Se você pode usar um domínio dedicado para o conteúdo estático, poderá usar uma CDN. Na CDN, você apenas aponta a URL de origem para os nós do aplicativo. Você pode controlar o cache no nível da CDN. Isso é semelhante ao armazenamento em cache do Nginx acima, exceto pelo provedor da CDN.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.