0

Nginx 1.3.7とPlayを使用しています!Framework 2.1と、HTTP、HTTPS、およびWebSocket接続をPlayにプロキシする必要があります。nginxを介したサーバー。

私はnginxトランクのWebSocketプロキシ機能に依存しており、「upgrade」ヘッダーと「connection」ヘッダーを設定して、WebSocket接続のヘッダーを正しく転送しました(http://nginx.org/en/docs/http/websocket)。 html):

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

 location / {
   proxy_pass  http://my-backend;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection $connection_upgrade;
 }

Play!WebSocketの初期化中に正しいヘッダーを取得します。Playのrequest.headersオブジェクト!nginxを使用しない場合とまったく同じように見えます。

Map(
  Cache-Control -> Buffer(no-cache),
  Connection -> Buffer(Upgrade),
  Host -> Buffer(my-backend),
  Origin -> Buffer(https://my-host:8443),
  Pragma -> Buffer(no-cache),
  Sec-WebSocket-Extensions -> Buffer(x-webkit-deflate-frame),
  Sec-WebSocket-Key -> Buffer(nk5JVO4I5QRMQnSxAJaRCg==),
  Sec-WebSocket-Version -> Buffer(13),
  Upgrade -> Buffer(websocket)
)

問題は次のとおりです。リクエストがnginxからのものである場合、Playからのレスポンスです。空であり、ヘッダーは含まれていません。プロトコルバージョン: "HTTP /1.10"のみが含まれています。Playからの応答を正しく!そのようになります:

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Sec-WebSocket-Accept: YHVb1xdsVqaObgQxqksBQPhdkvc=
Upgrade: websocket
4

1 に答える 1

1

はい、解決策はもちろん正しいバージョンのnginxを使用することです。この機能はnginx1.3.13でのみ導入されたため、1.3.7は「接続:アップグレード」フラグの転送に失敗します。

最新の開発/トランクバージョンを使用することをお勧めします。

于 2013-04-08T07:21:49.103 に答える