web-dev-qa-db-ja.com

Nginx 499がクライアントにWebソケットハンドシェイクを返さない場合のトラブルシューティング方法は?

Kubernetesクラスターでは、Nginxサーバーがリバースプロキシ/ TLS終了ソリューションのように動作しており、Webソケット(SockJS/Stomp)を利用したいくつかの機能を持つバックエンドのTomcatアプリケーションにリクエストをプロキシパスします。残念ながら、Webソケットハンドシェイクは正常に完了しません。

クライアント側のブラウザで、コンソールに次のメッセージが表示されます:Opening Web Socket... websockets-0.1.min.js:116 Whoops! Lost connection to https://myhost/stomp

HTTP 504 Gateway Timeoutが後に続きます。

websockets-0.1.min.js:72 WebSocket connection to 
'wss://myhost/stomp/673/ugvpxc1lwmfjnung/websocket' 
failed: Error during WebSocket handshake: Unexpected response code: 504 

-

Tomcat側では、アクセスログに次のエントリがあります。

0:0:0:0:0:0:0:1,2017-06-01 16:53:36.915 
+0000,4,GET,HTTP/1.1,"/stomp/673/ugvpxc1lwmfjnung/websocket",101,
-,O,-,blablablabla,-,-,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)
 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 
Safari/537.36",-,,-,-,-,-,-,- 

一方、nginxアクセスログには、対応するエントリがあります。

10.2.89.0 - - [01/Jun/2017:16:54:41 +0000] "GET 
/stomp/673/ugvpxc1lwmfjnung/websocket HTTP/1.1" 499 0 "-" "Mozilla/5.0 
(Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/58.0.3029.110 Safari/537.36" "24.5.136.13" 

さて、私が調べたところによると、クライアントが接続を閉じると499コードが表示されますが、クライアントに応答が返されるまでに時間がかかるのはなぜでしょうか。これらの2つのエントリのタイムスタンプによると、これらの2つのイベントは約1分で区切られています。何が起きてる?

ここに私のnginx.confからのスニペット、この時点での支援は深く感謝されます:

server { 
    listen 9965 default_server ssl; 
    listen [::]:9965 default_server ssl; 

    resolver 127.0.0.1; 
    server_name _; 

    ssl_certificate /etc/ssl/certs/certificate.pem; 
    ssl_certificate_key /etc/ssl/certs/key.pem; 
    ssl_dhparam /etc/ssl/certs/dhparam.pem; 

    client_max_body_size 2000M; 

    location / { 
        proxy_read_timeout 900; 

        proxy_pass_header Server; 

        proxy_http_version 1.1; 
        proxy_set_header Host $Host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header Upgrade 'websocket'; 
        proxy_set_header Connection "upgrade"; 

        proxy_pass http://localhost:15010; 
    } 

-

これをさらにトラブルシューティングする方法に関するアイデアはありますか?

2
theMarceloR

修繕。クラシックAWS ELBをALBに置き換える必要がありました。

1
theMarceloR