2015-03-27 3 views
6

Sto progettando un'applicazione che farà uso di WebSocket per informare rapidamente i visitatori quando si verificano cambiamenti. Sto progettando di eseguire il proxy delle connessioni con Nginx, in modo che possano condividere lo stesso indirizzo della porzione HTTP normale. Una cosa di cui mi preoccupo è l'esaurimento delle porte effimere. In passato, ho notato problemi quando il numero di connessioni tra Nginx e il backend Node supera 25000. La mia domanda è: la seguente configurazione aumenterebbe il limite a 100K?Proxying connessioni WebSocket ed esaurimento porta temporanea

upstream backends { 
    server 127.0.0.1:5000; 
    server 127.0.0.2:5000; 
    server 127.0.0.3:5000; 
    server 127.0.0.4:5000; 
} 

Il limite per i file aperti dovrà essere aumentato di conseguenza, ovviamente.

Supponendo che la tecnica funzioni, può essere utilizzata con server esterni? Quanto è difficile assegnare un intervallo di indirizzi IP a un'interfaccia? Il networking non è il mio forte ...

+0

Per un singolo server: porta combo, il limite teorico superiore delle connessioni dovrebbe essere il numero di possibili client-ip: combo porta-client, che è molto. Non dovresti mai nemmeno avvicinarti ad esaurire le tue porte effimere. O non capisco la domanda? – greim

+0

@greim - Penso che la domanda si riferisca alle porte effimere tra il proxy Nginx locale e il servizio websocket locale - quindi l'IP client è sempre lo stesso. Questo ti darebbe un limite superiore difficile di ~ 65K connessioni (qui si applicano le limitazioni del numero di porte) diviso per due (una porta per il client proxy e una per il servizio) ... ma questa è solo un'ipotesi, sto aspettando qualcuno più esperto a rispondere. – Myst

risposta

0

Si prega di provare proxy_bind. È

Rende le connessioni in uscita a un server proxy originato dall'indirizzo IP locale specificato da . Il valore del parametro può contenere le variabili (1.3.12).

Quindi, se il nostro server proxy nginx può avere più indirizzi IP, è possibile risolvere il problema. per esempio.

location/{ 
    ... 
    proxy_bind $picked_ip; 
    proxy_pass http://backends; 
} 

La variabile $picked_ip può essere calcolato un gestore di riscrittura che corre prima proxy_pass fa.