Nginx-原始服务器响应代码为401时的速率限制

问题描述 投票:1回答:1

当原始服务器以401状态代码响应时,我希望nginx通过user-ip进行速率限制。我将如何处理。我已经为普通的API调用设置了limit_req_zone,看起来像这样:limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;,但我想进一步限制对未经授权调用我的API端点的违规者的等级。

编辑:我确实尝试过根据映射的变量将响应状态401映射到ip地址和速率限制,但这似乎无济于事。参见下面的代码。

map $status $limit {
    default '';
    401 $binary_remote_addr;
}

limit_req_zone $limit zone=api:10m rate=5r/s;


location /api {
    limit_req zone=api burst=5;
    ...
}
node.js express nginx http-status-code-401 rate-limiting
1个回答
0
投票

顺序很重要。如果使用上游服务中的HTTP状态代码,则应将速率限制指令放在“ proxy_”指令之后。

例如,这应该起作用:

map $status $limit {
    default '';
    401 $binary_remote_addr;
}
...
...
...
limit_req_zone $limit zone=api:10m rate=5r/s;
...
...
...
server {
    location /by-uri/myburst_401 {
        proxy_pass http://example.com/;
        limit_req zone=api burst=5 nodelay;
    }
}
...

请注意proxy_pass指令后面的limit_req区域。这非常重要,否则映射将无法工作。这是因为$ status变量在调用上游之前仍然为空。

© www.soinside.com 2019 - 2024. All rights reserved.