【发布时间】:2015-12-11 07:40:59
【问题描述】:
我在谷歌上搜索了几个小时后找不到任何东西,其实有点惊讶,但问题如下:
我希望 nginx 充当我的 API 的节流阀。
我的配置文件包含一个被广泛引用的 limit_req_zone 示例:
limit_req_zone $binary_remote_addr zone=limit:2m rate=10r/m;
连同我的 location 指令,其中包含预期的 limit_req zone=limit nodelay;
我希望 nginx 将标头附加到 X-RateLimit-Remaining 和 X-RateLimit-Reset 属性的响应消息中。基本上让 nginx 使用rate=10r/m 的活动计数来填充X-RateLimit-Remaining 和相同rate=10r/m 值的时间范围来填充X-RateLimit-Reset,在刷新前还剩多少秒。
http {
limit_req_zone $binary_remote_addr zone=login:10m rate=2r/s;
limit_req_status 429;
limit_conn_status 429;
server {
listen 80;
server_name [removed];
location / {
limit_req zone=limit nodelay;
proxy_pass http://reverse-proxy-example;
add_header X-RateLimit-Remaining [nginx variable?];
add_header X-RateLimit-Reset [nginx variable?]
}
}
想法?可能的?希望避免点击应用程序来获取这些数字。
【问题讨论】:
-
FWIW 我 grepped NGinx 源代码,找不到任何对 Remaining 或 Reset 值的引用。
-
我知道一些框架已经内置了速率限制,但想想看,我们必须将请求传递给应用程序,加载/执行代码,连接到 redis 只是为了跟踪速率限制参数。在服务器级别处理它会好得多,尤其是使用 NGinx 更好的内置内存管理。