когда серверный прокси используется в auth_request
возвращает код ошибки, отличный от 401 или 403, nginx возвращает код ошибки 500.
Модуль ngx_http_auth_request_module (1.5.4+) реализует авторизацию клиента на основе результата подзапроса. Если подзапрос возвращает код ответа 2xx, доступ разрешен. Если он возвращает 401 или 403, доступ запрещается с соответствующим кодом ошибки. Любой другой код ответа, возвращенный подзапросом, считается ошибкой.
Есть ли способ заставить nginx возвращать код состояния из бэкэнда, а не 500?
Нашел рабочее решение. Он использует тот факт, что auth_request
всегда будет возвращать код ошибки 500 в случае внутренней ошибки, отличной от 401 или 403:
error_page 500 @process_backend_error;
location / {
auth_request /auth
auth_request_set $backend_status $upstream_status
}
location /auth {
proxy_pass ...
}
location @process_backend_error {
# here you have access to $backend_status which contains the returned status code from your autorization backend
}
Помните, что возвращенный код состояния в $backend_status
это строка.