Dynamically Start/Stop FastCGI PHP Processes

Piotr Karbowski jabberuser at gmail.com
Thu Mar 15 08:39:37 UTC 2012

On 03/15/2012 04:30 AM, justin wrote:
> Ok, so I've got a crazy idea, but it might just work.
> Basically, we have a bunch of PHP pools managed with PHP-FPM. Each site
> has its own single PHP-FPM worker for security reasons.
> The majority of the sites don't get much traffic, so the PHP processes
> don't need to be running eating up RAM and resources. My thought was
> after N number of minutes of no requests to shut down that PHP worker
> for that site. Then when a request comes in, hold the request in sort-of
> a pause mode, start the worker for that site, and then forward off the
> request. Sure there would be a slight delay on that first request to
> spin up the worker, but should work beautifully.
> Does nginx have any plugins to emulate this behavior? I.E. sort of
> hooks? All I would need is a hook from nginx when a site is idle for X
> number of second/minutes. For this first hook, we could write a simple
> bash script which kills that PHP-FPM worker. Then another hook, when a
> request comes in on a given site. Again, another bash script which first
> checks if the PHP-FPM worker is up, if not, holds the requests, starts
> the worker, and then forwards the request.
> I was thinking at first, I can use node.js and write a middleware proxy
> that sits between nginx and the PHP-FPM workers, but then quickly
> realized the node.js app would have to speak cgi, and I didn't want to
> have to deal with that rubbish. :)

php-fpm support 'ondemand' governor so it will spawn processes as-needed 
and kill them after specified period if not needed (keeping zero workers 
for pool). This is what you are looking for.

-- Piotr.

More information about the nginx mailing list