2016-10-22 84 views
0

我有一个运行在我的服务器上的FeathersJS构建的节点应用程序,我希望它在apache后面,我试图在apache中使用mod_proxy模块来完成此操作,但我遇到了问题。如何通过Apache配置ProxyPass websocket请求节点应用程序?

这是我的Apache mod_proxy的部分是什么样子:

<IfModule mod_proxy.c> 
    ProxyRequests off 

    ProxyPass /ws/api/phone/ ws://localhost:3030 
    ProxyPassReverse /ws/api/phone/ ws://localhost:3030 

    ProxyPass /api/phone/ http://localhost:3030/ 
    ProxyPassReverse /api/phone/ http://localhost:3030/ 
</IfModule> 

我已经把我的客户端套接字配置如下:

var socket = io('/', { path: '/ws/api/phone/socket.io/', transports: ['websocket']}); 

当我尝试打开使用的应用程序,我得到以下错误:

WebSocket connection to 'ws://local.mysite.com/ws/api/phone/socket.io/?EIO=3&transport=websocket' failed: Error during WebSocket handshake: Unexpected response code: 500 

我启用了Apache日志记录,这就是错误的样子:

127.0.0.1 - - [22/Oct/2016:14:48:32 -0400] "GET /ws/api/phone/socket.io/?EIO=3&transport=websocket HTTP/1.1" 500 540 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36" 

如果我运行通过本地主机的一切,它的作品完美,没有任何问题,所以这显然是与ProxyPass伪问题。任何帮助将不胜感激,或者如果有另一种方式,我可以完成将节点应用程序放在apache后面而不使用ProxyPass,我很乐意听到任何其他解决方案。

在此先感谢。

回答

0

这对我有什么工作于2.4.10: 它是因为我已经配置了此一段时间,但我知道我不能使它工作使用纯的ProxyPass

ServerName api.example.com 

RewriteEngine On 
RewriteCond %{HTTP:Connection} Upgrade [NC] 
RewriteRule ^/(.*) ws://localhost:3030/$1 [P,L] 

ProxyPass/http://localhost:3030/ 
ProxyPassReverse/http://localhost:3030/ 
+0

你还记得任何事情得到错误:'WebSocket连接到URL失败:WebSocket握手期间出错:无效的状态行'? –

+0

这已经是一年,时间很短。我不确定实际的错误是什么。它“只是不会连接”。你有没有尝试过以上? – j2L4e

相关问题