一个用于所有php-fpm池的unix套接字

我只想为所有php-fpm池设置一个监听unix套接字,但是fpm要求它们不同。

生产服务器有2GB内存,我注意到内存不足,增加了更多的网站产生更多的进程。 我是这台服务器上唯一的用户,所以我不需要限制每个池的资源只是想设置所有的通用configuration设置。

一个域池如下:

[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 

如果设置不同的套接字,它可以工作,但每个池产生至less3个进程。 (当然,这不是真正的服务器输出,只是模拟相同的行为)。

 # 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-fpm池configuration文件中省略php_admin_value[open_basedir] = /usr/local/www/domain.com这一行。

我相信nginx可以做类似的事情来改变日志,会话和上传目录,或者你可以改变错误,会话和上传处理程序在PHPlogin到相对path基于您的文档根。