如何配置NGINX+;PHP5-FPM是否为特定IP范围保留连接插槽?

如何配置NGINX+;PHP5-FPM是否为特定IP范围保留连接插槽?,php,nginx,fpm,Php,Nginx,Fpm,在一些罕见的高峰使用期间,我的服务器耗尽了可用的PHP5 FPM子级(我无法进一步增加这个数字,而不冒内存耗尽的风险)。如果最终用户在极少数情况下收到503或504消息,我可以接受,但我希望确保某些IP地址范围始终可以访问特定的客户端对我的服务器的API请求 我有没有办法对来自特定IP范围的fastcgi直通请求指定一个限制,然后为来自另一个IP范围的请求允许额外的5-10个“保留连接插槽”?这就是我的想法: php5-fpm max children: 100 max fastcgi conn

在一些罕见的高峰使用期间,我的服务器耗尽了可用的PHP5 FPM子级(我无法进一步增加这个数字,而不冒内存耗尽的风险)。如果最终用户在极少数情况下收到503或504消息,我可以接受,但我希望确保某些IP地址范围始终可以访问特定的客户端对我的服务器的API请求

我有没有办法对来自特定IP范围的fastcgi直通请求指定一个限制,然后为来自另一个IP范围的请求允许额外的5-10个“保留连接插槽”?这就是我的想法:

php5-fpm max children: 100
max fastcgi connections for standard IP range: 90
max fastcgi connections for "priority" IP range: 100
基本上为某些客户端保留最后10个子进程


我想尝试使用
worker\u连接
/
worker\u进程
来实现这些限制,但是由于它们的
上下文
事件
是否无法让它们随请求IP而变化?

您可以添加另一个池,并将nginx配置为将其用于保留IP。 缺点是这个IP范围的客户端不能使用“公共”池,这在某些用例中可能是不可接受的

基本上,如果您复制:

cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/www-special.conf   
更换插座:

sed -i 's/listen = \/var\/run\/php5-fpm.sock/listen = \/var\/run\/php5-fpm-special.sock/g' \
    /etc/php5/fpm/pool.d/www-special.conf
并将每个文件中的
pm.max_children
分别调整为90和10:

sed -i 's/pm.max_children = .\+/pm.max_children = 90/g' \
    /etc/php5/fpm/pool.d/www.conf 

sed -i 's/pm.max_children = .\+/pm.max_children = 10/g' \
    /etc/php5/fpm/pool.d/www-special.conf 
您可以在nginx config中为选定的IP范围使用新池(不要忘记重新启动
服务php5 fpm restart

例如,使用模块,您可以将
/etc/nginx/conf.d/geo.conf
中的
$socket
定义为:

geo $socket {
    default unix:/var/run/php5-fpm.sock;
    10.0.0.0/8 unix:/var/run/php5-fpm-special.sock;
}
然后更新
fastcgi\u pass
指令以使用它:

sed -i 's/fastcgi_pass unix:\/var\/run\/php5-fpm.sock;/fastcgi_pass $socket;/g' \
    /etc/nginx/sites-available/default

我认为这会是一个更好的地方,但看起来这里有20000个问题标记为nginx,而那里只有9000个。