Manter a conexão SSL ativa entre o proxy reverso e o servidor back-end
Eu tenho um servidor back-end (Apache) que está muito longe da maioria dos nossos usuários, então nossa ideia é implementar um proxy reverso mais próximo que funcionará como um cache.
À primeira vista, funcionou como um encanto. 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 handshaking 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?
Eu até tentei aprender mais sobre websockets, mas todas as implementações que encontrei foram para responder a uma solicitação específica, 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!
Respostas
No nginx, você só pode especificar keepaliveuma conexão upstream se a conexão for definida em um upstreambloco. 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 para os servidores upstream por processo de trabalho .
Para usar o upstream, você especifica seu nome em seu, em proxy_pass
vez de no 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 para 1.1 (porque o padrão absurdamente é 1.0) e limpar o cabeçalho de conexão:
proxy_http_version 1.1;
proxy_set_header Connection "";
Lembre-se de que também há um que keepalive_timeout
você pode definir no upstream
qual talvez precise 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 de 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.