Nginx

nginx反向代理後面的keycloak空白頁

  • October 27, 2021

在解壓並啟動 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 伺服器知道代理地址。

引用自:https://serverfault.com/questions/1000567