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

Luk*_*uke 3 mod-proxy rabbitmq apache-2.2

我在 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>
Run Code Online (Sandbox Code Playgroud)

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

http://rabbit.example.com/#/queues/%2F/myqueue
Run Code Online (Sandbox Code Playgroud)

同样的事情也适用于连接、频道等。我似乎只能访问首页,但任何更深的页面似乎都会导致未找到。

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

小智 5

首先,您需要阻止 apache2.4 解码路径中的斜杠 (%2F)。这样做设置

AllowEncodedSlashes NoDecode
Run Code Online (Sandbox Code Playgroud)

并且您需要防止转义诸如“#”之类的“危险”字符。使用 mod_rewrite 将成为 [NE] 标志,并设置 mod_proxy

nocanon
Run Code Online (Sandbox Code Playgroud)

这导致:

<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>
Run Code Online (Sandbox Code Playgroud)