代理从 nginx 容器传递到 keycloak 容器时获取 502 Bad gateway

Posted

技术标签:

【中文标题】代理从 nginx 容器传递到 keycloak 容器时获取 502 Bad gateway【英文标题】:Getting 502 Bad gateway when proxy pass to keycloak container from nginx container 【发布时间】:2021-12-30 01:50:31 【问题描述】:

所以我对 docker 世界非常陌生。目前在尝试将代理传递到 keycloak 容器时遇到此“502 Bad Gateway”错误。我似乎无法理解错误的原因。以下是我编写的代码:

proxy.conf文件

server

   listen 80;

   location / 
      proxy_pass http://myapp;
 

Dockerfile

FROM nginx:alpine
RUN rm etc/nginx/conf.d/*
COPY proxy.conf etc/nginx/conf.d/

码头工人撰写文件

version: '3'
services:
   nginx_app:
      build: .
      container_name: nginxapp
      ports:
        - "9000:80"
      depends_on:
        - myapp

   myapp:
      image: jboss/keycloak:latest
      container_name: myapp
      ports:
        - "8443"
      environment:
        - KEYCLOAK_USER=admin
        - KEYCLOAK_PASSWORD=admin

我想要做的是,当我点击host-ip:9000 时,它应该将它传递给 keycloak 屏幕。但好像有什么不对。感谢任何帮助。谢谢

【问题讨论】:

这能回答你的问题吗? Reverse proxy configuration for keycloak (Nginx) 试过了,但目前还没有 【参考方案1】:

您需要确保您的端口“接线”设置正确。 JBoss(目前运行 Keycloak 的容器平台)通常在 8080 上侦听 HTTP,在 8443 上侦听 HTTPS。

在您的配置中,您可以使用proxy_pass http://myapp; 将其路由到端口 80,因为这是 HTTP 默认使用的。

我建议将它指向 HTTPS 端点(或者如果你真的需要,你可以在端口 8080 上使用 HTTP),如下所示:

server

   listen 80;

   location / 
      proxy_pass https://myapp:8443;
 

我们还需要添加两个额外的环境变量,keycloak 图像使用这些变量来使代理后面的工作更顺利。看这里for more details on these image env vars

PROXY_ADDRESS_FORWARDING 由 Jan Garaj 链接

KEYCLOAK_FRONTEND_URL

   myapp:                                                                                                                     
      image: jboss/keycloak:latest                                                                                            
      container_name: myapp                                                                                                   
      ports:                                                                                                                  
        - "8443"                                                                                                              
      environment:
        - KEYCLOAK_FRONTEND_URL=http://localhost:9000/auth/
        - PROXY_ADDRESS_FORWARDING=true                                                                        
        - KEYCLOAK_USER=admin                                                                                                 
        - KEYCLOAK_PASSWORD=admin                                                                                                                                  

一旦一切启动,您应该能够通过 http://localhost:9000/auth/admin/ 访问 keycloak 管理控制台

如果这不仅仅用于开发/测试设置,您还应该在 nginx 中配置 TLS,甚至可能为“后端”keycloak 服务器提供真正的证书。

【讨论】:

以上是关于代理从 nginx 容器传递到 keycloak 容器时获取 502 Bad gateway的主要内容,如果未能解决你的问题,请参考以下文章

nginx登录背后的keycloak失败,帖子中缺少端口号等

如何在 keycloak 和 nginx 上配置 cors?

nginx 的 gitlab 容器代理传递不适用于推送请求

Keycloak NGINX 反向代理问题

使用 nginx 作为反向代理和 keycloak 作为上游服务器的组合失败

带有 NGINX 代理服务器的 Keycloak 未验证 rest api