Keycloak 本身工作正常。我创建了一个子域 https://auth.mydomain.com ,它指向在 GCP 上运行的虚拟机。我已将 nginx 配置为在内部将请求转发到 Keycloak。到目前为止,一切都很好。当我在 Keycloak UI 中单击“管理控制台”时,它会重定向到 https://auth.mydomain.com/admin/master/console 并挂起并显示“正在加载管理 UI”。根据网络日志,当Keycloak尝试通过https://auth.mydomain.com:8081/realms/master/protocol/openid-connect/3p-cookies/step1.html加载step1.html时,会发生错误。
现在我认为这个URL(初始部分https://auth.mydomain.com)不正确,但不知道如何配置它。我想它应该是 http 并指向内部 IP/localhost 或摆脱 8081 端口。
这是我的 nginx.conf:
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name auth.mydomain.com;
# SSL certificate configuration
ssl_certificate .../public.crt;
ssl_certificate_key .../private.key;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $http_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-Proto $scheme;
}
}
这就是 Keycloak 的配置方式。
environment:
...
- KC_HTTP_ENABLED=true
- KC_PROXY=edge
- KC_PROXY_HEADERS=forwarded|xforwarded
- KC_HOSTNAME_STRICT=false
- KC_HOSTNAME_STRICT_HTTPS=false
...
nginx(镜像 nginx:1.25.3-alpine)和 Keycloak(quay.io/keycloak/keycloak:21.1.2)都作为 Docker 容器运行。 任何帮助表示赞赏,这越来越令人恼火。
ngix 配置对我来说看起来不错。
您是否检查设置了 admin URL 变量?
这些是我的 docker compose 变量(使用 localhost 而不是 IP):
KEYCLOAK_ADMIN_URL: http://localhost:${NGINX_HOST_PORT}${KEYCLOAK_ADMIN_URL}
KC_HOSTNAME_URL: http://localhost:${NGINX_HOST_PORT}${KEYCLOAK_HOSTNAME_URL}
KC_HOSTNAME_ADMIN_URL: http://localhost:8081/