Sie don Überspringen Sie den Proxy als solchen nicht. Der Proxy stellt die Verbindung für Sie her. Siehe unten stehenden Auszug aus https://www.nginx.com/blog/websocket-nginx/
A WebSocket Anwendung hält ein lang andauernde Verbindung offen zwischen dem Client und dem Server, um die Entwicklung von Echtzeit-Anwendungen zu erleichtern. Der HTTP-Aktualisierungsmechanismus zum Aktualisieren der Verbindung von HTTP zu WebSocket verwendet die Header Upgrade und Connection. Es gibt einige Probleme, die ein Reverse-Proxy-Server bei der Unterstützung von WebSocket bewältigen muss. Eine davon ist, dass WebSocket ein Hop-by-Hop-Protokoll ist. Wenn ein Proxy-Server eine Upgrade-Anforderung von einem Client abfängt, muss er eine eigene Upgrade-Anforderung an den Backend-Server senden, einschließlich der entsprechenden Header. Da WebSocket-Verbindungen im Gegensatz zu den typischen kurzlebigen Verbindungen, die von HTTP verwendet werden, langlebig sind, muss der Reverse-Proxy auch zulassen, dass diese Verbindungen geöffnet bleiben, anstatt sie zu schließen, da sie scheinbar inaktiv sind.
Bearbeiten-1 - Anschlüsse Vergleiche zwischen Nginx und direkter NodeJS
So endlich habe ich einige Tests sicher zu machen. mit http://IP/ in zwei Browserfenster gestartet eine socket.io App auf 3000 und nginx auf 80 zu übermitteln, um die Socket.io
Nginx
Wenn ich die App zugreifen zu beantragen, sind die offene Verbindung, wie unten
$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 4443 vagrant 11u IPv6 25730 0t0 TCP *:3000 (LISTEN)
node 4443 vagrant 13u IPv6 28591 0t0 TCP localhost:3000->localhost:42698 (ESTABLISHED)
node 4443 vagrant 14u IPv6 28626 0t0 TCP localhost:3000->localhost:42712 (ESTABLISHED)
nginx 5144 vagrant 6u IPv4 28402 0t0 TCP *:http (LISTEN)
nginx 5144 vagrant 13u IPv4 28589 0t0 TCP 192.168.33.100:http->192.168.33.1:64799 (ESTABLISHED)
nginx 5144 vagrant 14u IPv4 28590 0t0 TCP localhost:42698->localhost:3000 (ESTABLISHED)
nginx 5144 vagrant 15u IPv4 28625 0t0 TCP localhost:42712->localhost:3000 (ESTABLISHED)
nginx 5144 vagrant 16u IPv4 28624 0t0 TCP 192.168.33.100:http->192.168.33.1:64826 (ESTABLISHED)
Jetzt, nachdem sowohl die Tabs schließen
$ lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 4443 vagrant 11u IPv6 25730 0t0 TCP *:3000 (LISTEN)
nginx 5144 vagrant 6u IPv4 28402 0t0 TCP *:http (LISTEN)
NodeJS
Öffnen von zwei Browser-Registerkarten mit direkter Verbindung zu NodeJS http://<IP>:3000
. Dann sind die Ergebnisse, wie unten
$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 4443 vagrant 11u IPv6 25730 0t0 TCP *:3000 (LISTEN)
node 4443 vagrant 13u IPv6 30014 0t0 TCP 192.168.33.100:3000->192.168.33.1:52550 (ESTABLISHED)
node 4443 vagrant 14u IPv6 30015 0t0 TCP 192.168.33.100:3000->192.168.33.1:52551 (ESTABLISHED)
node 4443 vagrant 15u IPv6 30016 0t0 TCP 192.168.33.100:3000->192.168.33.1:52552 (ESTABLISHED)
node 4443 vagrant 16u IPv6 30017 0t0 TCP 192.168.33.100:3000->192.168.33.1:52553 (ESTABLISHED)
node 4443 vagrant 17u IPv6 30018 0t0 TCP 192.168.33.100:3000->192.168.33.1:52554 (ESTABLISHED)
node 4443 vagrant 18u IPv6 30020 0t0 TCP 192.168.33.100:3000->192.168.33.1:52556 (ESTABLISHED)
node 4443 vagrant 19u IPv6 30024 0t0 TCP 192.168.33.100:3000->192.168.33.1:52578 (ESTABLISHED)
nginx 5144 vagrant 6u IPv4 28402 0t0 TCP *:http (LISTEN)
Diese etwas seltsam aussehen, aber das ist, weil die verwendeten Verbindungen, die Website zu öffnen, auch am Leben für einige Sekunden gehalten. So nach dem Warten auf irgendwann
$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 4443 vagrant 11u IPv6 25730 0t0 TCP *:3000 (LISTEN)
node 4443 vagrant 18u IPv6 30020 0t0 TCP 192.168.33.100:3000->192.168.33.1:52556 (ESTABLISHED)
node 4443 vagrant 19u IPv6 30024 0t0 TCP 192.168.33.100:3000->192.168.33.1:52578 (ESTABLISHED)
nginx 5144 vagrant 6u IPv4 28402 0t0 TCP *:http (LISTEN)
Wie Sie nicht sehen können.der Verbindungen wird immer höher sein, wenn Sie Nginx verwenden
danke ~ aber die Websocket-Tunnel durch den Proxy zu Client. Es bedeutet, dass der Nginx TCP öffnen sollte, um den Client und den WS-Server zu verbinden. Wenn ich 1000 Websocket-Verbindung habe, erzeugt das Nginx 1000 TCP. und wenn wir 2 ws server haben, bedeutet das, dass ein ws server 500 tcp erzeugt ??? Ist es richtig ? –
Ich nehme ja an, aber ich habe jetzt kein sehr tiefes Verständnis dafür, um ein klares Ja zu sagen. –
@MarkLin, siehe meine Bearbeitung –