Nginx в качестве обратного прокси для защищенного приложения Keycloak с SSI - PullRequest
0 голосов
/ 08 мая 2020

Я использую Nginx в качестве обратного прокси для приложения Spring Boot, которое защищено с помощью Keycloak.

Я также использую Nginx для выполнения запросов SSI для создания последней HTML страницы из разных фрагментов, возвращаемых приложением. Поскольку приложение защищено, запросы, сделанные процессором SSI к приложению для получения фрагментов страницы, отклоняются Keycloak, и вместо этого возвращается страница входа в Keycloak.

Я думаю, что это связано с тем, как Keycloak выполняет аутентификацию, которая включает в себя серию из 302 редиректов, которые Nginx не может обработать.

Я хочу знать, какова методология работы такой настройки.


nginx.conf соответствующие части :

worker_processes  1;
events {
    worker_connections  1024;
}

error_log logs/error.log debug;

http {

    upstream localhost {
        server 127.0.0.1;
    }

    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  127.0.0.1;
        ssi on;
        client_max_body_size 100M;
        port_in_redirect off;

        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-App-Port  80;
        proxy_set_header X-Forwarded-App-Proto  http;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $remote_addr;

        location / {
            # to enable Nginx to handle 302 instead of ignoring them
            recursive_error_pages on;
            proxy_intercept_errors on;
            error_page 301 302 307 = @handle_redirect;

            proxy_pass http://127.0.0.1:9001;
        }

        location @handle_redirect {
            recursive_error_pages on;
            proxy_intercept_errors on;
            error_page 301 302 307 = @handle_redirect;

            # to make Nginx follow the 302 redirects and complete the authentication
            set $saved_redirect_location $upstream_http_location;
            proxy_pass $saved_redirect_location;
        }

        error_page  302 404 500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
...