我正在尝试在根服务器上设置Keycloak,但无法从Internet访问管理控制台。我已经安装了keycloak服务器,并将其放在同一台计算机上的nginx反向代理后面。我已经为域设置了一个letencrypt证书。我还通过脚本设置了管理员的密钥斗篷。
当我访问其域为https://<my-domain>
的服务器时,我将被转发到https://<my-domain>/auth
,并且有一个带有“管理控制台”链接的密钥访问欢迎页面。该链接指向https://<my-domain>/admin
,但显示404。
起初我以为这可能是nginx的问题,所以我按照文档中的指南设置了负载均衡器(https://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy)。在那里,在“验证配置”下,它告诉您打开可按预期工作的路径https://<my-domain>/auth/realms/master/.well-known/openid-configuration
,我得到一个包含几个链接和其他信息的json文件。但是,这些链接都不起作用-都给我一个404。
[当我尝试https://<my-domain>/auth/realms/master
时,我得到一个JSON响应。因此某些链接确实有效,因此我认为这与nginx无关,但与密钥斗篷本身无关。
所以基本问题是:如何配置Keycloak,以便可以通过Internet访问管理控制台?我读过默认情况下,您只能在localhost上访问它,但是必须有一种方法可以覆盖此默认值?
相关的nginx配置:
upstream keycloak {
server 127.0.0.1:8080;
}
server {
listen 443 ssl http2;
# some ssl configuration for letsencrypt
location / {
proxy_pass http://keycloak;
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 $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
keycloak/standalone/configuration/standalone.xml
中我已编辑的某些部分:
<subsystem xmlns="urn:jboss:domain:undertow:10.0" ...>
...
<server name="default-server">
<http-listener name="default"
socket-binding="http"
redirect-socket="proxy-https"
enable-http2="true"
proxy-address-forwarding="true" />
...
</server>
...
</subsystem>
...
<interfaces>
<interface name="management">
<any-address />
</interface>
<interface name="public">
<any-address />
</interface>
</interfaces>
<socket-binding-group name="standard-sockets" ...>
...
<socket-binding name="proxy-https" port="443" />
...
</socket-binding-group>
编辑
我能够修复它。问题在于,keycloak正在将初始页面从https://<my-domain>/
重定向到https://<my-domain>/auth
,但是在所有其他链接中,都缺少此额外的/auth
。因此,管理链接指向没有https://<my-domain>/admin/master/console
部分的/auth
,因此该页面不存在。当我手动输入带有/auth
的URL时,我得到一个带有“正在加载..”消息的页面,但是所有样式和JavaScript文件都链接在一起,因此URL中也缺少/auth
部分,因此没有任何作用。
为了解决这个问题,我现在在standalone.xml
行中将<web-context>auth</web-context>
行更改为<web-context>/</web-context>
,现在一切正常。起始页上没有任何重定向,并且所有链接都可以在没有/auth
部分的情况下正常工作。但是,很有趣的是,为什么它首先不起作用,以及如果打算使用/auth
重定向,如何解决这个问题。
尝试打开/ auth / admin / master / console /在浏览器中。
附加信息:
https://www.keycloak.org/docs/latest/getting_started/index.html
https://www.keycloak.org/docs-api/8.0/rest-api/index.html
哦,我建议使用dockerized Keycloak。如果更容易,则可以升级到较新版本。