Mantenere attiva la connessione SSL tra proxy inverso e server backend
Ho un server back-end (Apache) che è troppo lontano dalla maggior parte dei nostri utenti, quindi la nostra idea è di implementare un proxy inverso più vicino che funga da cache.
A prima vista ha funzionato come un fascino. I file statici memorizzati nella cache vengono serviti in modo estremamente veloce, ma per qualsiasi altra cosa, il proxy inverso (NGINX) deve connettersi al server back-end, che richiede un po 'di tempo per l'handshaking SSL, rendendo lente queste prime richieste.
Stavo cercando informazioni su questo ma non sono riuscito a trovare un modo per mantenere questa connessione. C'è un modo per farlo?
Ho anche provato a saperne di più sui websocket, ma tutte le implementazioni che ho trovato erano per rispondere a una richiesta specifica, non per mantenere la connessione che fa da intermediario ai due web server (NGINX al proxy inverso e Apache al back-end).
Qualcuno di voi ha qualche idea o suggerimento su cosa studiare / usare / cercare per ottenere ciò?
Grazie mille in anticipo!
Risposte
In nginx è possibile specificare solo keepaliveper una connessione a monte se la connessione è definita in un upstreamblocco. Per esempio:
upstream backend {
server private-api.example.com:443;
keepalive 32;
}
Qui, keepalive
specifica il numero massimo di connessioni aperte simultanee ai server upstream per processo di lavoro .
Per utilizzare l'upstream, specificane il nome nel tuo indirizzo proxy_pass
invece che nel backend.
Ad esempio, se in precedenza hai utilizzato:
proxy_pass https://private-api.example.com:443;
Lo cambierai in:
proxy_pass https://backend;
Sostituisci letteralmente il nome dell'upstream per il definito server
.
È inoltre necessario impostare la versione HTTP su 1.1 (perché è piuttosto assurdamente predefinito su 1.0) e cancellare l'intestazione Connection:
proxy_http_version 1.1;
proxy_set_header Connection "";
Tieni presente che c'è anche un keepalive_timeout
che puoi definire in upstream
cui potresti dover sintonizzare. Per impostazione predefinita è di 60 secondi, quindi se una connessione è inattiva per così tanto tempo verrà chiusa, anche se sono presenti meno keepalive
connessioni aperte. Il server di backend avrà il proprio timeout keepalive che dovresti anche regolare separatamente.