我在 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>