Доброе утро. Есть проблема, которую не понимаю как еще отдебажить

и решить.
Есть nginx, который проксирует запросы на некий апстрим (фактически тоже веб-сервер, только самописный).
От пользователя присылается некий POST запрос. Иногда nginx отбивает в ответ 502 ошибкой (каждый второй, каждый третий-четверты запрос).
Если разбираться, то получается следующее:

Все указанные запросы делаются с сервера, на котором размещен nginx proxy.
1. запрос напрямую в самописный веб-сервер (в ответе сервере data не показываем, только лишь заголовки ответа)
curl -sSL -D - -X POST -H "Content-Type: application/json" -d @json.txt -vvv "http://self-written-web-server:20000/my/?user_id=1&request=e36216c7" -o /dev/null

2.Запрос в него же через nginx:
curl -sSL -D - -X POST -H "Content-Type: application/json" -d @json.txt -vvv "http://nginx-host/my/?user_id=1&request=e36216c7" -o /dev/null

Файл json.txt размером где-то 500K.

Проксирование на nginx выглядит так:
location /my/ {
proxy_pass http://self-written-web-server:20000/;
}

Все curl запросы напрямую в self-written-web-server всегда успешно заканчиваются.
Если посмотреть логи веб-сервера nginx в момент проблемы, то там есть следующее:
[warn] 8840#0: *7453145025 a client request body is buffered to a temporary file /home/nginx/tmp/body/0486399818, client: self-written-web-server, server: some-hostname, request: "POST /my/?id=1&request_id=e36216c7 HTTP/1.1", host: "nginx-host"
[error] 8840#0: *7453145025 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: nginx-host, server: some-hostname, request: "POST /my/?id=1&request_id=e36216c7 HTTP/1.1", upstream: "http://self-written-web-server:20000/?id=1&request_id=e36216c7", host: "nginx-host"
"502" self-written-web-server:20000 0.000 - "POST /my/?id=1&request_id=e36216c7 HTTP/1.1" -

При этом на самописном веб-сервере в момент проблемного запроса логов нету.

Обычно ошибка Connection reset by peer) while reading response header from upstream говорит, что надо смотреть апстрим, на который nginx пересылает запрос.
Но запросы минуя nginx, всегда заканчиваются успешно.
Куда еще можно посмотреть, в какие опции?
Пробовал ngx_http_proxy_module покрутить (https://nginx.org/ru/docs/http/ngx_http_proxy_module.html), но безуспешно.

8 ответов

22 просмотра

Не успевает сервер отвечать. Сделать несколько апстримов на него, nginx будет слать запросы по очереди

А json-ы меньшего размера пролезают? Не 500, а, скажем, 50 кб?

Andrey-A Автор вопроса
Rhayader
Не успевает сервер отвечать. Сделать несколько апс...

речь про самописный веб-сервер? (что не успевает). Запросы напрямую на него курлом с сервера с nginx всегда проходят

Andrey A
речь про самописный веб-сервер? (что не успевает)....

Сделай курлом в скрипте 100 запросов подряд, увидишь что не всегда )

proxy_request_buffering off стоит?

Andrey-A Автор вопроса
Rhayader
Сделай курлом в скрипте 100 запросов подряд, увиди...

проверил, курлом раз в 2 сек, напрямую в самописный веб-сервер - 0 ошибок (все 200 ответы), через прокси - всего из 19 запросов, 3 bad gateway было

Andrey-A Автор вопроса
kiosaku
proxy_request_buffering off стоит?

да, изначально стояло, попробовал on также, не помогло

У тебя же всё в ошибке описано - (104: Connection reset by peer) Nginx считает, что твой сервер рвёт соединение. Почему он рвёт? Ну может слишком много времени ждал ответа от Nginx, пока nginx положил тело запроса в буфер, пока перешлёт запрос бэку. Вообще я сталкивался, что в таких случаях помогает keepalive директива. Я бы ещё посмотрел в сторону таймаутов keep-alive, при их несовпадении периодически соединение может рваться.

Похожие вопросы

Обсуждают сегодня

1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Hi! Could you please upvote my new notebook? thanks a lot. https://www.kaggle.com/code/melissamonfared/anime-character-generation-dsgan-gan
məru
4
upvote plz https://www.kaggle.com/code/bassetkerouche/swapping-face?scriptVersionId=207300096
benkerrouche Statoinary
1
-- Привет всем. -- Есть csv, проблема в том что он содержит очень много повторов по столбцам и по строкам. -- Решил перекинуть это в базу данных, чтобы было проще. Но я не ша...
Oleg Ivanov
1
Как считаете - вопрос на собесе: «Как быстрее всего запустить ec2 машину в aws (в чистом аккаунте) и показать вывод от любой команды с нее» не очень ли сложный для условного м...
Sergey
50
Господа, у меня вопрос. Что вообще такое этот ваш data science и data scientists? А то гуглю, а мне какую-то расплывчатую фигню говорят.
Inkosta
44
Исходя из ваших комментариев, получается, что чтобы получить марты в CH из данных в PG, неправильно тянуть сырые данные в CH и там их обрабатывать, лепить справочники и джойни...
unhingedlunatic
42
Hi could you please help me with my two new projects? https://www.kaggle.com/code/hesankazemnia/rice-image-classification-cnn-pytorch https://www.kaggle.com/code/hesankazemnia...
Hesan
6
hi, Can you upvote? https://www.kaggle.com/code/durjoychandrapaul/rag-q-a-system-by-langchain-huggingface-for-pdf?scriptVersionId=204704280
A
1
Could you upvote and comment please? https://www.kaggle.com/code/tatianapetrushkevich/beginner-images https://www.kaggle.com/code/tatianapetrushkevich/python-for-beginners1 ...
Tazziyana
7
Карта сайта