如何在不重新加载/重启fpm本身的情况下将池添加到FPM(nginx)?

前端之家收集整理的这篇文章主要介绍了如何在不重新加载/重启fpm本身的情况下将池添加到FPM(nginx)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在构建一个环境(在ubuntu 10.04.02机器上)来处理一个包含许多(应该支持至少1000个)子域的网站,每个子域由不同的FPM池和不同的用户提供服务.

没什么新鲜的;我的问题是创建(并启动)一个新的fpm池而不必重新加载/重启FPM,这将导致(我知道,真的很快)停机.

我写了一个python守护进程,需要时:

>创建系统用户
>设置子域的Web根目录
>在我的/etc/PHP5/fpm/fpm.d/文件夹中创建subdomain.conf

我google了但我没有找到一种方法调用fpm使用一个池,这可能是一个“临时”的解决方案:主fpm实例运行所有池,evey新的一个得到他自己的fpm实例,然后与一个cron我停止和每周/每月重新加载fpm / dontknowyet

如果重要,服务器在Nginx上运行,配置为使用unix socket到fcgi,这是我的Nginx测试配置:

server{
    listen          80;
    server_name     ~^(?PHP;
    }
    location ~* \.(gif|jpg|png|ico)${
        expires 30d;
    }
    location ~ \.PHP${
        fastcgi_pass    unix:/var/web-sock/myapp_$domain-fpm.sock;
        fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}

..和我的子域-fpm.conf:

[myapp_foo]
listen = /var/web-sock/myapp_foo-fpm.sock

user = myapp_foo
group = myapp_foo

pm = dynamic
pm.max_children = 30
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 30

我已经尝试将PHP5-cgi和/或spawn-fcgi用于新的子域,但是有点不稳定,并且当并发级别增长时经常崩溃.

任何的想法?

最佳答案
我不相信有任何方法可以在不重新启动/重新加载的情况下添加池(根据this).

我确实认为冗余是最好的方法,我相信,你可以通过重新加载完成你想要的.由于它是graceful reload,它应该等待进程完成.

本质上,将SIGUSR2信号传递给PHP-fpm,它将正常地重新加载所有工作人员重新加载fpm conf / binary.

我认为相当于

kill -USR2 `cat $PHP_fpm_PID`

因此,您修改conf – 并重新加载 – 不应导致明显的停机时间.

另一种选择是为每个用户运行一个进程 – 您可以在不终止现有进程的情况下添加新用户,但资源要求要高得多(并且对于1000个用户来说可能不太实用).

一个more option是为新用户创建一个临时的php-cgi进程,并延迟重新加载服务器直到稍后(即低负载期,或者你有多个用户添加).这样可以减少停机时间,但仍会立即调出新用户的子域名.

以上都不是完全理想的,没有停机的唯一实用解决方案是多服务器方法.

猜你在找的Nginx相关文章