Mantendo a conexão SSL ativa entre o proxy reverso e o servidor backend

Mantendo a conexão SSL ativa entre o proxy reverso e o servidor backend

Tenho um servidor back-end (Apache) que está muito distante da maioria dos nossos usuários, então nossa ideia é implementar um proxy reverso mais próximo que atue como cache.

À primeira vista, funcionou perfeitamente. Os arquivos estáticos armazenados em cache são servidos extremamente rápido, mas para qualquer outra coisa, o proxy reverso (NGINX) precisa se conectar ao servidor back-end, o que leva algum tempo para o handshake SSL, tornando essas primeiras solicitações lentas.

Eu estava procurando informações sobre isso, mas não consegui encontrar uma maneira de manter essa conexão. Existe uma maneira de fazer isso?

Até tentei aprender mais sobre websockets, mas todas as implementações que encontrei foram para atender uma solicitação específica, e não para manter a conexão intermediando os dois servidores web (NGINX no proxy reverso e Apache no back-end).

Algum de vocês tem alguma ideia ou dica sobre o que estudar/usar/pesquisar para conseguir isso?

Muito obrigado antecipadamente!

Responder1

No nginx você só pode especificarkeepalivepara uma conexão upstream se a conexão for definida em umupstreambloquear. Por exemplo:

upstream backend {
    server private-api.example.com:443;

    keepalive 32;
}

Aqui, keepaliveespecifica o número máximo de conexões abertas simultâneas com o(s) servidor(es) upstream porprocesso de trabalho.

Para usar o upstream, você especifica seu nome em seu proxy_passendereço de back-end.

Por exemplo, se você usou anteriormente:

     proxy_pass https://private-api.example.com:443;

Você mudaria para:

     proxy_pass https://backend;

Substitua literalmente o nome do upstream pelo definido server.

Você também deve definir a versão HTTP como 1.1 (porque o padrão é absurdamente 1.0) e limpar o cabeçalho Connection:

    proxy_http_version 1.1;
    proxy_set_header Connection "";

Lembre-se de que também existe uma keepalive_timeoutdefinição upstreamque você pode precisar ajustar. Por padrão, são 60 segundos, portanto, se uma conexão ficar inativa por tanto tempo, ela será fechada, mesmo que haja menos keepaliveconexões abertas. O servidor back-end terá seu próprio tempo limite de manutenção de atividade, que você também precisará ajustar separadamente.

informação relacionada