Назад | Перейти на главную страницу

PHP7.3-FPM с Apache: истекло время ожидания выполнения запроса неизвестного скрипта

Я настроил событие Apache 2.4 MPM с PHP7.3-FPM на довольно загруженном веб-сервере следующим образом:

Timeout 90

<Proxy "unix:/run/php/php7.3-fpm.sock|fcgi://php-fpm">
    ProxySet disablereuse=on timeout=90
</Proxy>

<FilesMatch ".+\.php$">
        SetHandler proxy:fcgi://php-fpm
</FilesMatch>

Конфигурация PHP в /etc/php/7.3/fpm/php.ini установлена ​​на

max_execution_time=60

PHP-FPM настроен в /etc/php/7.3/fpm/pool.d/www.conf для

request_terminate_timeout=90

Таймауты чтения настраиваются в /etc/apache2/mods-enabled/reqtimeout.conf следующим образом:

RequestReadTimeout header=20-120,minrate=50
RequestReadTimeout body=60-120,minrate=50

В журнале FPM теперь я вижу каждую минуту 1-2 воркера для неизвестных запросов, которые завершаются через 90+ секунд.

[16-May-2019 09:25:32] WARNING: [pool www] child 105567, script '' (request: " ") execution timed out (113.002653 sec), terminating
[16-May-2019 09:25:32] WARNING: [pool www] child 105567 exited on signal 15 (SIGTERM) after 4050.136381 seconds from start
[16-May-2019 09:25:32] NOTICE: [pool www] child 110414 started

Если я не установлю request_terminate_timeout чтобы убить этих воркеров, они дольше (~ 5 минут) остаются в состоянии «Чтение заголовков» и блокируют пул PHP-FPM.

Кажется, что потоки в Apache MPM все равно не блокируются. Ничто не достигает максимальных значений рабочих.

Как я могу увидеть, к какому сценарию / запросу принадлежат эти PHP-воркеры? Почему эти скрипты запускаются даже после max_execution_time 60 секунд истекло? Как я могу избежать блокировки пула PHP такими запросами?

Я подозреваю, что иногда могут быть неполные запросы HTTPS, которые каким-то образом запускают рабочий PHP. Есть ли способ избежать запуска работника PHP для этого?