Apache mod_proxy 背后的 RabbitMQ 无法解析深层链接

Apache mod_proxy 背后的 RabbitMQ 无法解析深层链接

我在 Apache mod_proxy 后面运行 RabbitMQ,因此我可以通过端口 80 访问 Web 管理界面:

<VirtualHost *:80>
    ServerName rabbit.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
       Order deny,allow
       Allow from all
    </Proxy>

    ProxyPass / http://localhost:15672/
    ProxyPassReverse / http://localhost:15672/

    <Location />
       Order allow,deny
       Allow from all
    </Location>
</VirtualHost>

这似乎有效,但是,当我转到“队列”页面并单击其中一个列出的队列时,我得到一个“未找到”页面和一个如下所示的 URL:

http://rabbit.example.com/#/queues/%2F/myqueue

对于连接、频道等也是同样的事情。我似乎只能访问顶级页面,但任何更深层次的内容似乎都会导致未找到。

在 Apache mod_proxy 后面配置 RabbitMQ 的正确方法是什么?

答案1

首先,你需要阻止 apache2.4 解码路径中的斜线 (%2F)。为此,请设置

AllowEncodedSlashes NoDecode

并且您需要防止转义“危险”字符(如“#”)。对于 mod_rewrite,这将是 [NE] 标志,并设置 mod_proxy

nocanon

其结果是:

<VirtualHost *:80>
    ServerName rabbit.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
       Order deny,allow
       Allow from all
    </Proxy>

    AllowEncodedSlashes NoDecode
    ProxyPass / http://localhost:15672/ nocanon
    ProxyPassReverse / http://localhost:15672/

    <Location />
       Order allow,deny
       Allow from all
    </Location>
</VirtualHost>

相关内容