群晖反向代理背后的keycloak

问题描述 投票:0回答:1

我有一个在 Synologyrackstation 上运行的 keycloak docker 容器。该机架站可通过公共域访问,并受到 cloudflare 的预先保护。我可以访问本地网络中的 keycloak 实例,但不能通过配置的子域访问,该子域由 Synology DSM 反向代理提供服务。当我查询子域时,它会将我重定向到 keycloak 的管理控制台,过了一会儿我收到以下错误消息:“somethingWentWrongDescription”。

互联网 --> https://sso.example.com --> clouflare --> Synology DSM 反向代理 https://sso.example.com --> http://localhost:20600

反向代理配置有以下标头:

标题 价值
X-转发至 $proxy_add_x_forwarded_for
X-转发-原型 $proxy_x_forwarded_proto
X-真实IP $remote_addr
升级 $http_upgrade
连接 $connection_upgrade

docker compose 如下所示:

version: '3.7'

services:
  db:
    image: postgres
    container_name: keycloak-db
    volumes:
      - /volume1/docker/keycloak/db:/var/lib/postgresql/data:rw
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

  keycloak:
    image: quay.io/keycloak/keycloak
    container_name: keycloak
    restart: on-failure:5
    command: start
    healthcheck:
      test: curl -f http://localhost:8080/ || exit 1
    environment:
      KC_PROXY_HEADERS: xforwarded
      KC_HTTP_ENABLED: true
      KC_HOSTNAME_STRICT: false
      KC_HTTP_RELATIVE_PATH: /auth
      KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN}
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://db/${POSTGRES_DB}
      KC_DB_USERNAME: ${POSTGRES_USER}
      KC_DB_PASSWORD: ${POSTGRES_PASSWORD}
    ports:
      - 20600:8080
    depends_on:
        - db

keycloak的主机名调试: 主机名调试

我做错了什么?

我曾经使用可从子域访问的旧版 keycloak 运行它,但我想使用最新的 keycloak。从那时起我就无法让它运行了。

反向代理后面的Keycloak没有帮助。

keycloak reverse-proxy cloudflare synology
1个回答
0
投票

我终于通过设置变量 KC_HOSTNAME 让它工作了。我的作文如下:

keycloak:
  image: quay.io/keycloak/keycloak
  container_name: keycloak
  restart: on-failure:5
  command: start
  healthcheck:
    test: curl -f http://localhost:8080/ || exit 1
  environment:
    KC_PROXY_HEADERS: xforwarded
    KC_HTTP_ENABLED: true
    KC_HOSTNAME_STRICT: false
    KC_HTTP_RELATIVE_PATH: /
    KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN}
    KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
    KC_DB: postgres
    KC_DB_URL: jdbc:postgresql://db/${POSTGRES_DB}
    KC_DB_USERNAME: ${POSTGRES_USER}
    KC_DB_PASSWORD: ${POSTGRES_PASSWORD}
    KC_HOSTNAME_DEBUG: true
    KC_LOG_LEVEL: debug
    KC_HOSTNAME_BACKCHANNEL_DYNAMIC: false
    KC_HOSTNAME: https://sso.example.com
  ports:
    - 20600:8080
  depends_on:
    - db
© www.soinside.com 2019 - 2024. All rights reserved.