Nginxを使用してPHPアプリケーションのインスタンスを提供すると同時に、Ratchetアプリを実行してWebSocket接続をリッスンしています。問題は、これらのインスタンスの両方が同じポート(80)。
両方を提供できるようにサーバーを設定するにはどうすればよいですか?
編集:質問が何度も反対票を投じられたのを見に戻ってきました、当然のことながら、私は本当に明確な方法で質問をしませんでした。ごめんなさい。私はデューデリジェンスをしましたが。私が何を求めていたのかを明確にしてみます。websocketプロトコルのいくつかの側面を誤解している可能性があります。その場合は修正してください。
特定のポートをリッスンしているプロセスは1つだけであることをよく知っています。実際に問題があるのは、WebSocket全体です。WebSocketリクエストはHTTPハンドシェイクで始まり、その後メカニズムが発生します。そのセッションを特定のポートに「アップグレード」します。
私が読んだことから、このアップグレードメカニズムはWebサーバーによって処理されているようです。では、nginxを構成してこのプロセスを処理するにはどうすればよいですか?
全体として、80以外のポートでwebsocketサーバーを実行する際に気になるのは、ポートがブロックされている可能性です。この懸念は根拠がないのですか?これをどのように設定すべきかについてのアドバイスはありますか?
ひどく書かれた質問ですが、私が探していた用語はリバースプロキシでした。
基本的に、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://hostname
へのHTTPリクエストは通常のhtmlページで処理されますが、wss://hostname/socket
へのWebSocket接続はポート8000でリッスンしている同じサーバーのWebSocketインスタンスに転送されます。
サーバーは、同じポート/ IPアドレスでリッスンする2つの異なるソフトウェアを持つことはできません。そうでない場合、複数のアプリケーションが同じポートにバインドされている可能性がある場合、トラフィックはどのようにアプリケーションXYZにルーティングされますか?
Port(computer networking) からポートの詳細を学ぶことができます
次のオプションのいずれかを実行する必要があります。
ファイアウォールは、設定内容に従って構成する必要があります。
次の2つのオプションがあります。