Кейклоак за обратным прокси Synology

Вопрос или проблема

У меня есть контейнер keycloak, работающий на сервере Synology RackStation. Этот RackStation доступен по публичному домену и защищен Cloudflare. Я могу получить доступ к экземпляру keycloak в своей локальной сети, но не через настроенный поддомен, который обслуживается обратным прокси Synology DSM. Когда я запрашиваю поддомен, он перенаправляет меня на консоль администратора keycloak, и через некоторое время я получаю следующее сообщение об ошибке: “somethingWentWrongDescription”.

Интернет –> https://sso.example.com –> Cloudflare –> обратный прокси Synology DSM https://sso.example.com –> http://localhost:20600

Обратный прокси настроен со следующими заголовками:

Заголовок Значение
X-Forwarded-For $proxy_add_x_forwarded_for
X-Forwarded-Proto $proxy_x_forwarded_proto
X-Real-IP $remote_addr
Upgrade $http_upgrade
Connection $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 за обратным прокси-сервером Synology DSM с использованием Cloudflare вам потребуется убедиться, что все настройки правильно сконфигурированы как в Docker-контейнере Keycloak, так и в самом сервере обратного прокси. Ниже приведены основные шаги и рекомендации, которые помогут вам устранить проблему с доступом:

  1. Configuration Settings: Обратите внимание на следующее в конфигурации Keycloak:

    • Убедитесь, что переменные окружения, касающиеся прокси-серверов, установлены правильно. Например, в конфигурации Keycloak у вас уже имеется следующая строка:

      KC_PROXY_HEADERS: xforwarded

      Эта настройка позволяет Keycloak корректно обрабатывать заголовки, которые передает обратный прокси.

    • Попробуйте добавить следующие переменные окружения, чтобы избежать проблем с редиректами:

      KC_HTTP_RELATIVE_PATH: /auth
      KC_HOSTNAME: sso.example.com
  2. Reverse Proxy Configuration: Проверьте настройки обратного прокси-сервера на Synology DSM:

    • Убедитесь, что все заголовки установлены корректно. По умолчанию ваши заголовки выглядят правильно, но стоит убедиться, что они соответствуют ожиданиям Keycloak. Например, заголовок X-Forwarded-Proto должен быть установлен в https, когда используется SSL. Проверьте, что это так.
  3. Настройки Cloudflare: Убедитесь, что Cloudflare не блокирует ваши запросы. Иногда проблемы могут возникнуть из-за настроек безопасности на уровне Cloudflare. Попробуйте временно отключить защиту (режим "Простой") для вашего домена и протестируйте доступ к Keycloak.

  4. Логи: Изучите логи вашего Keycloak и Synology DSM для получения дополнительной информации о причине ошибки "somethingWentWrongDescription". Это может помочь вам лучше понять, где именно возникает проблема.

  5. Проблемы с кэшированием: Убедитесь, что кеширование в Cloudflare настроено правильно. Возможно, вам нужно отключить любые правила кеширования для вашего домена, чтобы избежать проблем с некорректной кешированием данных.

  6. Использование HTTP/HTTPS: Убедитесь, что ваш обратный прокси настроен на перенаправление запросов по правильному протоколу (HTTP или HTTPS). Например, если вы используете HTTPS на своем домене, убедитесь, что Keycloak на localhost доступен по HTTPS, или используйте HTTP, если обратный прокси корректно перенаправляет трафик.

  7. Тестирование доступа: После того, как вы внесли все изменения, попробуйте снова получить доступ к Keycloak через ваш субдомен. Если проблемы сохраняются, попробуйте протестировать доступ локально, отключив Cloudflare. Это поможет определить, связана ли проблема с ним или нет.

Если после выполнения всех этих шагов ошибка все еще остается, пожалуйста, предоставьте дополнительные детали о том, что именно происходит (например, сообщения из логов), чтобы можно было помочь более целенаправленно.

Оцените материал
Добавить комментарий

Капча загружается...