Я хочу установить только один сокет Unix слушания для всех пулов php-fpm, но fpm требует, чтобы они отличались.
Рабочий сервер имеет поршень на 2 ГБ, и я заметил, что он исчерпывает RAM, добавляя, что больше веб-сайтов порождает больше процессов fpm. Я - единственный пользователь на этом сервере, таким образом, я не должен ограничивать ресурсы на пул, просто хотят установить общие настройки конфигурации для всех.
Один доменный пул следующим образом:
[domain.com]
user = www
group = www
listen = /tmp/domain.com-php-fpm.sock
security.limit_extensions = .php .html
;Resources
pm = dynamic
pm.max_children = 9
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.process_idle_timeout = 60s
request_terminate_timeout = 30s
pm.max_requests = 300
;Log errors
catch_workers_output = yes
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/www/domain.com/php-error.log
;Base dirs
php_admin_value[open_basedir] = /usr/local/www/domain.com
php_admin_value[upload_tmp_dir] = /usr/local/www/domain.com/tmp
php_admin_value[session.save_path] = /usr/local/www/domain.com/tmp
Другой пул является тем же, кроме доменного имени. Таким образом, если я установил тот же сокет слушания для обоих пулов, он не работает
# php-fpm --test
[12-Sep-2013 22:27:01] ERROR: [pool domain.com] unable to set listen address as it's already used in another pool 'domain2.com'
[12-Sep-2013 22:27:01] ERROR: failed to post process the configuration
[12-Sep-2013 22:27:01] ERROR: FPM initialization failed
И, если установлено различные сокеты, это работает, но каждый пул порождает минимальные 3 процесса. (Несомненно, это не вывод с реального сервера, просто моделировал то же поведение).
# ps aux | grep php-fpm
root 1349 0.0 0.9 161376 18320 ?? Ss 10:34PM 0:00.02 php-fpm: master process (/usr/local/etc/php-fpm.conf) (php-fpm)
www 1350 0.0 0.9 161336 18292 ?? S 10:34PM 0:00.00 php-fpm: pool domain2.com (php-fpm)
www 1351 0.0 0.9 161336 18292 ?? S 10:34PM 0:00.00 php-fpm: pool domain2.com (php-fpm)
www 1352 0.0 0.9 161336 18292 ?? S 10:34PM 0:00.00 php-fpm: pool domain2.com (php-fpm)
www 1353 0.0 0.9 161336 18292 ?? S 10:34PM 0:00.00 php-fpm: pool domain.com (php-fpm)
www 1354 0.0 0.9 161336 18292 ?? S 10:34PM 0:00.00 php-fpm: pool domain.com (php-fpm)
www 1355 0.0 0.9 161336 18292 ?? S 10:34PM 0:00.00 php-fpm: pool domain.com (php-fpm)
Мое намерение состоит в том, чтобы продолжать управлять 3 процессами php-fpm для всех пулов.
Вы можете установить каждый блок сервера nginx в один и тот же сокет, а в /etc/nginx/fastcgi_params есть строки:
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
Это приведет к тому, что корень документа из вашего блока сервера nginx будет передан в php-fpm.
server {
root /var/www/<%= @title %>/public;
...
}
Затем вы должны опустить строку.
php_admin_value[open_basedir] = /usr/local/www/domain.com
из конфигурационного файла пула php-fpm.
Я считаю, что nginx может сделать подобное, чтобы изменить каталог журнала, сессии и закачки, или вы можете изменить ошибку, сессию и обработчик загрузки в php, чтобы войти в относительный путь, основанный на корне вашего документа.
.