1

ポート 80 で Web サーバーと Websocket サーバーを実行しようとしています。これを行うには、HAProxy を使用して、この構成を使用して接続をルーティングしています。

global
    maxconn     4096 # Total Max Connections. This is dependent on ulimit
    nbproc      1
    ulimit-n        65536

defaults
    mode      http

frontend all 0.0.0.0:80
    timeout client 86400000
    acl is_websocket hdr_beg(host) -i live
    acl is_websocket hdr(Upgrade) -i WebSocket

    default_backend www_backend

    use_backend production_socket_backend if is_websocket

backend www_backend

    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout server 30000
    timeout connect 4000
    server appserver 127.0.0.1:81 weight 1 maxconn 1024

backend production_socket_backend
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout queue 5000
    timeout server 86400000
    timeout connect 86400000
    server appserver 127.0.0.1:8083 weight 1 maxconn 1024

Google Chrome を使用してテストしています。一部のマシンでは問題なく接続できますが、他のマシンでは 502 エラーが発生し、em-websocket が次のエラーをログに記録します。

#<EventMachine::WebSocket::HandshakeError: Connection and Upgrade headers required>

プロキシの実行を停止し、ポート 80 で Web ソケット サーバーを実行すると、問題がプロキシにあることがわかります。アップグレード パケットが有効な HTTP ではないため、Websocket を処理するときに HAProxy を http モードで実行してはならないことをどこかで読みましたが、これは私が見ている問題と関係があるのでしょうか?

4

2 に答える 2

1

今のところポート 443 を使用しています。将来的には、この問題を回避するために別のサーバーで Web ソケットを実行する予定です。

于 2012-07-02T00:36:16.837 に答える
0

はい、tcp モードに変更してみてください。

ヘッダー チェックを使用した転送が機能するかどうかはわかりません。専用ポートにソケットがあります。

listen websockets
    mode tcp
    bind *:8000
    balance source
    timeout queue 5000
    timeout server 86400000
    timeout connect 86400000
    server thin_web1 x.x.x.x:8000

また、同じサーバーへのソケット接続を維持するために複数のサーバーがある場合は、ソースのバランスが重要です。

于 2012-06-12T13:21:22.240 に答える