2013-05-09 16 views
15

私はWebSocket + HTTPトラフィックをnginxでプロキシしようとしています。nginxとproxying WebSockets

私はこれを読んでいる:接続が1分を閉じ

1):私は2つの問題を持っている

http { 
    include  mime.types; 
    default_type application/octet-stream; 

    sendfile  on; 
    keepalive_timeout 65; 

    gzip on; 

    map $http_upgrade $connection_upgrade { 
     default upgrade; 
     ''  close; 
    } 

    server { 
     listen 80; 
     server_name ourapp.com; 

     location/{ 
     proxy_pass http://127.0.0.1:100; 
     proxy_http_version 1.1; 
     proxy_redirect off; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Upgrade   $http_upgrade; 
     proxy_set_header Connection  $connection_upgrade; 
     } 
    } 
} 

http://nginx.org/en/docs/http/websocket.html

私の設定は次のようになります。

2)同じポートでHTTPとWSの両方を実行したい。私はこれを取得し、アプリケーションがローカルで正常に動作しますが、私は同じポートでHTTPおよびWSを入れて、このnginxのプロキシを設定しようとした場合:

「WS://ourapp.com/ws」へのWebSocket接続に失敗しました:予期しない応答コード:200

アプリケーション(HTTP)の読み込みはうまくいくようですが、WebSocketの接続は失敗します。

答えて

12

問題1: 1分に1回死んでいる接続に関しては、それはnginxタイムアウト変数であることに気付きました。私はしばらくのうちにpingするか、タイムアウトを増やすかのどちらかにすることができます。私は0に設定する必要があるかどうか分からないので、1分に1回pingして90秒にタイムアウトを設定することにしました。 (keepalive_timeout

問題2: CloudFlare CDNを使用したときに接続の問題が発生しました。 CloudFlareアクセラレーションを無効にすると、問題が解決しました。

代わりにサブドメインを作成し、それを「非アクセラレーション」として設定してWSに使用することもできます。