Laravel 5.8-每个IP的速率限制

时间:2019-07-11 17:19:27

标签: php laravel laravel-5

我使用Laravel 5.8在启用了标准限制的情况下提供api:

        'api' => [
            'throttle:60,1',
            'bindings',
        ],

我认识到此速率限制不适用于特定IP。相反,它就像在公共路线上进行“全局”限制一样。

我有什么忽略的地方吗?还是预期的行为?

如果可以预期的话-如何在路由中启用“每个IP”的速率限制?

1 个答案:

答案 0 :(得分:2)

  

我认识到此速率限制不适用于特定IP。相反,它就像在公共路线上进行“全局”限制一样。

这是不正确的。

https://github.com/laravel/framework/blob/5.8/src/Illuminate/Routing/Middleware/ThrottleRequests.php#L94

samples_avg = [[1, 12, 3], [15000, 4, 3], [1, 144, 45]]
def check(samples_avg):
    filtered = []
    maxval = [max(x) for x in zip(*samples_avg)]
    maxlist = ([r >= (m/5) for row in samples_avg for r, m in zip(row, maxval)])

    results =[[] for i in samples_avg]
    for i in results:
        filtered.append([x for x, y in zip(samples_avg[i], maxlist) if y == True])
        print (np.where((filtered) is True))

仔细查看两个protected function resolveRequestSignature($request) { if ($user = $request->user()) { return sha1($user->getAuthIdentifier()); } if ($route = $request->route()) { return sha1($route->getDomain().'|'.$request->ip()); } throw new RuntimeException('Unable to generate the request signature. Route unavailable.'); } 语句。如果存在用户,则油门键基于其用户标识符。如果不存在用户,则标识符包括if。来自不同IP地址的请求将进入不同的限制存储区。