【问题标题】:Apache proxyPassReverse and WebsocketsApache proxyPassReverse 和 Websockets
【发布时间】:2013-01-05 08:42:15
【问题描述】:

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

我的设置如下。

阿帕奇网址:

mydomain.com

Hypnotoad 网址:

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 不支持反向代理 websocket。在 apache/httpd conf 文件中。

有没有人找到一个使用 Apache 的可用解决方案,该解决方案对于生产环境来说是稳定的?

【问题讨论】:

    标签: apache websocket mojolicious proxypass


    【解决方案1】:

    Apache httpd 2.4.6 包括代理 websocket 请求。

    【讨论】:

    • 这将更适合评论而不是答案。一旦您have enough reputation,请考虑将其移至对该问题的评论。
    • @SameerSingh 我认为这正是补丁提交者对问题的答案。
    【解决方案2】:

    这可能是您正在寻找的。看一看:https://npmjs.org/package/npr

    【讨论】:

      【解决方案3】:

      3 月 a patch was committed to the Apache trunk 由 Jim Jagielski 编写,它允许正确代理 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 应该更容易

      【讨论】:

        猜你喜欢
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 2012-10-07
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多