温馨提示×

centos中laravel如何限速

小樊
35
2026-10-05 19:01:20
栏目: 智能运维

在 CentOS 上给 Laravel 做“限速”,通常分为 应用层限速 和 服务器层限速 两种思路。下面按常见场景给你总结。


一、Laravel 应用层限速(最常用)

1️⃣ 使用 Laravel 自带的 Throttle(路由限流)

Laravel 内置了 throttle 中间件。

示例:API 限速

Route::middleware('throttle:60,1')->group(function () {
    Route::get('/api/user', 'UserController@index');
});

含义:

  • 60:1 分钟内最多 60 次请求
  • 1:时间窗口(分钟)

自定义限速(推荐 API 项目)

Route::middleware('throttle:api')->group(function () {
    // routes
});

在 app/Providers/RouteServiceProvider.php 中:

RateLimiter::for('api', function (Request $request) {
    return Limit::perMinute(100)->by($request->ip());
});

2️⃣ 登录接口防暴力破解

Route::post('/login', 'AuthController@login')
    ->middleware('throttle:5,1');

1 分钟最多 5 次登录尝试


3️⃣ 自定义限流(高级)

RateLimiter::for('upload', function (Request $request) {
    return Limit::perMinute(10)->by($request->user()?->id ?: $request->ip());
});

二、CentOS + Nginx 限速(服务器层)

如果你的 Laravel 跑在 Nginx + PHP-FPM(CentOS 常见),可以用 Nginx 限速。

1️⃣ Nginx 限制请求频率

http {
    limit_req_zone $binary_remote_addr zone=rate:10m rate=10r/s;
}

server {
    location /api/ {
        limit_req zone=rate burst=20 nodelay;
        proxy_pass http://127.0.0.1:9000;
    }
}

说明:

  • 10r/s:每秒 10 个请求
  • burst=20:允许突发 20 个

2️⃣ Nginx 限制下载速度

location /download/ {
    limit_rate 100k;
}

三、CentOS 防火墙层限速(不推荐 Laravel)

使用 iptables 或 firewalld 做 IP 限速(偏运维):

iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute -j ACCEPT

⚠️ 不推荐用于业务接口限速,容易误伤。


四、Redis 作为限流后端(高并发推荐)

Laravel 默认支持 Redis:

CACHE_DRIVER=redis

限流会自动使用 Redis,性能更好。


五、推荐方案总结

场景 推荐方式
API 接口 Laravel throttle
防止爆破 throttle + 登录限流
高并发 Nginx + Redis
下载限速 Nginx limit_rate

如果你愿意,可以告诉我:

  • Laravel 版本
  • 是否用 Nginx
  • 限速场景(API / 登录 / 下载)

我可以给你一套 可直接用的配置。

0 踩