После распаковки и запуска 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 & response_type = code & scope = openid & nonce = 525b593c-07ab-4afa-8ca0-bd64499061eb ".
(Надеясь, что его происхождение имеет какую-то ценность)
В предыдущих вопросах, касающихся этой проблемы, предлагалось только добавить директивы proxy_set_header, которые позволили избежать пустого экрана на начальной панели инструментов, которую вы видите при доступе к веб-странице keycloaks, но не помогли в последней упомянутой проблеме.
Пожалуйста, примите во внимание, что я новичок в этой теме, если я пропустил что-то тривиальное.
Мы высоко ценим любые советы по исправлению такого поведения.
Ваша конфигурация 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 знает адрес прокси.
В дополнение к тому, что написал Торчи:
У меня был включен http_auth на nginx. Я пропустил перезапуск nginx после удаления его из конфигурации.
Отключение http_auth путем перезапуска nginx окончательно решило проблему.