Конфигурационный файл
Синтаксис
Синтаксис конфигурационного файла однозначно определяется в терминах:
- Конфигурация — последовательность параметров
- Параметр — имя без пробельных символов со следующим за ним значением, отделенным хотя бы одним пробельным символом
- Значение — строка без пробельных символов / строка, заключенная в кавычки / вложенная конфигурация, заключенная в фигурные скобки
Конфигурация
Дополнительные ограничения / соглашения:
- Значения всех временных параметров задаются как целые числа, единица измерения — миллисекунды — не указывается
Все FastCGI-приложения, которыми должен управлять Пускач, должны быть либо явно описаны в конфигурационном файле, либо должна быть определена конфигурация по умолчанию. Приложение описывается параметром fcgi
со вложенной конфигурацией:
- req_pool_size 256
- # Команда запуска PHP-скриптов
- start_cmd
- {
- mask *.php
- mask *.phtml
- cmd "/usr/local/bin/php-cgi -f $script_filename"
- }
- # Конфигурация по умолчанию
- default_fcgi
- {
- unix_socket_prefix "/tmp/puskach/site_user_fcgi_"
- io_timeout 10000
- max_processes 5
- sleep_timeout 30000
- request_processing_timeout 10000
- requests_per_process 1000
- }
- fcgi
- {
- path "/usr/home/site_user/www/myscript.fcgi"
- unix_socket_prefix "/tmp/puskach/site_user_myscript_fcgi_"
- io_timeout 10000
- max_processes 1
- sleep_timeout 15000
- request_processing_timeout 10000
- requests_per_process 100
- on_abort_request_behaviour 1
- }
- ...
req_pool_size
— глобальный параметр, устанавливает размер пула запросов, находящихся в обработке, либо ждущих в очереди. При исчерпании пула запросов новые запросы от web-сервера отклоняются. Значение по умолчаню 128.
Параметры FastCGI-приложения
path
— путь к FastCGI-приложению, служит для двух целей: (1) запуск приложения и (2) поиск приложения при входящем запросе от web-сервера (во входящем запросе должен передаваться FastCGI-параметр SCRIPT_FILENAME
с тем же значением). Может задаваться как абсолютно, так и относительно текущей директории рабочего процесса Пускача (текущую директорию можно установить при старте Пускача в стартовом скрипте).
unix_socket_prefix
— префикс имени Unix сокета, используемого для связи Пускача с копиями FastCGI-приложения. Для обеспечения неблокирующей обработки запросов Пускач поддерживает параллельную работу с несколькими процессами одного приложения, именуемыми копиями. Каждая копия слушает свой Unix-сокет, имя которого состоит из префикса и номера копии.
req_queue_len
— максимальная длина очереди запросов. Если на момент прихода запроса от web-сервера не находится свободных обработчиков, запрос ставится в очередь; если очередь переполнена, запрос отклоняется. Значение по умолчанию 10.
io_timeout
— таймаут ввода-вывода — максимально допустимое время между двумя операциями ВВ. Если по истечении этого времени следующей операции ВВ не последовало, обработка запроса web-сервера будет прервана, а обрабатывающая запрос копия FastCGI-приложения остановлена.
max_processes
— максимальное число процессов (копий), которые могут быть параллельно запущены для данного приложения (размер пула процессов).
sleep_timeout
— таймаут бездействия — максимальное время простоя копии FastCGI приложения, по истечении которого копия останавливается. Используется для освобождения ресурсов, занятых процессами, длительное время не выполняющими обработку запросов.
request_processing_timeout
— таймаут обработки запроса — максимально допустимое время между запросом web-сервера и ответом приложения об окончании обработки запроса. В случае превышения таймаута обработка запроса прерывается, а копия приложения останавливается.
requests_per_process
— максимальное число запросов, которое может последовательно обработать копия данного FastCGI-приложения. В случае достижения лимита копия завершается. Полезно для профилактики утечки ресурсов.
on_abort_request_behaviour
— выбор поведения при прерывании обработки запроса web-сервером: 0 — корректно завершить обработку запроса, если это возможно, 1 — прервать обработку запроса копией FastCGI приложения. По умолчанию 0. Обратите внимание, что для использования значения 1 необходимо, чтобы возможность прерывания обработки запроса при получении соответсвующего сигнала была реализована в логике FastCGI приложения.
Конфигурация по умолчанию
Конфигурация по умолчанию описывается параметром default_fcgi
, аналогично fcgi
. В случае, если конфигурация по умолчанию не определена, Пускач будет обрабатывать только запросы, адресованные явно описанным в конфигурационном файле FastCGI-приложениям. Иначе при запросе к любому существующему приложению Пускач будет динамически описывать его, использую конфигурацию по умолчанию. Имеет смысл задавать в конфигурации по умолчанию более строгие ограничения и переопределять их для отдельных скриптов в зависимости от их специфики.
Стартовая команда
Стартовая команда определяет исполняемую программу (как правило, интерпретатор) с набором аргументов командной строки, которая может быть использована для запуска FastCGI-приложений. Путь к исполняемому файлу и аргументы задаются в обязательном параметре cmd
. Сложные аргументы, содержащие пробельные символы, необходимо заключать в двойные кавычки. По умолчанию путь к запускаемому скрипту будет передан последним аргументом, для явного указания аргумента необходимо использовать макрос $script_filename
.
Для ассоциации стартовой команды со скриптами используется один или более параметров mask
. Маска — любая комбинация из значащих символов и служебного символа *
, совпадающего в любым колическом любых символов. Для поиска стартовой команды Пускач последовательно сравнивает все маски всех стартовых команд с путем к скрипту до первого совпадения. Если в результате поиска стартовая команда не найдена, будет выполнен прямой запуск скрипта по path
.
Рекомендации
Крайне рекомендуется задавать таймаутам и лимитам адекватные реальные значения, это позволит повысить стабильность работы сервера за счет своевременной реакции на возможное зависание приложений. Все параметры нужно выставлять в соответствии со спецификой каждого приложения.
В случае изменения конфигурации для считывания актуальной версии необходим перезапуск Пускача.