使用自定义基本URL为Keycloak docker配置反向代理

时间:2017-06-19 07:43:07

标签: nginx docker 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/

有什么想法吗?

5 个答案:

答案 0 :(得分:21)

刚刚测试了@home,实际上需要添加多个配置:

1 /运行带有env -e PROXY_ADDRESS_FORWARDING=true 的keycloak容器,如文档中所述,这是访问keycloak的代理方式所必需的:

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

SO question

中也有解释

2 /更改keycloak配置文件$JBOSS_HOME/standalone/configuration/standalone.xml

中的 web-context

默认的keycloak配置指向auth

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

然后您可以将其更改为keycloak/auth

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

如果你需要为docker自动执行此操作,只需创建一个新的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;,如果没有尝试使用专用网络来避免通过外部Web请求进行代理。

希望这有帮助

答案 1 :(得分:3)

以@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标志,否则standalone-ha.xml启动脚本将使用standalone.xml之外的-c配置。看到这里:https://github.com/jboss-dockerfiles/keycloak/blob/master/server/tools/docker-entrypoint.sh

答案 2 :(得分:0)

从“ / 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 :(得分:0)

我还可以确认使用docker image keycloak 6.0.1时,还需要使用sed命令更改standalone-ha.xml文件...

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

答案 4 :(得分:0)

就我而言,我在Docker上已有一个Keycloak(v8.0.1),因此我也必须更新数据库。

  1. 使用以下环境变量启动Keycloak Docker容器:

    PROXY_ADDRESS_FORWARDING:'true'

  2. 更新数据库。我正在使用Postgres。

    psql -U keycloak -d keycloak

    更新领域设置ssl_required ='NONE';

  3. 重新启动密钥斗篷

Example for Postgres DB, by Sairam Krish