NginxでのWebソケットリバースプロキシのサポート

Socket.IOまたはFayeをWebSocketsで使用し、同時にNginxでリバースプロキシを使用する場合、NginxでWebSocketをサポートする問題が発生します。 それは単に存在しません-WebSocketはHTTP 1.1を使用しますが、NginxはHTTP 1.0のみを正しくプロキシできます。



どうする



バイパスを試みることができます-HAProxyを使用してTCP接続をプロキシするか、ロングポーリングを使用します。

ただし、nginxでtcp_proxyモジュールを実装する非公式のパッチを使用して、NGINXでリバースプロキシを実装する方法があります。



tcp_proxyモジュールを使用してnginxをコンパイルする



...一般的には、次のようになります。



export NGINX_VERSION=1.0.4

curl -O nginx.org/download/nginx-$NGINX_VERSION.tar.gz

git clone github.com/yaoweibin/nginx_tcp_proxy_module.git

tar -xvzf nginx-$NGINX_VERSION.tar.gz

cd nginx-$NGINX_VERSION

patch -p1 < ../nginx_tcp_proxy_module/tcp.patch

./configure --add-module=../nginx_tcp_proxy_module/

sudo make && make install









このコードは、ビルドされたツールがインストールされており、nginxのすべての依存関係が満たされているという事実に基づいています。 例えば



sudo apt-get install curl build-essential git-core

sudo apt-get build-dep nginx









ubuntu-serverの所有者にとっては、make installの代わりに意味があり、checkinstallを実行してnginxをパッケージとしてインストールし、さらにQ&Aで説明されているように、ログと構成への追加モジュールとパスに必要なオプションを追加します。



プロキシ構成



ロードバランシングを使用してポート80をバックエンドのポート8001、8002、8003、8004(たとえば、fayeまたはsocket.ioモジュールを備えたnode.jsサーバー)に転送する場合の単純な仮想ホストを作成しましょう。



そして、ローカルホストの9000ポートで、プロキシのステータスに関するデバッグ情報を表示します。



tcp {

upstream websockets {

## node processes

server 127.0.0.1:8001;

server 127.0.0.1:8002;

server 127.0.0.1:8003;

server 127.0.0.1:8004;

check interval=3000 rise=2 fall=5 timeout=1000;

}

server {

listen 0.0.0.0:80;

server_name ;

tcp_nodelay on;

proxy_pass websockets;

}

}



http {

## status check page for websockets

server {

listen 9000;



location /websocket_status {

check_status;

}

}

}









バックエンドを実行することで、楽しい写真を観察できます。



画像



複数のバックエンドを実装する場合、クライアントが常に同じバックエンド(たとえば、node.jsサーバー)に接続するという保証がないことを理解する必要があります。したがって、クラスター内のセッションを管理する正しい方法(たとえば、redisを使用)を検討する必要があります。



頑張って



PS。 Johnathan Leppertの記事に基づく



All Articles