使用自定义基础 URL 为 Keycloak docker 配置反向代理
Configure reverse-proxy for Keycloak docker with custom base 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/ I got a keycloak http redirect to http://example.com/auth/ instead of http://example.com/keycloak/auth/
有什么想法吗?
刚刚测试了@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配置文件中的web-context $JBOSS_HOME/standalone/configuration/standalone.xml
默认密钥斗篷配置指向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 请求进行代理。
希望对您有所帮助
基于@Francois Maturel 的回复:对于最新的 Keycloak(当前为 4.8.x),我还必须添加一行来替换 standalone-ha.xml
中的 web-context
:
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
RUN sed -i -e 's/\/auth/\/keycloak\/auth/' /opt/jboss/keycloak/welcome-content/index.html
原因是 docker-entrypoint.sh
启动脚本除了 standalone.xml
之外还将使用 standalone-ha.xml
配置,除非传递 -c
标志。看这里:https://github.com/jboss-dockerfiles/keycloak/blob/master/server/tools/docker-entrypoint.sh
从 /keycloak
到 /keycloak/auth
的重定向无效。
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
RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' $JBOSS_HOME/domain/configuration/domain.xml
我还可以确认,当使用 docker image keycloak 6.0.1 standalone-ha.xml 文件也需要使用 sed 命令更改...
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 上有一个现有的 Keycloak (v8.0.1),所以我也必须更新数据库。
使用以下环境变量启动 Keycloak Docker 容器:
PROXY_ADDRESS_FORWARDING: 'true'
更新数据库。我正在使用 Postgres。
psql -U keycloak -d keycloak
更新领域集ssl_required='NONE';
重启 Keycloak
在 Keycloak 18.x 中你不能再使用 web-context
。
现在有一个新参数 http-relative-path
,其中包含相对于“/”的路径。
CLI:--http-relative-path
环境:KC_HTTP_RELATIVE_PATH
如何将 docker keycloak base url
设置为参数?
我有以下 nginx 反向代理配置:
server {
listen 80;
server_name example.com;
location /keycloak {
proxy_pass http://example.com:8087/;
}
}
当我尝试访问 http://example.com/keycloak/ I got a keycloak http redirect to http://example.com/auth/ instead of http://example.com/keycloak/auth/
有什么想法吗?
刚刚测试了@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配置文件中的web-context $JBOSS_HOME/standalone/configuration/standalone.xml
默认密钥斗篷配置指向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 请求进行代理。
希望对您有所帮助
基于@Francois Maturel 的回复:对于最新的 Keycloak(当前为 4.8.x),我还必须添加一行来替换 standalone-ha.xml
中的 web-context
:
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
RUN sed -i -e 's/\/auth/\/keycloak\/auth/' /opt/jboss/keycloak/welcome-content/index.html
原因是 docker-entrypoint.sh
启动脚本除了 standalone.xml
之外还将使用 standalone-ha.xml
配置,除非传递 -c
标志。看这里:https://github.com/jboss-dockerfiles/keycloak/blob/master/server/tools/docker-entrypoint.sh
从 /keycloak
到 /keycloak/auth
的重定向无效。
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
RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' $JBOSS_HOME/domain/configuration/domain.xml
我还可以确认,当使用 docker image keycloak 6.0.1 standalone-ha.xml 文件也需要使用 sed 命令更改...
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 上有一个现有的 Keycloak (v8.0.1),所以我也必须更新数据库。
使用以下环境变量启动 Keycloak Docker 容器:
PROXY_ADDRESS_FORWARDING: 'true'
更新数据库。我正在使用 Postgres。
psql -U keycloak -d keycloak
更新领域集ssl_required='NONE';
重启 Keycloak
在 Keycloak 18.x 中你不能再使用 web-context
。
现在有一个新参数 http-relative-path
,其中包含相对于“/”的路径。
CLI:--http-relative-path
环境:KC_HTTP_RELATIVE_PATH