使用 nginx 验证 URL 信息

Validation URL information with nginx

我们有 API 个应用程序,它使用了很多客户。每个客户都有 API 令牌,他在 GET 请求中传递了该令牌。

访问日志示例:

GET /api/token=FhrHd25Sk6REmwqn32Ssdf/bla?/bla/bla

我们想为令牌创建白名单,并使用 nginx 限制每个令牌的每秒连接数。

您能就这项任务的实施提出建议吗?

limit_req 指令控制各种键的每秒最大连接数(在本例中 key 是 API 标记)。有关详细信息,请参阅 this document

您可以使用 map 指令提取 API 标记。有关详细信息,请参阅 this document

例如:

map $request_uri $token {
    ~/token=freepass/           '';
    ~/token=(?<thetoken>[^/]+)/ $thetoken;
    default                     'everybody';
}

limit_req_zone $token zone=one:10m rate=1r/s;

server {
    ...
    limit_req zone=one;
    ...
}

在上面的示例中,令牌 "freepass" 将具有无限访问权限,因为它没有为 密钥 定义值。使用命名捕获提取令牌。 default 子句将没有定义令牌的请求放入同一个 key,这可能是也可能不是你想要的,因为这些请求将被严重数量有限