У меня Puma работает как восходящий сервер приложений, а Riak - как мой фоновый кластер БД. Когда я отправляю запрос, который сокращает фрагмент данных примерно для 25 тысяч пользователей и возвращает его из Riak в приложение, я получаю сообщение об ошибке в журнале Nginx:
Истекло время ожидания восходящего потока (110: Истекло время ожидания соединения) при чтении заголовка ответа из восходящего потока
Если я запрашиваю свой апстрим напрямую, без прокси-сервера nginx, с тем же запросом я получаю необходимые данные.
Тайм-аут Nginx наступает после установки прокси.
**nginx.conf**
http {
keepalive_timeout 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
server 127.0.0.1:3000 max_fails=0 fail_timeout=600;
}
server {
listen 81;
server_name xxxxx.com; # change to match your URL
location / {
# match the name of upstream directive which is defined above
proxy_pass http://ss_api;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache cloud;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass http://ss_api/account/;
add_header X-Cache-Status $upstream_cache_status;
}
}
В Nginx есть несколько директив тайм-аута. Не знаю, упускаю ли я что-то важное. Любая помощь будет высоко ценится....
Ответы:
Это происходит потому, что вашему восходящему потоку требуется слишком много времени, чтобы ответить на запрос, и NGINX считает, что восходящий поток уже не смог обработать запрос, поэтому он отвечает с ошибкой. Просто включите и увеличьте proxy_read_timeout в
location
блоке конфигурации. То же самое произошло со мной, и я использовал тайм-аут в 1 час для внутреннего приложения на работе:При этом NGINX будет ждать час (3600 с), пока его восходящий поток что-то не вернет.
источник
proxy_read_timeout
в разделе http может не помочь. У меня естьproxy_pass
директива в разделе местоположения, и только тамproxy_read_timeout
настройка имеет значение. (nginx 1.16.0)Вы всегда должны воздерживаться от увеличения тайм-аутов, я сомневаюсь, что время ответа вашего внутреннего сервера является проблемой в любом случае.
Я обошел эту проблему, сняв флаг активности соединения и указав версию http в соответствии с ответом здесь: https://stackoverflow.com/a/36589120/479632
К сожалению, я не могу объяснить, почему это работает, и мне не удалось расшифровать это из документов, упомянутых в ответе, поэтому, если у кого-то есть объяснение, мне было бы очень интересно его услышать.
источник
proxy_read_timeout
если вы знаете, что прокси (даже для определенного URL-адреса) требует больше времени на обработку?$http_host
право? Я предполагаю, что это не сработает для https. Возможно, потребуются дополнительные настройки для проксирования https-запросов.Сначала выясните, какой восходящий поток замедляется, проконсультировавшись с файлом журнала ошибок nginx и соответствующим образом отрегулируйте время чтения, в моем случае это был fastCGI
Поэтому мне нужно настроить fastcgi_read_timeout в конфигурации моего сервера
См .: исходный пост
источник
В вашем случае это поможет небольшая оптимизация прокси, или вы можете использовать "# настройки тайм-аута"
источник
proxy_pass
в разделе местоположения .Я думаю, что эта ошибка может возникать по разным причинам, но может быть специфичной для используемого вами модуля. Например, я видел это с помощью модуля uwsgi, поэтому пришлось установить uwsgi_read_timeout.
источник
Я бы рекомендовал взглянуть на
error_logs
, в частности, на восходящую часть, где он показывает конкретный восходящий поток, который истекает.Затем в зависимости от этого вы можете настроить
proxy_read_timeout
,fastcgi_read_timeout
илиuwsgi_read_timeout
.Также убедитесь, что ваш конфиг загружен.
Подробнее здесь Истекло время ожидания восходящего потока Nginx (почему и как исправить)
источник
Как указывали здесь многие другие, увеличение настроек тайм-аута для NGINX может решить вашу проблему.
Однако увеличение настроек тайм-аута может быть не таким простым делом, как предлагают многие из этих ответов. Я сам столкнулся с этой проблемой и попытался изменить настройки тайм-аута в файле /etc/nginx/nginx.conf , как предлагают почти все в этих потоках. Это мне нисколько не помогло; в настройках тайм-аута NGINX не было явных изменений. Теперь, много часов спустя, мне наконец удалось решить эту проблему.
Решение находится в этой ветке форума , и в нем говорится, что вы должны поместить настройки тайм-аута в /etc/nginx/conf.d/timeout.conf (и если этот файл не существует, вы должны его создать). Я использовал те же настройки, что и в ветке:
источник
У меня была та же проблема, и в результате в контроллере рельсов возникала ошибка «каждый день». Я не знаю почему, но на производстве puma снова и снова запускает ошибку, вызывая сообщение:
Истекло время ожидания восходящего потока (110: Истекло время ожидания соединения) при чтении заголовка ответа из восходящего потока
Вероятно, потому что Nginx снова и снова пытается получить данные от puma. Забавно то, что ошибка вызвала сообщение о тайм-ауте, даже если я вызываю другое действие в контроллере, поэтому одна опечатка блокирует все приложение.
Проверьте свой файл log / puma.stderr.log, чтобы узнать, так ли это.
источник
С нашей стороны использовался spdy с кешем прокси. Когда срок действия кеша истекает, мы получаем эту ошибку до тех пор, пока кеш не будет обновлен.
источник
Надеюсь, это кому-то поможет: я столкнулся с этой ошибкой, и причиной было неправильное разрешение в папке журнала для phpfpm, после изменения ее, чтобы phpfpm мог писать в нее, все было в порядке.
источник
Для
proxy_upstream
тайм-аута я попробовал вышеуказанные настройки, но они не сработали.Настройка
resolver_timeout
сработала для меня, зная, что на создание сообщения о тайм-ауте восходящего потока уходит 30 секунд. Например, me.atwibble.com не может быть решен (110: время ожидания истекло) .http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
источник