如何让nginx处理keycloak的https

How to get nginx to handle https for keycloak

我正在尝试让 Keycloak 3.4.3.Final docker 容器工作。我可以通过 http 加载容器,并且会立即显示 https 要求消息。

所以我使用具有以下配置的 nginx 设置了代理通道

events {
  worker_connections  4096;  ## Default: 1024
}

http {
    upstream keycloak-stream {
        server keycloak:8080;
    }

    server {
        listen 443;
        server_name  localhost redacted.com *.redacted.com;
        autoindex off;

        location / {
            proxy_ssl_server_name on;
            proxy_pass https://keycloak-stream;

            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;
        }

        ssl    on;
        ssl_certificate     /run/secrets/fullchain.pem;
        ssl_certificate_key /run/secrets/privkey.pem;
        ssl_dhparam        /run/secrets/dhparam.pem;
    }
}

我设置了以下环境:

PROXY_ADDRESS_FORWARDING=true

我似乎遇到了以下错误:

nginx_1 | 2018/03/27 21:48:30 [error] 7#7: *1 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: 172.1.0.1, server: localhost, request: "GET /auth/ HTTP/1.1", upstream: "https://172.1.0.3:8080/auth/", host: "localhost.redacted.com"

我需要修改什么才能让 keycloak 接受来自 nginx 的 https 连接?

我会关注实际错误:

ssl3_get_record:wrong version number

这意味着 client/server SSL 记录中的版本不匹配。 所以例如客户端发送 SSL2 client_hello 握手 消息和对方仅为 SSL3/TLS1.

配置