0

我有一个使用 FeathersJS 在我的服务器上运行的节点应用程序,我希望它在 apache 之后,我正在尝试使用 apache 中的 mod_proxy 模块来完成此任务,但我遇到了问题。

这就是我的 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"

如果我通过 localhost 运行所有内容,它可以完美运行,没有问题,所以这显然是 ProxyPass 的问题。任何帮助将不胜感激,或者如果有另一种方法我可以在不使用 ProxyPass 的情况下将节点应用程序放在 apache 后面,我很想听听任何其他解决方案。

提前致谢。

4

1 回答 1

1

这在 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/
于 2016-10-22T23:17:49.153 回答