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