Назад | Перейти на главную страницу

nginx auth_request как вернуть код состояния бэкэнда

когда серверный прокси используется в 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 это строка.