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 especificarkeepalive
para uma conexão upstream se a conexão for definida em umupstream
bloquear. Por exemplo:
upstream backend {
server private-api.example.com:443;
keepalive 32;
}
Aqui, keepalive
especifica 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_pass
endereç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_timeout
definição upstream
que 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 keepalive
conexões abertas. O servidor back-end terá seu próprio tempo limite de manutenção de atividade, que você também precisará ajustar separadamente.