nginx 역방향 프록시 뒤에 있는 Keycloak 빈 페이지

nginx 역방향 프록시 뒤에 있는 Keycloak 빈 페이지

127.0.0.1에서 수신 대기하기 위해 압축을 풀고 keycloak을 시작한 후 https를 통해 공개적으로 사용 가능한 도메인에서 액세스할 수 있는 역방향 프록시로 작동하도록 nginx를 구성했습니다.

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.

We are sorry... Invalid parameter: 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.

(원산지가 어떤 가치가 있기를 바랍니다)

이 문제와 관련된 이전 질문에서는 keycloaks 웹 페이지에 액세스할 때 표시되는 초기 대시보드의 빈 화면을 방지했지만 나중에 언급된 문제에는 도움이 되지 않는 Proxy_set_header 지시문을 추가하도록 제안했습니다.

내가 사소한 것을 놓친 경우 이 주제에 대해 아주 새로운 내용임을 고려하십시오.

이 문제를 해결하기 위한 조언을 주시면 감사하겠습니다.

답변1

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 서버가 프록시 주소를 인식하게 됩니다.

답변2

Keycloak은 PROXY_ADDRESS_FORWARDING다음 위치에 배치되는 환경을 허용합니다.standalone.xml

<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>

PROXY_ADDRESS_FORWARDINGdocker -e 또는 docker-compose environment섹션을 사용하여 docker에 제공

답변3

Thorchy가 쓴 내용에 추가:

nginx에서 http_auth를 활성화했습니다. 구성에서 nginx를 제거한 후 다시 시작하는 것을 놓쳤습니다.

nginx를 다시 시작하여 http_auth를 비활성화하면 문제가 마침내 해결되었습니다.

답변4

마침내 문제가 해결되었습니다.

Google의 대부분의 답변은 PROXY_ADDRESS_FORWARDINGtrue로 설정하는 것입니다. 하지만 내 환경에서는 작동하지 않습니다.

마침내 나는 이 대답을 보았다:https://github.com/codecentric/helm-charts/issues/271#issuecomment-920600882

설정한 후에는 KEYCLOAK_FRONTEND_URL이제 작동합니다.

아래 환경변수를 추가합니다.

KEYCLOAK_FRONTEND_URL=https://{{ URL }}/auth

관련 정보