У меня есть NGINX обратный прокси-сервер, который также обслуживает содержимое c в / со следующей конфигурацией
location / {
auth_request /authn;
proxy_intercept_errors on;
recursive_error_pages on;
error_page 301 302 303 307 308 = @handle_redirect;
gzip_static on;
index index.html;
root /usr/share/nginx/html;
try_files $uri $uri/ @index;
}
location /authn {
set $target http://gateway:8030/authn;
proxy_pass http://gateway:8030/authn;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
proxy_pass_request_headers on;
proxy_intercept_errors on;
recursive_error_pages on;
error_page 301 302 303 307 308 @handle_redirect;
}
location @handle_redirect {
proxy_set_header Host $host:$server_port;
set $redirect_url $upstream_http_location;
proxy_pass $redirect_url;
}
Цель состоит в том, чтобы проверить пользователя, прошедшего проверку подлинности посредством подзапроса к конечной точке / authn, которая будет вернуть 302 и заголовок Location, если пользователь не. Но клиент получает 500 из NGINX с журналом ошибок, например
auth request unexpected status: 500 while sending to client
. У меня также есть конечная точка / root, которая poxy-напрямую переходит на шлюз / authn, который правильно перенаправляет на страницу входа и аутентифицирует клиента. Я попытался вместо обработки перенаправлений в подзапросах запросы прокси-прохода к этой конечной точке с установкой
location /root {
set $target http://top-gateway:8030/authn;
proxy_pass http://top-gateway:8030/authn;
}
location /authn {
...
error_page 301 302 303 307 308 /root;
Но в этом случае я получаю 500 и
auth request unexpected status: 302 while sending to client
в NGINX ошибка .log
Почему NGINX неправильно обрабатывает перенаправления с этими настройками и как правильно решить эту проблему?