upstream timed out 101 — ошибка, которая возникает при превышении лимита ожидания выполнения скрипта веб-сервером. Часто при таймауте соединения клиент будет видеть 504 ошибку.
upstream timed out 110 connection timed out в Nginx
В логах ошибки будут выглядеть так:
grep 'upstream timed out' /var/log/nginx/error.log
2018/08/13 17:01:03 [error] 32147#32147: *1197966 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 123.123.123.123, server: example.com, request: «POST /api.php/shop.product.update?id=3268 HTTP/1.1», upstream: «fastcgi://unix:/var/run/php7.0-example.sock», host: «example.com»
Если такие записи появляются прежде всего нужно установить причины.
Возможны два варианта:
- код так работать не должен — ждет ответа от какого-то недоступного ресурса или базы
- длительное выполнение нормально в данной ситуации
В первом случае нужно проводить диагностику, искать и устранять причины.
Во втором случае достаточно увеличить лимиты. Обычно так приходится делать в случае с выгрузками товаров на сайт, которые могут выполняться в течение нескольких часов.
Параметры значения которых нужно править зависят от сервиса, который используется на бэкенде. Это тот сервис, в который проксирует запросы Nginx и который обрабатывает скрипты.
В случае с PHP таких сервиса может быть два: PHP-FPM и Apache.
Как исправить ошибку если используется PHP-FPM
Про связку Nginx + PHP-FPM можно найти информацию в статье по ссылке
Если скрипты выполняет fpm — меняется значение параметра fastcgi_read_timeout 400; (о директиве в документации Nginx)
Значение в секундах можно значительно увеличивать, обычно достаточно 400.
location / {
index index.php;
try_files $uri $uri/ =404;
fastcgi_connect_timeout 20;
fastcgi_send_timeout 120;
fastcgi_read_timeout 400;
}
Лимит может превышаться при длительном выполнении PHP скриптов.
Как исправить ошибку если используется Apache
Материал про данную конфигурацию доступен по ссылке.
При проксировании требуется добавить директиву proxy_read_timeout 150;
Значение также как в первом случае задается в секундах и означает лимит времени между операциями чтения.
location / {
index index.php;
try_files $uri $uri/ =404;
proxy_read_timeout 150;
…
}
После изменения конфигурации веб-сервер требуется её перечитать командой nginx -s reload. После этого процесс увидит и начнет использовать новые параметры и значения.