Один сокет Unix для всех пулов php-fpm

Я хочу установить только один сокет 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 для всех пулов.

0
задан 11 February 2016 в 08:56
1 ответ

Вы можете установить каждый блок сервера 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, чтобы войти в относительный путь, основанный на корне вашего документа.

.
1
ответ дан 4 December 2019 в 18:01

Теги

Похожие вопросы