Настроить обратный прокси для док-станции 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