Пустая страница Keycloak за обратным прокси-сервером nginx

После распаковки и запуска keycloak для прослушивания 127.0.0.1 я настроил nginx для работы в качестве обратного прокси, доступного из общедоступного домена через https.

Это конфигурация nginx :

http
{
    server_tokens off;

    upstream keycloak { ip_hash; server 127.0.0.1:8080; }

    server
    {   
        server_name name.domain.tld;
        listen 443 ssl http2; # managed by Certbot
        ssl_certificate /path/to/cert; # managed by Certbot
        ssl_certificate_key /path/to/key; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        location /
        {   
            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;
            add_header Access-Control-Allow-Origin *;
            proxy_pass http://keycloak;
        }
    }


    server
    {   
        server_name name.domain.tld;
        listen 80;
        location / { return 301 https://$server_name; }
    }

}

Ничего не было изменено ни в одном файле в каталоге keycloak.

Keycloak доступен, однако при переходе на страницу входа я обнаружил пустую страницу из-за смешанного содержимого javascript из "/ auth / js / keycloak.js? version = df45z ".

Эту проблему можно временно решить, отключив защиту браузеров от смешанного содержимого, однако это приведет меня к дисфункциональной странице входа с таким сообщением об ошибке:« Извините ... Неверный параметр : redirect_uri ".

Кроме того, HTTP 400 был возвращен из" /auth/realms/master/protocol/openid-connect/auth?client_id=security-admin-console&redirect_uri=https%3A%2F%2Fname.domain.tld % 2Fauth% 2Fadmin% 2Fmaster% 2Fconsole% 2F & state = 5abb646f-d1c8-49ef-8ae1-9358bfc50d6d & response_mode = fragment & respo nse_type = code & scope = openid & nonce = 525b593c-07ab-4afa-8ca0-bd64499061eb ".

(Надеюсь, что его происхождение имеет какое-либо значение)

В предыдущих вопросах, связанных с этой проблемой, предлагалось только добавить директивы proxy_set_header, которые позволили избежать пустого экрана на начальной панели инструментов, которую вы видите при доступе к веб-странице keycloaks, но не помогли в последней упомянутая проблема.

Пожалуйста, примите во внимание, что я новичок в этом предмете, если я пропустил что-то тривиальное.

Любые советы по исправлению этого поведения приветствуются.

0
задан 27 January 2020 в 16:30
3 ответа

У вас все в порядке с конфигурацией nginx. Недавно у меня была такая же проблема, как и у вас, и у меня была более или менее такая же конфигурация nginx.

Единственное, что мне все еще нужно было сделать, это обновить автономный файл конфигурации в папке keycloak. Вы можете найти этот файл по адресу keycloak_folder / standalone / configuration / standalone.xml .

Здесь вам нужно будет найти следующее (+ - строка 572):

<server name="default-server">
    <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" />
    ...
</server>

И добавить proxy-address-forwarding = true вот так:

<server name="default-server">
    <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" proxy-address-forwarding="true" />
    ...
</server>

Это гарантирует, что ваш внутренний сервер keycloak jboss знает адрес прокси.

0
ответ дан 26 February 2020 в 00:44

Дополнение к тому, что написал Торчи:

У меня был включен http_auth на nginx. Я пропустил перезапуск nginx после удаления его из конфигурации.

Отключение http_auth путем перезапуска nginx окончательно решило проблему.

0
ответ дан 26 February 2020 в 00:44

Keycloak принимает env PROXY_ADDRESS_FORWARDING, который помещается в standalone.xml
предоставьте PROXY_ADDRESS_FORWARDING докеру с помощью docker -e или docker-compose раздела environment

1
ответ дан 8 February 2021 в 22:58

Теги

Похожие вопросы