登录Authentication required
后收到错误Wildfly 13 Management Console
。
如果我输入了错误的用户名或密码,它会再次询问,但是如果我输入正确,它将显示带有错误消息的页面(因此,我认为用户名和密码是正确的,但随后出现其他错误)。
我正在使用docker运行Nginx容器和Wildfly容器。
nginx在端口9991
上进行外部侦听,并将代理传递给wildfly容器,但这显示了先前描述的错误。
仅在Wildfly控制台上发生,其他所有请求都被代理,甚至代理到Websocket或端口8080
上的Wildfly,都已成功完成
Wildfly容器在端口9990
上进行外部侦听,并且我可以在此端口上成功访问控制台。如果在docker上我映射了端口"9992:9990"
我仍然可以通过端口9992
成功访问控制台。
因此,这似乎与docker没有关系,但与Wildfly Console本身有关。在中间使用反向代理时,可能无法成功进行某种身份验证。
我在https://github.com/lucasbasquerotto/docker-main上有一个演示docker项目,您可以下载标签0.0.6,该标签具有适用于Wildfly 13和nginx的所有设置,并可以模拟此错误。
git clone -b 0.0.6 --single-branch --depth 1 https://github.com/lucasbasquerotto/docker-main.git
cd docker-main
docker-compose up -d
然后,如果您使用用户http://localhost:9990
和密码monitor
在Monitor#70365
中直接访问容器,则一切正常。
但是如果您使用相同的凭据访问http://localhost:9991
,并通过nginx反向代理访问,则会收到错误消息。
我的nginx.conf
文件:
upstream docker-wildfly {
server wildfly:9990;
}
location / {
proxy_pass http://docker-wildfly;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
我也尝试过:
proxy_set_header X-Forwarded-Proto $scheme;
还有 Authorization标头(仅第二行,并且同时包含这两者):
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
并使用端口定义主机头(而不是仅$ host):
proxy_set_header Host $server_addr:$server_port;
我已经尝试将上述配置隔离并组合在一起。全部无济于事。
有任何建议吗?
是否有人通过反向代理成功访问了Wildfly控制台?
Wildfly似乎使用摘要身份验证(而不是基本身份验证)。
我在控制台中看到如下所示的标题:
Authorization: Digest username="monitor", realm="ManagementRealm", nonce="AAAAAQAAAStPzpEGR3LxjJcd+HqIX2eJ+W8JuzRHejXPcGH++43AGWSVYTA=", uri="/console/index.html", algorithm=MD5, response="8d5b2b26adce452555d13598e77c0f63", opaque="00000000000000000000000000000000", qop=auth, nc=00000005, cnonce="fe0e31dd57f83948"
我没有太多关于使用nginx代理带有摘要头的传递请求的文档(但我认为它应该是透明的)。
我在SO中看到的一个问题是https://serverfault.com/questions/750213/http-digest-authentication-on-proxied-server,但到目前为止还没有答案。
我看到有nginx非官方模块https://www.nginx.com/resources/wiki/modules/auth_digest/,但是在github存储库(https://github.com/atomx/nginx-http-auth-digest)中它说:
ngx_http_auth_digest模块补充了Nginx的内置Basic 通过提供对RFC 2617摘要的支持的身份验证模块 身份验证。该模块目前可以使用,但仅 由作者测试和审查。鉴于这是安全性 代码,几乎可以肯定,只有一双眼睛无法保证 这是100%正确的。直到出现一些错误报告,并且其中一些 代码中的“未知未知数”已清除,请考虑一下 将一个“ alpha”模块,并用适当数量的 怀疑。
在我看来,对用户进行硬编码并传入要由nginx使用的文件也不是一件好事(在这种情况下,身份验证对于反向代理应该是透明的)。
无论如何,我都尝试过,即使最终目的地没有摘要式身份验证,它也会正确要求我进行身份验证,例如在尝试连接到wildfly站点(而不是控制台)时,它会在尝试连接时询问到nginx(在代理请求之前),然后它成功转发到目的地,除非使用wildfly控制台,它一直要求我永远进行身份验证。
所以我认为这不是解决方案。问题似乎出在nginx传递给Wildfly控制台的内容上。