私は自分でNGINXを構築することにとても迷い、初めてですが、追加のレイヤーがなくても安全なWebSocketを有効にできるようにしたいと思っています。
WebSocketサーバー自体でSSLを有効にしたくはありませんが、代わりにNGINXを使用してSSLレイヤーを全体に追加したいと思います。
そこにあるすべてのウェブページは私がそれをすることができないと言っています、しかし私は私ができることを知っています!(私自身)私に方法を教えてくれる人に感謝します!
nginx がリリース 1.3.13 で Websockets をサポートするようになったことに注意してください。使用例:
location /websocket/ {
proxy_pass http://backend_host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
nginx の変更ログとWebSocket プロキシのドキュメントも確認できます。
Opsプログラマーの勇敢なグループが、新しいnginx_tcp_proxy_moduleをスパンキングするブランドで状況を解決したので、恐れることはありません。
2012年8月に書かれたので、将来からの場合は宿題をする必要があります。
CentOSを使用していると仮定します。
init.d/nginx
スクリプトを含む)yum install pcre pcre-devel openssl openssl-devel
およびNGINXを構築するために必要なその他のライブラリここでも、CentOSを想定しています。
cd /usr/local/
wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'
tar -xzvf nginx-1.2.1.tar.gz
cd nginx-1.2.1/
patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
./configure --add-module=/path/to/nginx_tcp_proxy_module --with-http_ssl_module
(必要に応じてモジュールを追加できます)make
make install
オプション:
sudo /sbin/chkconfig nginx on
それらを再利用したい場合は、最初に古い構成ファイルをコピーすることを忘れないでください。
重要:tcp {}
confの最高レベルでディレクティブを作成する必要があります。ディレクティブ内にないことを確認してください。http {}
以下の構成例は、単一のアップストリームWebSocketサーバーと、SSLと非SSLの両方の2つのプロキシを示しています。
tcp {
upstream websockets {
## webbit websocket server in background
server 127.0.0.1:5501;
## server 127.0.0.1:5502; ## add another server if you like!
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
server_name _;
listen 7070;
timeout 43200000;
websocket_connect_timeout 43200000;
proxy_connect_timeout 43200000;
so_keepalive on;
tcp_nodelay on;
websocket_pass websockets;
websocket_buffer 1k;
}
server {
server_name _;
listen 7080;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.key;
timeout 43200000;
websocket_connect_timeout 43200000;
proxy_connect_timeout 43200000;
so_keepalive on;
tcp_nodelay on;
websocket_pass websockets;
websocket_buffer 1k;
}
}
これは私のために働いた:
location / {
# redirect all HTTP traffic to localhost:8080
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Pankaj Malhotra による優れた簡潔な記事では、NGINX を使用してこれを行う方法が説明されており、ここから入手できます。
基本的な NGINX 構成を以下に再現します。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream appserver {
server 192.168.100.10:9222; # appserver_ip:ws_port
}
server {
listen 8888; // client_wss_port
ssl on;
ssl_certificate /path/to/crt;
ssl_certificate_key /path/to/key;
location / {
proxy_pass http://appserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}