Ausführen eines Websocket-Servers und eines http-Servers auf demselben Server

8

Ich verwende nginx, um eine Instanz einer PHP-Anwendung bereitzustellen, und führe gleichzeitig eine Ratchet-App aus, um eine Websocket-Verbindung abzuhören. Das Problem ist, dass beide Instanzen denselben Port verwenden (80).

Wie richte ich den Server so ein, dass ich beide bedienen kann?

Bearbeiten: Ich bin gerade zurückgekommen, um zu sehen, dass die Frage mehrmals abgelehnt wurde. Verständlicherweise habe ich die Frage nicht wirklich klar gestellt. Ich entschuldige mich dafür. Ich habe jedoch meine Due Diligence durchgeführt. Ich werde versuchen zu klären, was ich gefragt habe. Möglicherweise habe ich einige Aspekte des Websocket-Protokolls falsch verstanden. In diesem Fall korrigieren Sie mich bitte:

Ich weiß genau, dass es nur einen Prozess geben kann, der einen bestimmten Port abhört. Ich habe tatsächlich ein Problem und die ganze Websocket-Sache. Soweit ich weiß, beginnt eine Websocket-Anfrage mit einem HTTP-Handshake, nach dem es einen Mechanismus gibt um diese Sitzung auf den spezifischen Port zu aktualisieren.

Nach dem, was ich gelesen habe, scheint dieser Upgrade-Mechanismus vom Webserver verwaltet zu werden. Wie konfiguriere ich nginx für diesen Prozess?

Alles in allem ist das einzige, was mir Sorgen macht, wenn der Websocket-Server auf einem anderen Port als 80 ausgeführt wird, die Möglichkeit, dass der Port blockiert wird. Ist diese Sorge unbegründet? Irgendwelche Ratschläge, wie ich das einrichten soll?

hndr
quelle
that_guy - bitte überprüfen Sie serverfault.com/help/how-to-ask - stellen Sie sicher, dass Sie Ihre Due Diligence durchführen, bevor Sie Beiträge veröffentlichen. Während wir Menschen mögen, die Fragen stellen, möchten wir auch, dass Menschen ihre Hausaufgaben machen.
ETL

Antworten:

16

Eine schrecklich geschriebene Frage, aber der Begriff, den ich suchte, war Reverse Proxy.

Ebenso wie nginx unterschiedliche Anforderungen basierend auf dem Pfad oder dem Hostnamen an mehrere Instanzen der Webanwendung weiterleiten kann, kann es auch so konfiguriert werden, dass die Anforderung an eine Websocket-Serverinstanz "weitergeleitet" wird. z.B:

location /socket {
    proxy_pass http://websocket;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

upstream websocket{
    server localhost:8000;
}

map $http_upgrade $connection_upgrade {
    default Upgrade;
    '' close;
}

HTTP-Anforderungen an http://hostnamewerden auf der üblichen HTML-Seite zugestellt, während die Websocket-Verbindung wss://hostname/socketan an die Websocket-Instanz auf demselben Server weitergeleitet wird, der Port 8000 überwacht.

hndr
quelle
Riesige Hilfe !! Thanxx
gunjot singh
Eine weitere nützliche Optionen innerhalb dieser Stelle blockieren würde proxy_read_timeoutund proxy_write_timeouttrennt bei Inaktivität zu verhindern.
Vi.
Das Problem wurde nicht behoben. Hilfe benötigt!
Nɪsʜᴀɴᴛʜ
2

Auf einem Server können nicht zwei verschiedene Softwareprogramme denselben Port / dieselbe IP-Adresse überwachen. Wie würde der Datenverkehr andernfalls an die Anwendung XYZ weitergeleitet, wenn mehrere Anwendungen an denselben Port gebunden werden könnten?

Weitere Informationen zu Ports finden Sie unter Port (Computernetzwerk).

Was Sie tun müssen, ist eine der folgenden Optionen:

  1. Verwenden Sie einen anderen Port für eine der beiden Anwendungen und lassen Sie dies über Ihre Firewall zu.
  2. Verwenden Sie zwei verschiedene IP-Adressen - und binden Sie jede Anwendung an ihre jeweiligen IP-Adressen.

Ihre Firewall muss nur entsprechend Ihrer Einrichtung konfiguriert werden.

ETL
quelle
Können Sie weitere Informationen bereitstellen? Würde das ein Problem mit der Firewall verursachen? Ist es nicht einer der Vorteile von Websocket, dies zu vermeiden?
hndr
5
Die gemeinsame Nutzung des Ports ist möglich, da Sie sowohl den HTTP-Server als auch den Websocket-Server in einem Prozess haben können.
Pacerier
0

Sie haben zwei Möglichkeiten:

  1. Binden Sie einen an einen anderen Port (z. B. 8000).
  2. (wenn möglich) Fügen Sie dem Server eine zusätzliche IP-Adresse hinzu und binden Sie den Webserver und den Websocket-Server an verschiedene IP-Adressen
Teun Vink
quelle