ルートサーバーでKeycloakをセットアップしようとしていますが、インターネットから管理コンソールにアクセスできません。キークロークサーバーをインストールし、同じマシンのnginxリバースプロキシの背後に配置しました。ドメインのletsencrypt証明書を設定しました。スクリプトを介してキークロークの管理ユーザーもセットアップしました。
ドメインhttps://<my-domain>
のサーバーにアクセスすると、https://<my-domain>/auth
に転送され、「管理コンソール」へのリンクがあるキークロークのウェルカムページが表示されます。このリンクはhttps://<my-domain>/admin
を指していますが、404を示しています。
最初はこれがnginxの問題かもしれないと思ったので、ドキュメントのガイドに従ってロードバランサーをセットアップしました( https://www.keycloak.org/docs/latest/server_installation/index.html# _setting-up-a-load-balancer-or-proxy )。そこで、「構成の検証」の下で、パスhttps://<my-domain>/auth/realms/master/.well-known/openid-configuration
を開くように指示されます。これは期待どおりに機能し、いくつかのリンクとその他の情報が含まれたjsonファイルを取得します。ただし、これらのリンクはどれも機能しません。すべて404になります。
https://<my-domain>/auth/realms/master
を試すと、JSON応答が返されます。いくつかのリンクは機能するので、nginxの問題ではなく、キークローク自体の問題だと思います。
基本的な質問は次のとおりです。インターネット経由で管理コンソールにアクセスできるようにKeycloakを構成するにはどうすればよいですか?デフォルトではlocalhostでしかアクセスできないと読みましたが、このデフォルトを上書きする方法が必要ですか?
関連するnginx設定:
upstream keycloak {
server 127.0.0.1:8080;
}
server {
listen 443 ssl http2;
# some ssl configuration for letsencrypt
location / {
proxy_pass http://keycloak;
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-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
編集したkeycloak/standalone/configuration/standalone.xml
の一部:
<subsystem xmlns="urn:jboss:domain:undertow:10.0" ...>
...
<server name="default-server">
<http-listener name="default"
socket-binding="http"
redirect-socket="proxy-https"
enable-http2="true"
proxy-address-forwarding="true" />
...
</server>
...
</subsystem>
...
<interfaces>
<interface name="management">
<any-address />
</interface>
<interface name="public">
<any-address />
</interface>
</interfaces>
<socket-binding-group name="standard-sockets" ...>
...
<socket-binding name="proxy-https" port="443" />
...
</socket-binding-group>
編集
直せました。問題は、キークロークが最初のページをhttps://<my-domain>/
からhttps://<my-domain>/auth
にリダイレクトしていたが、他のすべてのリンクでこの追加の/auth
が欠落していたことでした。そのため、管理リンクはhttps://<my-domain>/admin/master/console
部分なしで/auth
を指しており、このページは存在しませんでした。 /auth
を含むURLを手動で入力すると、「loading ..」メッセージが含まれるページが表示されましたが、すべてのスタイルおよびJavaScriptファイルがリンクされており、URLに/auth
の部分がないため、何もありませんでしたワーキング。
これを修正するために、standalone.xml
の行<web-context>auth</web-context>
を<web-context>/</web-context>
に変更し、すべてが期待どおりに動作するようになりました。スタートページでのリダイレクトはなくなり、すべてのリンクは/auth
部分なしで機能します。ただし、そもそもそれが機能しなかった理由と、/auth
リダイレクトが意図されていた場合にこれをどのように解決するかは興味深いでしょう。
Kubernetesクラスターのnginxリバースプロキシの背後にあるキークロークインスタンスでも同じ問題が発生しました。 env PROXY_ADDRESS_FORWARDINGをtrueに設定して修正しました。 PROXY_ADDRESS_FORWARDING=true
ブラウザで/ auth/admin/master/console /を開いてみてください。
追加情報:
https://www.keycloak.org/docs/latest/getting_started/index.html
https://www.keycloak.org/docs-api/8.0/rest-api/index.html
ああ、私はドッキングされたキークロークを使うことを勧めます。はるかに簡単な場合は、新しいバージョンへのアップグレードパス。