我想通过Apache设置一个简单的WebSocket连接 .
我正在运行两个Web服务器,一个是Apache,另一个是simple PHP WebSocket server来处理套接字连接,这是在RackSpace上托管的Ubuntu框上运行的 .
我已经做了很多研究,但仍未找到一个很好的例子,它显示了在远程主机上以任何语言(在本例中为PHP)设置WebSocket服务器的基本配置,我见过的每个例子都在使用'localhost'在我看来是没用的 .
所以Apache的root是/ var / www / html(默认)并且正在侦听端口8080,所以例如下面的目的(www.mydomain.com:8080)是 index.html
页面的源代码 .
<html>
<head>
<script>
document.addEventListener("DOMContentLoaded", init);
function init(){
var socket = new WebSocket("ws://www.mydomain.com:8080/sockets");
setInterval(timer.sockstate, 3000, socket);
socket.addEventListener('open', sock.open);
socket.addEventListener('message', sock.msg);
socket.addEventListener('error', sock.err);
socket.addEventListener('close', sock.close);
}
var timer = {
"sockstate": function(o){
switch(o.readyState){
case 0:
console.log('CONNECTING...');
break;
case 1:
console.log('OPEN...');
break;
case 2:
console.log('CLOSING...');
break;
case 3:
console.log('CLOSED...');
break;
}
}
};
var sock = {
"open": function(e){
console.log(e);
},
"msg": function(e){
console.log(e);
},
"err": function(e){
console.log(e);
},
"close": function(e){
console.log(e);
}
};
</script>
</head>
<body></body>
</html>
现在PHP服务器正在端口9000上监听127.0.0.1这里是source code,它通过cmd行启动正常 php -q /var/www/html/sockets/server.php
最后我的配置文件在Apache中
<VirtualHost *:8080>
ServerName www.mydomain.com
DocumentRoot /var/www/html
ProxyPass "/sockets/" "http://127.0.0.1:9000/"
ProxyPassReverse "/sockets/" "http://127.0.0.1:9000/"
</VirtualHost>
我'm positive it'不是网络问题我确保允许两个端口(8080/9000),并确保加载mod_proxy和mod_proxy_wstunnel .
Question: 那我在Apache Config中做错了什么?
1 回答
我刚刚在自己的服务器上完成了这个设置,所以我希望这对某人有帮助 . 我的配置与你的配置非常相似 . 这就是我要改变的
Javascript
VirtualHost
因为Apache转发WS流量,所以websocket服务器不需要向公众公开 . 您可以将端口9000保持关闭状态 .
我也启用了
mod_proxy_http
,但我不需要't know whether it' .如果没有发生重定向,请查看Apache错误日志 . 你已经提到了其中的几件事,但要确保:
已加载
mod_proxy
和mod_proxy_wstunnel
在更改模块或VirtualHost配置后重启Apache
WS服务器正在运行并正在侦听端口9000
ProxyPass
在正确的VirtualHost中