在Ubuntu上,您可以使用PHP-FPM的内置功能或第三方模块来限制请求速率。以下是两种方法:
方法1:使用PHP-FPM内置的request_slowlog_timeout
参数
- 打开PHP-FPM配置文件。通常位于
/etc/php/7.x/fpm/pool.d/www.conf
(其中7.x是您的PHP版本)。使用文本编辑器打开,例如:
sudo nano /etc/php/7.x/fpm/pool.d/www.conf
- 在文件中找到
request_slowlog_timeout
参数。如果没有找到,请在[global]
部分下添加它。将其值设置为您希望的毫秒数。例如,如果您希望限制请求速率为每秒10个请求,可以将其设置为1000毫秒:
request_slowlog_timeout = 1000
-
保存并关闭文件。
-
重启PHP-FPM服务以应用更改:
sudo systemctl restart php7.x-fpm
请确保将7.x替换为您的PHP版本。
方法2:使用第三方模块php-fpm-rate-limit
- 安装
php-fpm-rate-limit
模块:
sudo apt-get install php-fpm-rate-limit
- 创建一个新的PHP-FPM池配置文件,例如
/etc/php/7.x/fpm/pool.d/ratelimit.conf
(其中7.x是您的PHP版本):
sudo nano /etc/php/7.x/fpm/pool.d/ratelimit.conf
- 在新文件中添加以下内容,根据需要调整参数:
[global] pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 [rate-limit] request_terminate_timeout = 1s rl.limit = 10/r rl.burst = 5 rl.log = /var/log/php-fpm/rate-limit.log
这里,我们将请求速率限制为每秒10个请求,允许最多5个突发请求。
-
保存并关闭文件。
-
修改主PHP-FPM配置文件
/etc/php/7.x/fpm/pool.d/www.conf
,将include=/etc/php/7.x/fpm/pool.d/*.conf
行取消注释(如果已注释)。 -
重启PHP-FPM服务以应用更改:
sudo systemctl restart php7.x-fpm
请确保将7.x替换为您的PHP版本。
现在,您的PHP-FPM实例应该已经限制了请求速率。您可以通过查看/var/log/php-fpm/rate-limit.log
文件来监控限制日志。