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