web-dev-qa-db-fra.com

Configurer le proxy inverse pour le menu fixe Keycloak avec une URL de base personnalisée

Comment définir le docker keycloak base url en tant que paramètre?

J'ai la configuration de proxy inverse nginx suivante:

server {
    listen 80;
    server_name example.com;

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

Lorsque j'essaie d'accéder à http://example.com/keycloak/ j'ai reçu une redirection http pour keycloak vers http://example.com/auth/ au lieu de http: // example. com/keycloak/auth/

Des idées?

14
louis amoros

Vient de tester @home, et plusieurs ajouts de configuration sont nécessaires:

1/Exécutez le conteneur keycloak avec env -e PROXY_ADDRESS_FORWARDING=true, comme expliqué dans la documentation, pour pouvoir accéder à keycloak par un proxy:

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

Aussi expliqué dans cette SO question

2/Modifiez le web-context dans le fichier de configuration du keycloak $JBOSS_HOME/standalone/configuration/standalone.xml

La configuration par défaut de la couche de clé pointe sur auth

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

Ensuite, vous pouvez le changer en keycloak/auth

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

Si vous avez besoin d'automatiser cela pour le menu fixe, créez simplement une nouvelle image de porte-clés:

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/Ajouter des informations de proxy à la configuration de nginx (principalement pour la gestion de 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;
}

Si vous transmettez des requêtes de nginx à keycloak sur le même serveur, je vous recommande d'utiliser proxy_pass http://localhost:8087; et, si ce n'est pas le cas, essayez d'utiliser un réseau privé pour éviter le proxy via des requêtes Web externes.

J'espère que cela t'aides

16
François Maturel

S'appuyant sur la réponse de @Francois Maturel: pour la dernière KeyCloak (actuellement 4.8.x), j'ai dû ajouter une ligne supplémentaire pour remplacer le web-context dans 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

La raison en est que le script de démarrage docker-entrypoint.sh utilisera la configuration standalone-ha.xml en plus de standalone.xml à moins que l'indicateur -c ne soit passé. Voir ici https://github.com/jboss-dockerfiles/keycloak/blob/master/server/tools/docker-entrypoint.sh

2
Mark