Nginx+Jetty+SpringMvc構成WebSocketサポート
4887 ワード
WebSocketバックグラウンド
Websocketは、rfc 6455を参照して、html 5によって提案されたプロトコル仕様である.
Websocketは、握手のメカニズムによって、クライアント(ブラウザ)とサーバ(webserver)の間にtcpのような接続を確立することができ、c-s間の通信を容易にする通信の規範を約束している.Websocketが登場する前に、webインタラクションは一般的にhttpプロトコルに基づく短い接続または長い接続である.
WebSocketは、クライアントとサービス側とのリアルタイム通信を解決するための技術である.Websocketプロトコルは本質的にtcpベースのプロトコルであり、HTTP/HTTPSプロトコルを介して特殊なhttpリクエストを開始して握手した後、データを交換するためのTCP接続を作成し、その後、サービス側とクライアントはこのTCP接続を通じてリアルタイム通信を行う.
WebSocketプロトコル
フレーム図
ソフトウェアバージョン
ソフトウェア
バージョン#バージョン#
Nginx
1.10.3
Jetty
9.3.16.v20170120
Spring
4.3.6.RELEASE
Nginx構成
ポイントは3行です
Jetty構成コピー 作成 である.
SpringMvc構成
リファレンス Websocketプロトコルの学習、調査、 の実現 Nginx WebSocket Proxying
Websocketは、rfc 6455を参照して、html 5によって提案されたプロトコル仕様である.
Websocketは、握手のメカニズムによって、クライアント(ブラウザ)とサーバ(webserver)の間にtcpのような接続を確立することができ、c-s間の通信を容易にする通信の規範を約束している.Websocketが登場する前に、webインタラクションは一般的にhttpプロトコルに基づく短い接続または長い接続である.
WebSocketは、クライアントとサービス側とのリアルタイム通信を解決するための技術である.Websocketプロトコルは本質的にtcpベースのプロトコルであり、HTTP/HTTPSプロトコルを介して特殊なhttpリクエストを開始して握手した後、データを交換するためのTCP接続を作成し、その後、サービス側とクライアントはこのTCP接続を通じてリアルタイム通信を行う.
WebSocketプロトコル
フレーム図
jetty
nginx --> jetty
jetty
ws
およびwss
プロトコルをサポートソフトウェアバージョン
ソフトウェア
バージョン#バージョン#
Nginx
1.10.3
Jetty
9.3.16.v20170120
Spring
4.3.6.RELEASE
Nginx構成
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream backend {
sticky;
server localhost:6565;
server localhost:6666;
}
server {
listen 0.0.0.0:80;
server_name foo.bar.com;
server_tokens off;
location /services/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
include proxy.conf;
}
error_page 497 https://$host$uri?$args;
}
server {
listen 0.0.0.0:443 ssl http2;
server_name foo.bar.com;
server_tokens off;
ssl on;
ssl_certificate ssl/foo.bar.com.crt;
ssl_certificate_key ssl/foo.bar.com.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
ssl_verify_client off;
location /services/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
include proxy.conf;
}
error_page 497 https://$host$uri?$args;
}
ポイントは3行です
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
Jetty構成
JETTY_HOME/modules/websocket.mod
~JETTY_BASE/modules/websocket.mod
JETTY_HOME/start.d/websocket.ini
内容は以下の--module=websocket
SpringMvc構成
リファレンス