Websocketサーバーとhttpサーバーを同じサーバーで実行する


8

nginxを使用してPHPアプリケーションのインスタンスを提供すると同時に、Ratchetアプリを実行してWebSocket接続をリッスンしています。問題は、これらのインスタンスの両方が同じポート(80)を使用していることです。

両方を提供できるようにサーバーを設定するにはどうすればよいですか?

編集:質問が何度も反対票を投じられたのを見に戻ってきました、当然のことながら、私は本当に明確な方法で質問をしませんでした。ごめんなさい。私はデューデリジェンスをしましたが。私が何を求めていたのかを明確にしようと思います。websocketプロトコルのいくつかの側面を誤解している可能性があります。その場合は修正してください。

特定のポートをリッスンしているプロセスは1つしか存在できないことをよく知っています。実際に問題があるのは、WebSocket全体です。WebSocketリクエストはHTTPハンドシェイクで始まり、その後メカニズムが発生します。そのセッションを特定のポートに「アップグレード」します。

私が読んだことから、このアップグレードメカニズムはWebサーバーによって処理されているようです。では、このプロセスを処理するようにnginxを構成するにはどうすればよいですか?

全体として、80以外のポートでwebsocketサーバーを実行する際に気になるのは、ポートがブロックされている可能性です。この懸念は根拠がないのですか?これをどのように設定すべきかについてのアドバイスはありますか?


that_guy -してくださいレビューserverfault.com/help/how-to-askは -投稿する前に、あなたのデューデリジェンスを行うようにしてください。私たちは質問をする人が好きですが、宿題をすることも好きです。
ETL

回答:


16

ひどく書かれた質問ですが、私が探していた用語はリバースプロキシでした。

基本的に、nginxがパスまたはホスト名に基づいて異なるリクエストをWebアプリの複数のインスタンスに転送する方法と同様に、リクエストをWebSocketサーバーインスタンスに「転送」するように構成することもできます。例えば:

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リクエストhttp://hostnameは通常のhtmlページで処理され、へのWebsocket接続wss://hostname/socketは、ポート8000​​でリッスンしている同じサーバーのWebソケットインスタンスに転送されます。


大きな助け!! Thanxx
gunjot sing

その場所のブロック内の別の有用なオプションは以下のようになりますproxy_read_timeoutし、proxy_write_timeout非アクティブに切断を防ぐために。
Vi。

必要な問題のヘルプを修正しませんでした!
Nɪsʜᴀɴᴛʜ

2

サーバーは、同じポート/ IPアドレスでリッスンする2つの異なるソフトウェアを持つことはできません。そうでない場合、複数のアプリケーションが同じポートにバインドされている可能性がある場合、トラフィックはどのようにアプリケーションXYZにルーティングされますか?

ポート(コンピューターネットワーク)からポートの詳細を学ぶことができます。

次のオプションのいずれかを実行する必要があります。

  1. 2つのアプリケーションのいずれかに別のポートを使用し、ファイアウォールを通過できるようにします。
  2. 2つの異なるIPアドレスを使用し、各アプリケーションをそれぞれのIPアドレスにバインドします。

ファイアウォールは、設定内容に従って構成する必要があります。


詳細情報を提供できますか?ファイアウォールで問題が発生しますか?WebSocketの利点の1つはそれを回避することではないのですか?
hndr 2014

5
1つのプロセスでHTTPサーバーとWebsocketサーバーの両方を使用できるため、ポートを共有できます。
Pacerier 2015年

0

次の2つのオプションがあります。

  1. 1つを別のポートにバインドします(例:8000)
  2. (可能な場合)サーバーに追加のIPアドレスを追加し、WebサーバーとWebソケットサーバーを異なるIPにバインドします
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.