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プロトコル
フレーム図
            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構成
    
    
        
        
            
            
        
        
            
        
        
            
        
        
            
            
        
        
            
            
            
        
    
    

    リファレンス
  • Websocketプロトコルの学習、調査、
  • の実現
  • Nginx WebSocket Proxying