Apache proxyPassReverse和Websockets

时间:2013-01-22 06:54:47

标签: apache websocket mojolicious proxypass

我一直在研究一个使用websockets的Perl Mojolicious项目。我想在运行apache的共享服务器上启动它,并使用proxyPass和proxyPassReverse使我的Mojolicious代码运行Hypnotoad更漂亮。

我将其设置如下。

Apache网址:

mydomain.com

Hypnotoad url:

mydomain.com:8080

使用以下apache条目,我可以将Hypnotoad服务器反向代理

project.mydomain.com

apache.conf条目

<VirtualHost *:80>
  ServerName project.mydomain.com
  DocumentRoot /var/www/project
  <Directory /var/www/project/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
  </Directory>
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://mydomain.com:8080/ keepalive=On
  ProxyPassReverse / http://mydomain.com:8080/
  RequestHeader set X-Forwarded-HTTPS "0"
</VirtualHost>

然而,当我使用时,我的websocket请求会出现404错误:

ws://project.mydomain.com/get-data
我使用

时出现302错误:

ws://mydomain.com:8080/get-data

我想这不会是问题,因为websocket没有检查身份验证,但是他们使用Mojolicious路由来检查你是否可以通过websocket发布。

从我可以看到Apache不支持反向代理websockets。在apache / httpd conf文件中。

是否有人使用对生产环境稳定的Apache找到了可用的解决方案?

3 个答案:

答案 0 :(得分:16)

Jim Jagielski在3月a patch was committed to the Apache trunk,它允许正确代理websockets。该补丁添加了一个名为proxy_wstunnel的新子模块allows mod_proxy to work with the "ws" and "wss" protocols

该模块尚未发布任何官方Apache版本(截至2013年6月8日),因此您需要自行编译。 Voyageur's blog描述了Apache 2.2的过程,但Apache 2.4应该更容易。

答案 1 :(得分:15)

Apache httpd 2.4.6包含代理websocket请求。

答案 2 :(得分:-5)

这可能就是你要找的东西。看看:https://npmjs.org/package/npr