do_*_*ise 8 ruby-on-rails passenger nginx
我对使用乘客/铁路的nginx进行速率限制没有任何困难.
部分混淆是区分配置的哪些方面基于每个客户端以及哪些是全局限制.
我在解决nginx的limit_req和limit_req_zone配置的理想设置时遇到了问题.它似乎模糊地在语言之间翻转,暗示这是用户特定的或全局适用的.
在文档中,这limit_req_zone条线的工作方式非常模糊.这个"区域"是全球用户还是每用户?鉴于以下几行,我在以下结论中是正确的:
limit_req_zone $binary_remote_addr zone=update_requests:1m rate=20r/s;
Run Code Online (Sandbox Code Playgroud)
我也不确定limit_req行,例如:
limit_req zone=main_site burst=10 nodelay;
Run Code Online (Sandbox Code Playgroud)
谢谢.
一些背景信息,以防任何人真的很无聊,并想看看我们试图解决的配置和一般问题:
目前我有这个(摘录):
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;
}
Run Code Online (Sandbox Code Playgroud)
我们定义了两个区域:
a)"main_site",旨在捕获所有内容b)"update_request",当小(缓存)文件中的时间戳发生更改时,客户端上的JS通过AJAX轮询此更新内容
就其本质而言,这意味着我们在1或2分钟内拥有相当低的流量,但是当可能有10,000个客户端同时为这个更新的内容点击服务器时会出现大量峰值(根据过滤器以稍微不同的方式从数据库提供服务) ,访问权限等)
我们发现在负载很重的时候,当CPU内核被最大化时,站点正在停止运行 - 我们的更新代码中有一些错误,这意味着当连接被丢弃时,查询排队等待并且一直在阻塞服务器,直到我们不得不暂时关闭网站并迫使用户注销并刷新他们的浏览器...有效我们DDoS自己:PI认为这最初是由我们托管公司的一些连接问题导致一堆请求在用户的浏览器中排队.
虽然我们解决了这些错误,但我们警告客户他们可能收到奇怪的503"重负载"消息,或者看到内容没有及时更新.速率限制的最初目的是确保即使在重负载期间网站的日常页面也可以继续导航,同时限制更新的内容.
然而,我们现在看到的主要问题是即使在更新代码中的错误(希望)被解决之后,我们也无法在速率限制方面取得良好的平衡.无论何时向网站添加新内容(并由我们的用户同时提取),我们设置的所有内容似乎都会在访问日志中生成不健康数量的503错误
我们在缓存方面考虑了各种解决方案,但理想情况下,我们仍然希望受到某种速率限制的保护,这种速率限制在日常操作中不会影响用户.
Cli*_*urn 11
您正在阅读哪些文档?http://nginx.org/en/docs/http/ngx_http_limit_req_module.html对指令的用法和语法非常清楚.
关于limit_req_zone:
limit_req_zone仅限于http,使其成为全局.关于limit_req:
burst数量的请求,则服务器将简单地丢弃所有请求(而不是减慢速度).有人可能会使用它来抵御DoS攻击或API滥用.nodelay消除了处理请求超过该burst值的延迟.如果您不想对任何限速客户端进行处理,请设置burst为0并使用nodelay.限速客户端的等待/延迟取决于指定的速率限制limit_req_zone.| 归档时间: |
|
| 查看次数: |
6257 次 |
| 最近记录: |