2016-07-27 16 views
2

So habe ich auf diesem ganzen Server-Setup gelesen, in dem Nginx vor Nodejs als Reverse-Proxy verwendet wird, so dass es den statischen Inhalt dient, während es Knoten ermöglicht, die dynamischen Sachen zu tun. Meine Frage ist, warum jemand die nginx Front verwenden möchte, um Proxy zum websocket umzukehren? Wenn nginx den statischen Inhalt (HTML, CSS, JS, Medien usw.) bereitstellt, kann die JS-Datei, die geliefert wird, nicht einfach direkt mit dem Server über die IP-Adresse und den Port, den der Websocket in Nodejs abgehört, verbinden Server? Warum durch Nginx gehen, um sich mit dem WebSocket auf dem Server zu verbinden? Oder verstehe ich diese Situation nicht klar? Vielen Dank!Warum Nginx als WebSocket-Proxy verwenden?

+0

Sie erhalten Nginx Sicherheitsmodell, zum einen. Alle Einschränkungen der IP-Adresse/Referrer, die Sie auf der Hauptseite festgelegt haben, gelten auch für den Websocket. –

+0

Sie sollten dies lesen ... http: //stackoverflow.com/questions/224664/difference-between-proxy-server-und-reverse-proxy-server – JClarke

+0

@Jclarke tut mir leid für die Verwendung des Begriffs "Proxy" Ich habe meine Frage bearbeitet den Begriff "Reverse-Proxy" zu verwenden. Aber meine Frage steht immer noch .. – TheMAAAN

Antwort

0

Eine WebSocket-Anwendung hält eine lang andauernde Verbindung zwischen dem Client und dem Server offen und erleichtert so die Entwicklung von Echtzeitanwendungen. 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.

NGINX unterstützt WebSocket, indem ein Tunnel zwischen einem Client und einem Backend-Server eingerichtet wird. Für NGINX die Upgrade-Anforderung vom Client zum Backend-Server, der Upgrade-und Verbindungs ​​Header gesetzt explizit wie in diesem Beispiel, müssen senden:

location /wsapp/ { 
    proxy_pass http://wsbackend; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
} 

Sobald dies geschehen ist, NGINX behandelt dies als WebSocket-Verbindung .

Für weitere Informationen besuchen Sie bitte: - https://www.nginx.com/blog/websocket-nginx/ https://blog.martinfjordvald.com/2013/02/websockets-in-nginx/

Hope this helfen würde!

+1

Sie haben das 'Wie' erklärt, aber ich möchte das 'Warum' wissen. Warum sollten Sie Nginx als Reverseproxy verwenden, wenn Sie DIREKT auf die IP-Adresse und den Port des Nodejs-Servers verweisen können, ohne Nginx durchlaufen zu müssen? Daher werden Sie den gesamten statischen Inhalt mit Nginx btu bedienen, wenn Ihr statischer Inhalt (z. B. js-Dateien) mit dem Knoten kommunizieren muss, sondern einfach eine Websocket-Verbindung DIREKT damit eingerichtet wird. Verstehst du meinen Standpunkt? – TheMAAAN

+0

ok Ein Grund für die Verwendung von Nginx ist Proxy-Pass Sie können dies verwenden, um Ihre APIs zu schützen, können Sie die API an die Front-End eine andere exponieren und anzeigen und dann durch Proxy-Pass Sie die API-Namen, die Sie so übergeben das wird deinen Code sichern. Zweitens können Sie einfach die gzip-Komprimierung und -Minfizierung mit nginx in einem Schritt ausführen und der Rang Ihrer Website ist hoch. Sie können Ihre Bilder und Dateien auch mit nginx indizieren. Sie können nginx auch als Streaming-Server verwenden. –

+0

Wenn Sie also direkt eine Verbindung herstellen würden, würden Sie diese Funktionen nicht bekommen (außer Sie haben sie natürlich selbst programmiert). Was ist, wenn sich das Nginx auf demselben Rechner befindet wie der nodejs-Prozess? Wären Sie immer noch in der Lage, die Funktionen zu nutzen, die Sie aufgelistet haben? – TheMAAAN

Verwandte Themen