使用自定义基本 URL 为 Keycloak docker 配置反向代理
Posted
技术标签:
【中文标题】使用自定义基本 URL 为 Keycloak docker 配置反向代理【英文标题】:Configure reverse-proxy for Keycloak docker with custom base URL 【发布时间】:2017-11-21 07:58:32 【问题描述】:如何将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/
有什么想法吗?
【问题讨论】:
FrancoisMaturel 建议:location /keycloak proxy_pass http://example.com:8087/keycloak;
@FrançoisMaturel 我尝试了您的建议,但没有成功
【参考方案1】:
刚刚测试了@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
默认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 请求进行代理。
希望对你有帮助
【讨论】:
这些是依赖步骤吗?或者有 3 种方法来解决这个问题? @nurgasemetey,解决此问题需要所有这些步骤 似乎这种方法会导致细微的语义错误 - 请参阅 issues.jboss.org/browse/KEYCLOAK-11529 以获取当前打击我的示例 ... @col.panic 这似乎与最新版本的 keycloak 有关,如果您找到可行的解决方案,请更新我 @FrançoisMaturel 请参阅回复。 jboss 票 - 我找到了解决方法/解决方案【参考方案2】:基于@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
原因是docker-entrypoint.sh
启动脚本除了standalone.xml
之外还会使用standalone-ha.xml
配置,除非-c
标志被传递。见这里:https://github.com/jboss-dockerfiles/keycloak/blob/master/server/tools/docker-entrypoint.sh
【讨论】:
【参考方案3】:从“/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
【讨论】:
遗憾的是,这对 Keycloak v11.0.2 没有帮助 - 可能还有更多实例需要同时更换? @pat-s 有一些新文件:RUN sed -i -e 's/<web-context>auth<\/web-context>/<web-context>keycloak\/auth<\/web-context>/' $JBOSS_HOME/domain/configuration/domain.xml
【参考方案4】:
我还可以确认,使用 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
【讨论】:
【参考方案5】:就我而言,我在 Docker 上有一个现有的 Keycloak (v8.0.1),所以我也必须更新数据库。
使用以下环境变量启动 Keycloak Docker 容器:
PROXY_ADDRESS_FORWARDING:'真'
更新数据库。我正在使用 Postgres。
psql -U keycloak -d keycloak
更新领域集 ssl_required='NONE';
重启 Keycloak
Example for Postgres DB, by Sairam Krish
【讨论】:
以上是关于使用自定义基本 URL 为 Keycloak docker 配置反向代理的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Keycloak Operator (v13.0.0) 上使用自定义主题?