You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Nginx反向代理Keycloak 22.0时无法访问管理面板

Keycloak 22.0 Nginx反向代理/sso路径下管理面板无法访问的解决方法

问题根源

将Keycloak代理到/sso子路径时,Keycloak默认不知道外部的上下文路径,导致管理面板的内部链接、API请求仍使用根路径(/admin)而非/sso/admin,引发请求失败。同时需要确保Nginx配置与Keycloak的内部路径设置匹配。

解决方案步骤

1. 更新Keycloak的Docker环境变量

修改docker-compose.yml中keycloak服务的环境变量,添加上下文路径配置,并清理冗余参数、修正密码不一致问题:

services:
  keycloak:
    image: quay.io/keycloak/keycloak:22.0
    command: start-dev
    environment:
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres
      DB_DATABASE: keycloak
      DB_USER: keycloak
      DB_SCHEMA: public
      DB_PASSWORD: mypassssss  # 与postgres密码保持一致
      PROXY_ADDRESS_FORWARDING: 'true'
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: password
      KC_HOSTNAME: localhost
      KC_HOSTNAME_STRICT: 'false'
      KC_HTTP_ENABLED: 'true'
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: mypassssss  # 修正为与postgres一致的密码
      KC_LOG_LEVEL: debug
      KC_PROXY: edge
      KC_HTTP_RELATIVE_PATH: /sso  # 关键:指定外部访问的上下文路径
    ports:
      - 8080:8080
    depends_on:
      - postgres

说明:移除了旧版本的KEYCLOAK_USER和KEYCLOAK_PASSWORD参数(Keycloak 17+已使用KEYCLOAK_ADMIN系列参数),避免参数冲突。

2. 调整Nginx代理配置

修改Nginx配置文件,确保路径映射正确,以下两种方式二选一即可:

方式一:通过路径重写转发

server {
    listen 80 default_server;
    server_name _;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location /sso/ {
        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-Proto $scheme;
        proxy_pass http://keycloak:8080/;
        rewrite ^/sso/(.*)$ /$1 break;  # 重写路径,将/sso/后的部分转发到Keycloak根路径
    }
}

方式二:直接代理到Keycloak的上下文路径

server {
    listen 80 default_server;
    server_name _;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location /sso/ {
        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-Proto $scheme;
        proxy_pass http://keycloak:8080/sso/;
    }
}

3. 重启服务并验证

执行命令重启所有服务:

docker-compose down && docker-compose up -d

重启后访问:

  • 用户界面:http://localhost/sso/
  • 管理面板:http://localhost/sso/admin

此时管理面板应该可以正常访问。

内容的提问来源于stack exchange,提问作者SM Farhad Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:10:32