3

2つのWebSocketサーバーが両方とも80と443とは異なるポートで実行されています。これらの2つのサーバーは、ポート80と443のみが開いているファイアウォールの背後で実行されています。

WebSocket Server A:800 |
                       |-----|FireWall:80 & 443|-----> INTERNET
WebSocket Server B:801 |

私が探しているのは、クライアントがポートを知らなくても、80や443ではなく他のポートのファイアウォールを開かなくてもWebSocketサーバーに接続できる方法です。

そのため、ファイアウォールとWebSocketサーバー間の中間サーバー(またはプロキシサーバー)は、クライアントがwww.mywebsite.com/aポート80または443(ファイアウォールを通過するため)で要求したときに、中間サーバーがクライアントをWebSocketサーバーに接続するように構成できると考えていました。 A.クライアントがwww.mywebsite.com/bポート80または443で要求すると、中間サーバーはクライアントをWebSocketサーバーに接続します。B。これは可能ですか?もしそうなら、この機能が実装されていることを知っているかもしれないサーバーはありますか?

別の注意点として(おそらくそれほど違いはありませんが)、TCPホールパンチと上記で説明したアプローチの違いは何でしょうか?

4

2 に答える 2

3

これは「WebSocketリバースプロキシ」と呼ばれます。ファイアウォールとWebSocketサーバーの間に別の論理ノードまたは物理ノードが必要になります。同じシステムで3つのノードすべてを実行している可能性があるため、「論理的」と言います。

このスペースは急速に変化しており、ソリューションはかなり未成熟です。おそらくあなたのケースに最適なオプションは、WebSocketリバースプロキシにHAProxyを使用することです。詳細については、「WebSocketリバースプロキシ」を検索してください。この記事は少し古いですが、オプションの合理的な概要を説明する必要があります。

更新:昨日NginxにWebSocketプロキシサポートが導入されたようです:プレスリリース例を使用してコミット

于 2013-02-18T16:55:40.457 に答える
1

彼の回答で提供されたリンク@kanakaのおかげで、URIに基づいてリクエストをリダイレクトするようにHAProxyを構成することができました。だからこれは私がやったことです:

makeHAProxyを作成すると、の下にhaproxyが見つかりますusr/local/sbin。スクリプトは-f、構成ファイルのフラグを使用して実行されます。調べて、単純に/etc/何も持っていない場合は、構成を貼り付けてください。ここでは、バージョン1.5の構成ファイルについて、使用できるすべてのパラメーターとともに説明します。これは私のファイルがどのように見えるかです:haproxy.cfgmkdir -p /etc/haproxyvi /etc/haproxy.cfghaproxy.cfg

global
    log  127.0.0.1 local0
    log  127.0.0.1  local1 notice
    maxconn  4096
    uid  99
    gid  99
    daemon

defaults
    log global
    mode  http
    option  httplog
    option  dontlognull
    retries  3
    option  redispatch
    option  http-server-close
    maxconn  2000
    contimeout  5000
    clitimeout  50000
    srvtimeout  50000

frontend public
    bind *:80
    acl is_websocket1 path_beg -i /a # if the path starts with /a
    acl is_websocket2 path_beg -i /b # if the path starts with /b
    use_backend ws1 if is_websocket1
    use_backend ws2 if is_websocket2
    default_backend www

backend www
    timeout server 30s
    server www1 127.0.0.1:8001 # the port we have our webserver running on

backend ws1
    timeout server 600s
    server ws1 127.0.0.1:800 # the port we have our websocket server 1 running on

backend ws2
    timeout server 600s
    server ws2 127.0.0.1:801 # the port we have our websocket server 2 running on
于 2013-02-20T08:31:53.133 に答える