Найти тему
Wissance

Keycloak за Nginx c HTTPS или как решить проблему c blocked:mixed content

Оглавление

Недавно я уже писал статью об использовании Mysql в качестве Базы данных для Keycloak и все было хорошо, до тех пор пока я не поставил proxy на шлюзе к виртуальной машине с сервером авторизации, этот прокси также выполняет перенаправление HTTP траффика на HTTPS, т.е. сетевая схема выглядит так:

Схема сети для работы с сервером авторизации
Схема сети для работы с сервером авторизации

Доступ к серверу авторизации нужен снаружи, а сам сервер развернут на отдельной виртуальной машине.

После того как я запустил работу по такой схеме при входе в клонсоль управления, получил белый экран:

Проблема: не грузится keycloak.js
Проблема: не грузится keycloak.js

В результате я не могу зайти в консоль управления сервером авторизации по причине того, что не грузится скрипт с ошибкой blocked content. Как оказалось проблема заключается в том, что все файлы грузятся по HTTPS, а keycloak.js по HTTP и браузеры блокируют загрузку файлов по HTTP если остальные грузятся по HTTPS.

Для решения нужно выполнить 2 вещи:

1. Настроить proxy на Nginx, чтобы устанавливались правильные заголовки запросов

2. В конфигурационном файле keycloak - standalone/configuration/standalone.xml необходимо добавить опцию разрешающую перенаправление адреса

Настраиваем Nginx

server {
listen 80;
server_name auth.example.com;
return 301 https://auth.example.com$request_uri;
}
server {
listen 443;
ssl on;
server_name auth.example.com;
ssl_certificate /etc/nginx/ssl/example.com_bundle;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
proxy_pass http://192.168.156.10:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Access-Control-Allow-Origin *;
}
}

Данная настройка перенаправляет HTTP траффик на HTTPS, а HTTPS является Reverse Proxy для приложения, развернутого на виртуальной машине, основная задача - настроить хедеры (я их честно скопипастил с туториала, достаточно подробно описание этих заголовков можно посмотреть здесь). Не забываем рестартануть сервис nginx (system service nginx restart).

Настраиваем конфиг Keycloak

Для кейклока также придется провести небольшие манипуляции в файле standalone.xml (он расположен в директории standalone/configuration). Добавляем proxy-address-forwarding=true в тэге http-listener:

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

В этом и заключается все настройка, рестарутем приложение (у меня оно установлено как сервис systemd, поэтому я использую тот же system service keycloak restart).