Docker 容器和 OIDC 身份验证的 Nginx 配置问题

问题描述 投票:0回答:1

我目前在 Docker 的 8090 端口和 Hesk 的 8088 端口上运行 Keycloak,并在主机系统上运行 Nginx 来管理流量路由。我的 Nginx 配置设置为重定向和处理两个子域(auth.example.de 和 support.example.de)的 SSL。这是 Nginx 配置片段:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush      on;
    keepalive_timeout  65;
    gzip  on;
    
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    
    server {
        listen 80;
        server_name auth.example.de;
        return 301 https://$host$request_uri;
    }

    server {
        listen       443 ssl;
        server_name  auth.example.de;
        
        ssl_certificate     [PATH TO CRT];
        ssl_certificate_key [PATH TO KEY];
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass http://localhost:8090;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    server {
        listen 80;
        server_name support.example.de;
        return 301 https://$host$request_uri;
    }

    server {
        listen       443 ssl;
        server_name  support.example.de;

        ssl_certificate     [PATH TO CRT];
        ssl_certificate_key [PATH TO KEY];
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass http://localhost:8088;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

在我的主机文件中,我已覆盖 auth.example.com 和 support.example.com 的 DNS 条目以指向 127.0.0.1。当 Hesk 尝试通过 OIDC 连接到 auth.example.com 进行身份验证但无法访问时,就会出现此问题。我怀疑,由于 DNS 解析返回 127.0.0.1,因此请求不会通过主机系统上的 Nginx 进行路由,导致它从容器内返回索引页面,而不是到达 Keycloak 身份验证页面。

有没有人遇到过类似的问题,或者有没有人对如何通过 Nginx 正确路由这些内部请求以允许通过主机进行容器到容器通信有建议?

编辑:顺便提一下,我在 Windows 11 上使用 WSL 2 和 Ubuntu 作为 Docker 后端

docker nginx
1个回答
0
投票

我通过将以下条目添加到 hesk 容器内的 /etc/hosts 来修复它:

// host.docker.internal resolves to: 192.168.65.2
192.168.65.2 auth.example.de

也许在 docker-compose.yml 中添加 extra_hosts 也可以,但我还没有尝试过。

© www.soinside.com 2019 - 2024. All rights reserved.