在PlayFramework中使用带反向代理的webSocketURL()

时间:2014-04-25 02:56:12

标签: playframework websocket playframework-2.2

我在nginx后面使用Play Framework。

nginx配置文件基本上看起来像http://www.playframework.com/documentation/2.2.x/HTTPServer中找到的那个, 但是编辑了location指令,如下所示,以启用websocket。

location / {
  proxy_buffering off;
  proxy_set_header   X-Real-IP $remote_addr;
  proxy_set_header   X-Scheme $scheme;
  proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header   Host $http_host;

  proxy_http_version 1.1;
  proxy_pass  http://playframework;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";

}

在以下JavaScirpt代码中,

var ws = new WebSocket(jsRoutes.controllers.MyController().MyMethod().webSocketURL())

webSocketURL()返回以" ws://"开头的网址。 由于nginx以静默方式将HTTP转换为HTTPS,因此无法建立websocket连接。

它适用于没有反向代理的本地环境。

解决此问题的最佳方法是什么? 我目前的解决方法是禁用SSL以访问http。

1 个答案:

答案 0 :(得分:1)

好的,我发现webSocketURL()可以接受一个论点。

var isSerure = location.protocol === "https:";
var wsUrl = jsRoutes.controllers.MyController.myMethod().webSocketURL(isSecure);

这解决了我的问题。我不知道它在哪里被记录,但它确实有效。