Re: Nginx отдает клиенту 502, но получает от backend 401

Maxim Dounin mdounin на mdounin.ru
Чт Авг 23 14:26:20 UTC 2018


Hello!

On Wed, Aug 22, 2018 at 07:51:47AM -0400, Dmitry WD wrote:

> Столкнулись с проблемой - при попытке загрузить файл, не авторизовавшись,
> backend отвечает 401, но nginx отдает клиенту 502.
> Но если например сделать запрос без отправки файла, но с отправкой формы,
> nginx отдает как и надо 401.
> 
> Пока предположение такое:
> Для всех запросов на backend работает защитник, который из всех данных
> загружает и смотрит только заголовки.
> Если заголовки не содержат верный токен доступа то запросу отдаётся 401 и на
> этом конец.
> В запросе POST через nginx идут данные, килобайты, мегабайты и т.д.
> Nginx получает их в буфер и пытается отправить на backend, но сразу после
> отправки заголовков получает 401.
> А так как не отправил все данные и их backend отказался читать считает что
> backe-end недоступен.
> 
> Такое может быть?
> И главное как сделать так чтобы nginx отдавал клиенту 401?

Вероятнее всего проблема в том, что бэкенд, возвращая 401, не 
делает lingering close, а просто закрывает соединение.  В результе 
nginx'у вслед за ответом улетает RST, и ответа nginx просто не 
получает.  Лечится это только на стороне бэкенда.

Всё, что можно было выжать из работы с такими бэкендами на стороне 
nginx'а - уже выжато, о чём можно прочитать в тикете тут: 
https://trac.nginx.org/nginx/ticket/1037.  Если вдруг на бэкенде 
guncorn - там же есть ссылка, по которой можно пойти и настучать 
по голове авторам.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru