Я устанавливаю роя Docker со следующими сервисами:
* nginx (действует как обратный прокси) [версия докера alpine-14]
* wildfly (обслуживает мое защищенное приложение)
* keycloak (защита моего приложения) [версия док-станции Keycloak4.0.0.Final]
Все идет хорошо, и я могу аутентифицироваться и получать доступ к своему приложению, когда у меня есть только одна копия моего приложения.
НО когда я пытаюсь масштабировать свой сервис wildfly до более чем одной реплики, я могу получить доступ к странице входа в систему и после ввода учетных данных выдает ошибку ERR_TOO_MANY_REDIRECTS
.
Я попытался изменить конфигурацию прокси-сервера nginx для пересылки запросов на порты https и http для keycloak, а на стороне keycloak я попытался добавить
environment:
PROXY_ADDRESS_FORWARDING: "true"
Почти все работает, когда у меня есть только одна реплика моего сервиса wildfly ... но та же самая ошибка продолжает появляться, если у меня> 1 его копия.
Это мой конфигурационный файл nginx:
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/ssl/fullchain.pem; # path to your cacert.pem
ssl_certificate_key /etc/ssl/privkey.pem; # path to your privkey.pem
server_name testsite.com;
rewrite ^/$ /web/ permanent;
location / {
proxy_pass http://wildfly.service.com:8080/;
proxy_redirect off;
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-Host $server_name;
proxy_set_header X-Forwarded-Proto https;
# to avoid upstream sent too big header while reading response header from upstream ERROR
# thanks to https://ma.ttias.be/nginx-proxy-upstream-sent-big-header-reading-response-header-upstream/
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_pass_header Set-Cookie;
}
location /auth {
# proxy_pass http://keycloak.service.com:8080/auth;
proxy_pass https://keycloak.service.com:8443/auth;
proxy_redirect off;
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-Host $server_name;
proxy_set_header X-Forwarded-Proto https;
# to avoid upstream sent too big header while reading response header from upstream ERROR
# thanks to https://ma.ttias.be/nginx-proxy-upstream-sent-big-header-reading-response-header-upstream/
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_pass_header Set-Cookie;
}
}
Мой конфиг keycloak:
Enabled ON
Consent Required OFF
Login Theme --
Client Protocol openid-connect
Access Type Public
Standard Flow Enabled ON
Implicit Flow Enabled OFF
Direct Access Grants Enabled OFF
Authorization Enabled OFF
Root URL https://testsite.com/
* Valid Redirect URIs https://testsite.com/* http://testsite.com/*
Base URL https://testsite.com/
Admin URL --
Web Origins +
Мой конфиг keycloak на стороне приложения wildfly:
{
"realm": "realm_name",
"auth-server-url": "https://testsite.com/auth",
"ssl-required": "external",
"resource": "client-web",
"public-client": true,
"use-resource-role-mappings": true,
"confidential-port": 0
}
Ожидаемый результат: аутентификация без ошибок при масштабировании службы более чем на 1 контейнер.