nginx反向代理後面的keycloak空白頁
在解壓並啟動 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 是可訪問的,但是當導航到登錄頁面時,由於來自“/auth/js/keycloak.js?version=df45z”的混合內容 javascript,我遇到了一個空白頁面。
這可以通過禁用瀏覽器對混合內容的保護來暫時解決,但是這將使我進入功能失調的登錄頁面,並給出以下錯誤消息:“我們很抱歉…無效參數:redirect_uri”。
此外,從“/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 伺服器知道代理地址。