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