Бесконечный цикл после входа с Keycloak за обратным прокси - PullRequest
0 голосов
/ 20 июня 2019

Мой сценарий

У меня есть сервер с IP x.x.x.x

Мое веб-приложение работает на порту 8083 сервера.

Keycloak (развернут с докером) работает на порту 8080 сервера.

Я хочу настроить nginx, чтобы при посещении my-website.com он перенаправлялся в мое веб-приложение на x.x.x.x:8083, а при посещении my-website.com/auth он перенаправлялся на Keycloak на x.x.x.x:8080. Я также использую SSL для своего сайта.

Вот мой файл nginx ssl.conf

upstream upstream_auth {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    listen [::]:80;
    server_name my-website.com www.my-website.com;
    return 301 https://my-website.com;
}

server {

    listen       443;
    ssl          on;
    server_name my-website.com;

    ssl_certificate      /etc/ssl/my-website.crt;
    ssl_certificate_key  /etc/ssl/my-website.key;

    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;

    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparams.pem;

    keepalive_timeout    60;
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;


    root /var/lib/tomcat7/webapps/ROOT/;
    client_max_body_size 50M;

    location / {
        proxy_pass  http://127.0.0.1:8083/;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Ssl on;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    location /auth/{
       proxy_pass  http://upstream_auth;
       proxy_http_version 1.1;
       proxy_set_header URI_REQUEST_ORIGIN $request_uri;
       proxy_set_header Host            $host;
       proxy_set_header X-Real-IP       $remote_addr;
       proxy_set_header X-Forwarded-Server $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Ssl on;
       proxy_set_header X-Forwarded-Proto $scheme;

      #proxy_pass_header Set-Cookie;

      proxy_set_header Connection **;
      proxy_set_header Proxy **;
    }
}

Моя проблема:

Когда я захожу на my-website.com/auth, я перехожу на целевую страницу плаща с ключом (как я и ожидал). Затем я нажимаю на консоль администратора и затем вхожу в Master Realm of Keycloak, браузер, кажется, застрял в бесконечном цикле https://my-website.com/auth/admin/master/console/ и https://my-website.com/auth/admin/master/console/#state={constantly-changing-string}&session_state=xxx&code={another-constantly-changing-string}.

Я искал решение, и, кажется, есть много причин, которые могут вызвать это.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 21 июня 2019

Только что разобрался, как исправить мою проблему.

Я добавляю следующую строку в свой docker-compose для Keycloak, и теперь все отлично работает:

 PROXY_ADDRESS_FORWARDING: 'true'

Как написано в https://hub.docker.com/r/jboss/keycloak/:

При запуске Keycloak за прокси-сервером вам необходимо включить переадресацию прокси-адреса.

docker run -e PROXY_ADDRESS_FORWARDING=true jboss/keycloak

Не уверен, почему это работает.Если кто-нибудь может объяснить, пожалуйста, сделайте.Я хотел бы понять мою проблему здесь.

...