我正在Docker容器中针对三个环境(DEV / QA / PROD)运行ActiveMQ Artemis。
管理控制台通常在端口8161上运行,因此我在创建代理时将其包含在artemis create
语句中。
--http-host 0.0.0.0 --http-port 8161
所以这会导致以下两个变化:
bootstrap.xml获取主机/端口:
<web bind="http://0.0.0.0:8161" path="web">
<app url="redhat-branding" war="redhat-branding.war"/>
<app url="artemis-plugin" war="artemis-plugin.war"/>
<app url="dispatch-hawtio-console" war="dispatch-hawtio-console.war"/>
<app url="console" war="console.war"/>
</web>
jolokia-access.xml获取主机/端口:
<allow-origin>*://0.0.0.0*</allow-origin>
我正在尝试从远程计算机访问ActiveMQ Artemis Hawtio管理控制台,但是暴露的docker端口不是8161
。它们是映射的端口38161
,48161
和58161
。
因此,当我登录到管理控制台时,我得到:
Operation unknown failed due to: java.lang.Exception : Origin http://10.0.20.2:58161 is not allowed to call this agent
Uncaught TypeError: Cannot read property 'apply' of undefined (http://10.0.20.2:58161/console/app/app.js:16:14127)
Uncaught TypeError: Cannot read property 'apply' of undefined (http://10.0.20.2:58161/console/app/app.js:16:14127)
...
答案 0 :(得分:1)
我相信这里的问题是您的jolokia-access.xml使用了以下代码:
<allow-origin>*://0.0.0.0*</allow-origin>
但是,您正尝试通过http://10.0.20.2:58161
访问控制台,但根据您的jolokia-access.xml
不允许。因此,您需要更改jolokia-access.xml
以允许您实际将用于连接的IP:端口。
您可以在Jolokia security documentation中阅读有关jolokia-access.xml的更多信息。
为了清楚起见,元地址0.0.0.0
基本上是“没有特定地址”的占位符,在将侦听器绑定到网络接口的上下文中,这意味着侦听器应绑定/侦听所有 接口。但是,在<allow-origin>
中确保Jolokia的安全并不意味着允许所有起源。 <allow-origin>
支持文字匹配和通配符(如上面链接的文档中所述)。因此,如果指定了0.0.0.0
,它将尝试从字面上匹配0.0.0.0
。无法通过create
命令禁用Jolokia安全性。如果要将--http-host 10.0.20.*
之类的内容传递给create
命令,则将使用10.0.20.*
将网络服务器绑定到bootstrap.xml
中,这将失败。
可以选择使用--relax-jolokia
来禁用严格检查,这可能会对您的用例有所帮助。
答案 1 :(得分:0)
您只需对jolokia-access.xml文件进行更改以编辑cors即可:
<allow-origin>*://*</allow-origin>
有关此的更多信息,您可以参考:https://medium.com/@hasnat.saeed/setup-activemq-artemis-on-ubuntu-18-04-76bb4975308b