Я использую 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;
}
}
}