Ruby on rails nginx limit_req rate limiting的问题-文档澄清?
我在nginx上与乘客/铁路一起工作时遇到了无止境的限速问题 混淆的一部分在于区分配置的哪些方面是基于每个客户端的,哪些是全局限制 我在为nginx的limit_req和limit_req_zone配置理想设置时遇到了一些问题。它似乎模糊地在语言之间切换,暗示这要么是特定于用户的,要么是全局应用的 在文档中,Ruby on rails nginx limit_req rate limiting的问题-文档澄清?,ruby-on-rails,nginx,passenger,Ruby On Rails,Nginx,Passenger,我在nginx上与乘客/铁路一起工作时遇到了无止境的限速问题 混淆的一部分在于区分配置的哪些方面是基于每个客户端的,哪些是全局限制 我在为nginx的limit_req和limit_req_zone配置理想设置时遇到了一些问题。它似乎模糊地在语言之间切换,暗示这要么是特定于用户的,要么是全局应用的 在文档中,limit\u req\u zone行的具体工作方式相当模糊。此“区域”是全局的还是每个用户的?鉴于下面这句话,我的结论是否正确: limit_req_zone $binary_remote
limit\u req\u zone
行的具体工作方式相当模糊。此“区域”是全局的还是每个用户的?鉴于下面这句话,我的结论是否正确:
limit_req_zone $binary_remote_addr zone=update_requests:1m rate=20r/s;
limit_req zone=main_site burst=10 nodelay;
一些背景信息,以防任何人真的感到无聊,并想看看我们试图解决的配置和一般问题: 目前我有这个(摘录): 我们定义了两个区域: a) “主站点”,旨在捕捉一切 b) “update_request”,当一个小(缓存)文件中的时间戳发生变化时,客户端上的JS通过AJAX轮询更新内容 就其性质而言,这往往意味着我们在1或2分钟内的流量相当低,但当可能有10000个客户端同时访问服务器以获取更新的内容时,流量会大幅增加(从数据库以稍微不同的方式提供,具体取决于过滤器、访问权限等) 我们发现,在负载过重的时候,当CPU核心耗尽时,该站点正逐渐停止运行——我们的更新代码中有一些错误,这意味着当连接断开时,查询会排队等待,并一直使服务器陷入困境,直到我们不得不暂时关闭该站点,并迫使用户注销并重新启动刷新他们的浏览器。。。实际上,我们自己也遭到了DDoS攻击:P我认为这最初是由我们的托管公司的一些连接问题造成的,这些问题导致大量请求在用户的浏览器中排队 当我们解决这些bug时,我们警告客户,他们可能会收到奇怪的503“重载”消息,或者看到内容没有及时更新。限制速率的初衷是确保即使在负载较重的情况下,网站的日常页面也可以继续导航,同时限制更新内容的速率 然而,我们现在看到的主要问题是,即使在更新代码中的错误已经(希望)解决之后,我们也不能在速率限制上取得很好的平衡。每当一个新内容被添加到网站上(并被我们的用户一次拉出来),我们设置的一切似乎都会在访问日志中产生503个不健康的错误
我们正在寻找各种缓存解决方案,但理想情况下,我们仍然希望受到某种速率限制的保护,这种限制在日常操作中不会影响用户。您正在阅读哪些文档?非常清楚指令的用法和语法 关于限制要求区域:
limit\u req\u zone
的上下文仅限于http,使其成为全局上下文突发
个请求,服务器将简单地删除所有请求(而不是减慢速度)。人们可能会用它来抵御DoS攻击或API滥用nodelay
删除了处理burst
值上的请求的延迟。如果不希望对任何速率受限的客户端进行处理,请将突发
设置为0,并使用节点延迟
。速率受限客户端的等待/延迟取决于limit\u req\u zone
指定的速率限制非常感谢您的回复!我正在阅读的文档是您链接的文档,但我仍然认为它们不清楚哪些元素适用于全球范围,哪些元素适用于每个客户。为了进一步澄清,关于问题4。。。docs表示,限速是“漏桶”的一种实现,通常只有两个参数是a)bucket si
limit_req_zone $binary_remote_addr zone=main_site:10m rate=40r/s;
limit_req_zone $binary_remote_addr zone=update_requests:1m rate=20r/s;
server {
listen 80;
server_name [removed];
root [removed];
include rtmp_proxy_settings;
try_files $uri /system/maintenance.html @passenger;
location @passenger {
passenger_max_request_queue_size 0; # 256;
limit_rate_after 2048k;
limit_rate 512k;
limit_req zone=main_site burst=10 nodelay;
limit_conn addr 5;
passenger_enabled on;
passenger_min_instances 3;
}
location ~ ^/update_request {
passenger_enabled on;
limit_req zone=update_requests burst=5 nodelay;
}
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml application/javascript text/javascript text/css;
gzip_disable "msie6";
gzip_http_version 1.1;
}