Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I want to set only one listening unix socket for all php-fpm pools, but fpm requires them to be different.

Production server has 2GB ram and I noticed that it is running out of RAM, adding more websites spawn more fpm processes. I am the only user on this server, so i don't need to limit resources per pool just want to set common config settings for all.

One domain pool as follows:

    user = www
    group = www
    listen = /tmp/
    security.limit_extensions = .php .html

   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/

   ;Base dirs
   php_admin_value[open_basedir] = /usr/local/www/
   php_admin_value[upload_tmp_dir] = /usr/local/www/ 
   php_admin_value[session.save_path] = /usr/local/www/

Another pool is the same, except domain name. So then if I set same listening socket for both pools it doesn't work

# php-fpm --test
[12-Sep-2013 22:27:01] ERROR: [pool] unable to set listen address as it's already used in another pool ''
[12-Sep-2013 22:27:01] ERROR: failed to post process the configuration
[12-Sep-2013 22:27:01] ERROR: FPM initialization failed

And if set different sockets, it works, but each pool spawn minimum 3 process. (Sure, this is not an output from real server, just simulated same behavior).

# 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 (php-fpm)
www    1351   0.0  0.9 161336 18292 ??  S    10:34PM   0:00.00 php-fpm: pool (php-fpm)
www    1352   0.0  0.9 161336 18292 ??  S    10:34PM   0:00.00 php-fpm: pool (php-fpm)
www    1353   0.0  0.9 161336 18292 ??  S    10:34PM   0:00.00 php-fpm: pool (php-fpm)
www    1354   0.0  0.9 161336 18292 ??  S    10:34PM   0:00.00 php-fpm: pool (php-fpm)
www    1355   0.0  0.9 161336 18292 ??  S    10:34PM   0:00.00 php-fpm: pool (php-fpm)

My intention is to keep running 3 php-fpm processes for all pools.

share|improve this question
If you only need one pool, why are you running more than one? – Michael Hampton Sep 12 '13 at 20:13
Because i guess this is only way to separate php scripts by using php_admin_value[open_basedir] value. That means if one website hacked, they can't move up and infect others. Another thing is per website logs. If it possible, could you please share such config with one pool ? – Demontager Sep 12 '13 at 20:30
OK, so you really do need separate pools. They must have separate sockets; you can't get around this. – Michael Hampton Sep 12 '13 at 20:31
That's i afraid the most, so sad. Let's assume i may live without per website logs and same time need to chroot each website. Is anything could I try ? I never tried these following options, maybe they can help -; ;chroot = ;chdir = /var/www – Demontager Sep 12 '13 at 20:44
What are you trying to do?! I can't think of any real reason to even attempt this. – Michael Hampton Sep 12 '13 at 20:58

You can have each nginx server block point at same socket and in the /etc/nginx/fastcgi_params there are the lines:

fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;

These will cause the document root from your nginx server block to be passed through to php-fpm.

server {
    root /var/www/<%= @title %>/public;

You should then omit the line php_admin_value[open_basedir] = /usr/local/www/ from your php-fpm pool config file.

I believe nginx can do a similar thing to change the log, session and uploads directory, or you can change the error, session and upload handler in php to log to a relative path based on your document root.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.