Настроить обратный прокси для док-станции Keycloak с настраиваемым базовым URL-адресом
Как установить параметр docker keycloak base url
как?
У меня есть следующая конфигурация прокси-сервера nginx:
server {
listen 80;
server_name example.com;
location /keycloak {
proxy_pass http://example.com:8087/;
}
}
Когда я пытаюсь получить доступ к http://example.com/keycloak/, я получил переадресацию ключей для http://example.com/auth/ вместо http://example.com/keycloak/auth/
Любые идеи?
Ответы
Ответ 1
Только что протестировал этот @home, и на самом деле требуется несколько дополнений конфигурации:
1/Запустите контейнер keycloak с env -e PROXY_ADDRESS_FORWARDING=true
как объяснено в документации, это необходимо для прокси-доступа к keycloak:
docker run -it --rm -p 8087:8080 --name keycloak -e PROXY_ADDRESS_FORWARDING=true jboss/keycloak:latest
Также объяснил в этом вопросе
2/Измените веб-контекст в файле конфигурации $JBOSS_HOME/standalone/configuration/standalone.xml
Конфигурация Keycloak по умолчанию указывает на auth
<web-context>auth</web-context>
Тогда вы можете изменить его на keycloak/auth
<web-context>keycloak/auth</web-context>
Если вам нужно автоматизировать это для докера, просто создайте новый образ keycloak:
FROM jboss/keycloak:latest
USER jboss
RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' $JBOSS_HOME/standalone/configuration/standalone.xml
3/Добавьте некоторую информацию о прокси в конфигурацию nginx (в основном для обработки http/https)
location /keycloak {
proxy_pass http://example.com:8087;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Если вы передаете запросы от nginx на keycloak на том же сервере, я рекомендую использовать proxy_pass http://localhost:8087;
и, если нет, попробуйте использовать частную сеть, чтобы избежать прокси через внешние веб-запросы.
Надеюсь это поможет
Ответ 2
Опираясь на ответ @Francois Maturel: для последнего Keycloak (в настоящее время 4.8.x) мне пришлось добавить дополнительную строку для замены web-context
в standalone-ha.xml
:
FROM jboss/keycloak:latest
USER jboss
RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' /opt/jboss/keycloak/standalone/configuration/standalone.xml
RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' /opt/jboss/keycloak/standalone/configuration/standalone-ha.xml
Причина в том, что docker-entrypoint.sh
запуска docker-entrypoint.sh
будет использовать конфигурацию standalone-ha.xml
в дополнение к standalone.xml
если не -c
флаг -c
. Смотрите здесь: https://github.com/jboss-dockerfiles/keycloak/blob/master/server/tools/docker-entrypoint.sh
Ответ 3
Редирект с "/keycloak" на "/keycloak/auth" не работает. В Redirekt Route в index.html и Base-URL отсутствует часть "/keycloak". Я должен был добавить это:
FROM jboss/keycloak:latest
USER jboss
RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' $JBOSS_HOME/standalone/configuration/standalone.xml
RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' $JBOSS_HOME/standalone/configuration/standalone-ha.xml
RUN sed -i -e 's/name="\/"/name="\/keycloak\/"/' $JBOSS_HOME/standalone/configuration/standalone.xml
RUN sed -i -e 's/name="\/"/name="\/keycloak\/"/' $JBOSS_HOME/standalone/configuration/standalone-ha.xml
RUN sed -i -e 's/\/auth/\/keycloak\/auth"/' $JBOSS_HOME/welcome-content/index.html