我一直在研究一个使用websockets的Perl Mojolicious项目 . 我想在运行apache的共享服务器上启动它,并使用proxyPass和proxyPassReverse使我的Mojolicious代码运行Hypnotoad更漂亮 .
我把它设置如下 .
Apache网址:
mydomain.com
催眠网址:
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 回答
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应该更容易
Apache httpd 2.4.6包括代理websocket请求 .
这可能就是你要找的东西 . 看看:https://npmjs.org/package/npr