我在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。
答案 0 :(得分:1)
好的,我发现webSocketURL()
可以接受一个论点。
var isSerure = location.protocol === "https:";
var wsUrl = jsRoutes.controllers.MyController.myMethod().webSocketURL(isSecure);
这解决了我的问题。我不知道它在哪里被记录,但它确实有效。