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

и решить.
Есть 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 ответов

12 просмотров

Не успевает сервер отвечать. Сделать несколько апстримов на него, 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, при их несовпадении периодически соединение может рваться.

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

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

Всем привет, есть таблица компонентов (например материнка, процессор, видеокарта и тд) components и нужно еще реализовать механизм "совместимости" (те какой-то словарь, мол од...
Vladimir
2
Hello, I want to ask. I trained EfficientNet V2 Small and achieved 98% accuracy and F1 score on test data. I did the same with a simple CNN and achieved 97% accuracy and F1 sc...
~
2
Может кто подсказать какие требования к изображениям для обучения Yolo v8? Как то разрешение, размер выделяемого обьекта в пикселях, оптимальное кол-во изображений. А то я пыт...
Владислав😎
16
Can you please upvote this work? https://www.kaggle.com/code/melissamonfared/mental-health-music-relationship-analysis-eda
məł
1
Только сейчас дошли руки до Orange pi 5. Это нормально что на нем YOLOv5s выдает 1 кадр раз в 2-3 секунды на CPU? Это без оптимизаций и прочих настроек, просто голый запуск че...
Denis
17
Доброе утро. Подскажите, если если 4 корутины, внутри которых VideoCapture, то будут ли они работать асинхронно? Т.к. нагуглил, что Videocapture в моменте может быть открыт то...
Alexander👨‍💻
19
Всем привет! подскажите пожалуйста как можно увеличить качество фото?
Evgeniy
19
did anyone recieve update from Amazon ML summer school?
Lucky Champ
1
А. То есть задача такая, что тип вы обучаете на разных данных модели. Получаете пачку моделей обученных на частных данных и задача стоит в том, чтобы все эти модели объединит...
Anton 『被遗忘的社会』
7
Hello everyone, ребят, к какому уровню сложности может относиться задачка по отделению облаков от неба для видео? (от 1 до 10,) *в условиях смены времени суток *при неизменно...
Merge
16
Карта сайта