Вопрос или проблема
У меня есть контейнер 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, так и в самом сервере обратного прокси. Ниже приведены основные шаги и рекомендации, которые помогут вам устранить проблему с доступом:
-
Configuration Settings: Обратите внимание на следующее в конфигурации Keycloak:
-
Убедитесь, что переменные окружения, касающиеся прокси-серверов, установлены правильно. Например, в конфигурации Keycloak у вас уже имеется следующая строка:
KC_PROXY_HEADERS: xforwarded
Эта настройка позволяет Keycloak корректно обрабатывать заголовки, которые передает обратный прокси.
-
Попробуйте добавить следующие переменные окружения, чтобы избежать проблем с редиректами:
KC_HTTP_RELATIVE_PATH: /auth KC_HOSTNAME: sso.example.com
-
-
Reverse Proxy Configuration: Проверьте настройки обратного прокси-сервера на Synology DSM:
- Убедитесь, что все заголовки установлены корректно. По умолчанию ваши заголовки выглядят правильно, но стоит убедиться, что они соответствуют ожиданиям Keycloak. Например, заголовок
X-Forwarded-Proto
должен быть установлен вhttps
, когда используется SSL. Проверьте, что это так.
- Убедитесь, что все заголовки установлены корректно. По умолчанию ваши заголовки выглядят правильно, но стоит убедиться, что они соответствуют ожиданиям Keycloak. Например, заголовок
-
Настройки Cloudflare: Убедитесь, что Cloudflare не блокирует ваши запросы. Иногда проблемы могут возникнуть из-за настроек безопасности на уровне Cloudflare. Попробуйте временно отключить защиту (режим "Простой") для вашего домена и протестируйте доступ к Keycloak.
-
Логи: Изучите логи вашего Keycloak и Synology DSM для получения дополнительной информации о причине ошибки "somethingWentWrongDescription". Это может помочь вам лучше понять, где именно возникает проблема.
-
Проблемы с кэшированием: Убедитесь, что кеширование в Cloudflare настроено правильно. Возможно, вам нужно отключить любые правила кеширования для вашего домена, чтобы избежать проблем с некорректной кешированием данных.
-
Использование HTTP/HTTPS: Убедитесь, что ваш обратный прокси настроен на перенаправление запросов по правильному протоколу (HTTP или HTTPS). Например, если вы используете HTTPS на своем домене, убедитесь, что Keycloak на localhost доступен по HTTPS, или используйте HTTP, если обратный прокси корректно перенаправляет трафик.
- Тестирование доступа: После того, как вы внесли все изменения, попробуйте снова получить доступ к Keycloak через ваш субдомен. Если проблемы сохраняются, попробуйте протестировать доступ локально, отключив Cloudflare. Это поможет определить, связана ли проблема с ним или нет.
Если после выполнения всех этих шагов ошибка все еще остается, пожалуйста, предоставьте дополнительные детали о том, что именно происходит (например, сообщения из логов), чтобы можно было помочь более целенаправленно.