1️⃣🔤
Во время выполнения действия была потеряна связь с сервером...Достаточно давно, периодически (естественно почти не подтверждаемая на тестах) как у наших клиентов РКЛ так и у клиентов нашего Облака стала возникать ошибка как на скриншоте.
Причём возникает она просто при работе клиента с 1С ни с того ни с сего.
В результате попыток понять что-же это за проблема было обнаружено два момента:
▫️Ошибка возникает только при работе с базами по
http/https, по TCP всё хорошо
▫️Ошибка возникает только если обращение к базе 1С идёт через
NGINX, если работать напрямую с apache/iis, то всё хорошо
Ок, определили что с
NGINX что-то не так.
Но как всегда, до этого же всё работало!)))
Поэтому сильно хочется начать поиски ключа там где светло, а не там где потерял ключ...
Включаем лог ошибок в NGINX
в файл nginx.conf вверху добавляем строку:
error_log /var/log/nginx/error.log error;
nginx -t (проверить корректность настройки)
nginx -s reload (перечитываем настройки)
В лог ошибок во время получения ошибки пользователем в 1С фиксируется запись:
[error] 3408371#3408371: *954123377 upstream timed out (110: Connection timed out) while reading response header from upstream, client:
Т.е. у нас срабатывает таймаут
чтения ответа от проксируемого сервера...
Ок, идём на итс и смотрим какие настройки таймаутов
рекомендует 1С и там видим рекомендацию:
proxy_read_timeout 300s;
Но проблема в том, что у нас в настройках уже есть этот параметр и более того он выставлен в значение
3600s, что больше чем рекомендуемое в 20 раз.
Ок, может мы чего-то не понимаем, ставим 300s.
Ситуация поменялась, но уже в части другого.
Ошибок у пользователей осталось как было, а вот других записей в лог ошибок NGINX резко прибавилось:
connect() failed (110: Connection timed out) while connecting to upstream, client:
Вернули параметр в 3600s, всё стало как прежде.
Ну и если честно, то тут прям взяли грех на душу и посчитали что во всём виновато обновление на платформу 1С 8.3.27, так как вроде бы обращения пользователей коррелируют с временем обновления.
Проблема в том. что ошибка практически не повторялась на тесте, а откатить прод. где она есть на предыдущие версии платформы 1С уже было невозможно из-за требований конфигураций 1С...
Так в расстройстве прошло какое-то время, но червячок всё таки грыз понемногу - что ну не может такого быть!)))
Поиск в интернете по ошибке "
upstream timed out (110: Connection timed out) while reading response header from upstream," всё равно приводил к параметру
proxy_read_timeout, что нам не помогало...
И только в одном из форумов был намёк "попробуйте установить значение параметра "proxy_send_timeout" в больше чем по умолчанию (60s)
Ну когда ничего не остаётся надо идти читать документацию)))
▫️
proxy_read_timeout - Задаёт таймаут при
чтении ответа проксированного сервера.
▫️
proxy_send_timeout - Задаёт таймаут при
передаче запроса проксированному серверу
Ну и опять же, вроде мы не тупим - ошибка "
while reading response header from upstream" как раз про
чтение ответа, а это параметр
proxy_read_timeout.
Опять тупик...
С другой стороны, вроде бы нам ничего не мешает установить и значение параметра
proxy_send_timeout в 3600s.
Делаем, и вуаля!!!
Ошибки исчезли!
Вот так разное описание параметра в документации и реакции сервера на этот параметр в логе привело в нескольким неделям блужданий в темноте...
❗️Так что если у вас наблюдается ошибка потери связи и при этом у вас есть
NGINX, то попробуйте установить параметр
proxy_send_timeout в значение
3600s.