Тайм-аут NGINX + PHP-FPM через 30 секунд - PullRequest
0 голосов
/ 19 октября 2019

Во-первых, я искал и читал много SO и других сайтов. Я перепробовал все, но, тем не менее, это случилось.

У меня есть несколько длительных запросов для частного сайта. Некоторые запросы занимают более 2 минут. Я использую PHP 7.2.19 с ОС Ubuntu 19.04, NGINX 1.15.9.

Вот настройки, которые я изменил.

/ etc / php / 7.2 / fpm / php. ini: max_execution_time = 300

/ etc / php / 7.2 / fpm / pool.d / www.conf: request_terminate_timeout = 300

/ etc / nginx / sites-available / default:

client_header_timeout 300;
keepalive_timeout 300;
client_body_timeout 300;
send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
fastcgi_connect_timeout 300;

По сути, все меняется на 5 минут, но все равно я получаю Gateway timeout через 30 секунд.

Я пробовал Firefox на своем рабочем столе и Safari на iOS. Оба имеют одинаковую проблему, поэтому я не думаю, что это связано с тайм-аутом моего браузера.

Ответ имеет следующие заголовки и текст. Как ни странно, в заголовках нет никаких признаков PHP или NGNIX. Это не имеет смысла для меня, так как я ожидаю, что обе они отправят свои версии даже при истечении времени ожидания.

Заголовки тайм-аута:

HTTP/1.1 504 Gateway Timeout
Content-Type: text/html; charset=UTF-8
Content-Length: 219

Тело HTML тайм-аута:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>504</title>
<meta http-equiv="Cache-Control" content="no-cache"/>
</head>
<body>
<p>
Gateway Timeout 
</p>
</body>
</html>

Я не могу найти причину этого тайм-аута. Кажется, все в порядке, кроме результата, конечно:)

Наконец, я вижу 499 кодов состояния в журнале доступа NGINX, когда происходит тайм-аут. После прочтения я выяснил, что это означает, что клиенты закрыли соединение, но второй ответ здесь упоминает, что client может означать сервер FCGI, а не обязательно браузер.

Код моего приложения для этой страницы выполняет множество внутренних HTTP-запросов к одному и тому же коду, используя Guzzle, и выполняет тот же NGINX. Дело в том, что даже после того, как тайм-аут произошел в браузере, через некоторое время я вижу, что внутренние запросы регистрируются с кодом состояния 200, что означает, что мое приложение все еще выполняет код! Даже журналы приложений показывают, что оно все еще работает, хотя браузер показал тайм-аут.

Я так запутался, где искать дальше.

...