使用 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,这可能是也可能不是你想要的,因为这些请求将被严重数量有限
我们有 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,这可能是也可能不是你想要的,因为这些请求将被严重数量有限