我正在尝试在根服务器上设置Keycloak,但我无法从互联网访问管理控制台。我已经安装了Keycloak服务器,并将其放置在同一台机器的nginx反向代理后面。 我为该域设置了letsencrypt证书。我还通过脚本设置了keycloak的管理员用户。
当我使用域名访问服务器https://<my-domain>
时,会被重定向到 https://<my-domain>/auth
,这是keycloak欢迎页面,包含一个指向“管理控制台”的链接。此链接指向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本身的问题。
因此,基本问题是:如何配置Keycloak,以便可以通过互联网访问管理控制台?我已经阅读到默认情况下只能在本地主机上访问它,但一定有一种方法可以覆盖此默认设置吗?
相关的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
重定向是有意的,那么为什么一开始它不能正常工作,以及如何解决此问题,这可能会很有趣。
standalone.xml
文件是 Keycloak 旧版 WildFly 的一部分,在 Quarkus 版本中不存在。 - silvertiger