首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Apache代理WebSocket来播放-框架

如何通过Apache代理WebSocket来播放-框架
EN

Stack Overflow用户
提问于 2016-06-09 09:12:42
回答 1查看 310关注 0票数 0

我被我的Apache-config困住了,很感激在这方面的任何帮助。

配置如下:

  • Apache将所有http流量重定向到https。
  • 它代理https://domain.tld/app1http://domain.tld:9000/app1之类的请求(play应用程序在app-context /app*/.)

这在下面的Apache中运行得很好:

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName domain.tld
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    Redirect permanent / https://domain.tld/
    Redirect permanent / https://domain.tld/
</VirtualHost>

<VirtualHost _default_:443>
#ssl-config here
<Proxy http://localhost:9000/*>
      Order deny,allow
      Allow from all
</Proxy>
ProxyPass         /app1  http://domain.tld:9000/app1
ProxyPassReverse  /app1  http://domain.tld:9000/app1
ProxyPassReverse  /app1  http://domain.tld/app1
</VirtualHost>

问题是,那个游戏应用程序得到了一个WebSocket。这不适用于上面的设置。所以我在播放页上读到了这些东西。这导致我安装了mod_proxy_wstunnel。我还在配置中添加了以下行,但没有成功:

代码语言:javascript
复制
ProxyPass         /app1/timerWs ws://domain.tld:9000/app1/timerWs
ProxyPassReverse  /app1/timerWs ws://domain.tld:9000/app1/timerWs

当我试图连接到https://domain.tld/rlc/timerWs时,我得到了一个500个内部服务器错误,但是在apache日志中没有新的、更具体的错误。

如何将Apache配置为正确地将WebSocket请求代理到我的play应用程序?

我的播放应用程序没有https适配器。所有的https内容都是由Apache代理完成的。

Play-应用程序在2.5版上。Apache在2.4.7上。

非常感谢你的帮助。托拜厄斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 11:10:22

我现在已经解决了这个问题。诀窍是不仅在Apache上设置https,而且在Play应用服务器Jetty上设置https。要做到这一点,请参阅此链接。这将导致另一个ProxyPass地址(注意wss而不是ws):

代码语言:javascript
复制
ProxyPass         /app1/timerWs wss://domain.tld:9000/app1/timerWs
ProxyPassReverse  /app1/timerWs wss://domain.tld:9000/app1/timerWs

我还必须更改Javascript中的WebSocket地址,以便让浏览器知道在哪里可以找到WebSocket-后端。

代码语言:javascript
复制
$(function() {
    var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket
    var dateSocket = new WS("wss://domain.tld/rlc/timerWs")
    var receiveEvent = function(event) {
        $("#timer").html(event.data);
    }
    dateSocket.onmessage = receiveEvent
});

在此之前,我使用了一个Play路由@routes.Application.timerWs().webSocketURL(request)来处理WebSocket。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37721609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档