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

Пустая страница 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.

Эту проблему можно временно решить, отключив защиту браузера от смешанного контента, однако это приведет к тому, что я попаду на нефункциональную страницу входа, на которой появится следующее сообщение об ошибке: We are sorry... Invalid parameter: 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&response_type=code&scope=openid&nonce=525b593c-07ab-4afa-8ca0-bd64499061eb.

(Надеюсь, его происхождение имеет какую-то ценность)

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

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

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

решение1

Ваша конфигурация Nginx выглядит нормально. Недавно у меня была та же проблема, что и у вас, и у меня была более или менее та же конфигурация Nginx.

Единственное, что мне еще нужно было сделать, это обновить файл конфигурации standalone в папке 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 будет знать адрес прокси-сервера.

решение2

Keycloak принимает PROXY_ADDRESS_FORWARDINGenv, который помещается вstandalone.xml

<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>

предоставить PROXY_ADDRESS_FORWARDINGdocker либо с помощью docker -e, либо с environmentпомощью раздела docker-compose

решение3

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

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

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

решение4

Наконец я исправил проблему.

Большинство ответов в Google — установить PROXY_ADDRESS_FORWARDINGзначение true. Но в моей среде это не работает.

Наконец я увидел этот ответ:https://github.com/codecentric/helm-charts/issues/271#issuecomment-920600882

После того как я установил KEYCLOAK_FRONTEND_URL, теперь все работает

Добавьте следующую переменную среды.

KEYCLOAK_FRONTEND_URL=https://{{ URL }}/auth

Связанный контент