我被我的Apache-config困住了,很感激在这方面的任何帮助。
配置如下:
这在下面的Apache中运行得很好:
<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。我还在配置中添加了以下行,但没有成功:
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上。
非常感谢你的帮助。托拜厄斯
发布于 2016-06-11 11:10:22
我现在已经解决了这个问题。诀窍是不仅在Apache上设置https,而且在Play应用服务器Jetty上设置https。要做到这一点,请参阅此链接。这将导致另一个ProxyPass地址(注意wss而不是ws):
ProxyPass /app1/timerWs wss://domain.tld:9000/app1/timerWs
ProxyPassReverse /app1/timerWs wss://domain.tld:9000/app1/timerWs我还必须更改Javascript中的WebSocket地址,以便让浏览器知道在哪里可以找到WebSocket-后端。
$(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。
https://stackoverflow.com/questions/37721609
复制相似问题