web-dev-qa-db-ja.com

カスタムベースURLでKeycloakドッカーのリバースプロキシを構成する

docker keycloak base urlをパラメーターとして設定するにはどうすればよいですか?

次のnginxリバースプロキシ設定があります:

server {
    listen 80;
    server_name example.com;

    location /keycloak {
        proxy_pass http://example.com:8087/;
    }
}

http://example.com/keycloak/ にアクセスしようとすると、keycloak httpリダイレクトが http://example.com/auth/ ではなく- http://example.com/keycloak/auth/

何か案は?

20
louis amoros

@homeをテストしただけで、実際には複数の構成の追加が必要です。

1/docsで説明されているように、env-e PROXY_ADDRESS_FORWARDING=trueでkeycloakコンテナを実行します。これはプロキシで必要ですキークロークにアクセスする方法:

docker run -it --rm -p 8087:8080 --name keycloak -e PROXY_ADDRESS_FORWARDING=true jboss/keycloak:latest

これも説明します SO question

2/keycloakの構成ファイル内のweb-contextを変更します$JBOSS_HOME/standalone/configuration/standalone.xml

デフォルトのキークローク設定はauthを指します

<web-context>auth</web-context>

その後、keycloak/authに変更できます

<web-context>keycloak/auth</web-context>

Dockerでこれを自動化する必要がある場合は、新しいキークロークイメージを作成するだけです。

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;を使用することをお勧めします。外部ネットワークリクエストを介したプロキシを回避するためにプライベートネットワークを使用しない場合。

お役に立てれば

23

@Francois Maturelの応答に基づいて:最新のKeycloak(現在4.8.x)では、web-contextstandalone-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フラグが渡されない限り、standalone-ha.xml起動スクリプトはstandalone.xmlに加えて-c構成を使用するためです。こちらをご覧ください: https://github.com/jboss-dockerfiles/keycloak/blob/master/server/tools/docker-entrypoint.sh

5
Mark

「/ keycloak」から「/ keycloak/auth」へのやり直しが機能していません。 index.htmlおよびBase-URLのRedirektルートに「/ 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
3