我的 tar 命令
tar --remove-files -cvif 2011-08-02_14-05-09.tar 2011-08-02_14-05-09
Run Code Online (Sandbox Code Playgroud)
写入 80MB/s。这超出了我们可以节省的容量,因为 MySQL 开始排队写入,最终我们会收到监控警报,因为系统不会永远等待 MySQL 并超时。
问:我可以节流tar到 20MB/s 吗?
在联机帮助页中没有找到任何内容,我们已经尝试使用最低ionice级别:/usr/bin/ionice -c3 tar <...>但这不会影响写入的 MB/s 并且 MySQL 仍然冻结。
也许ionice因为我们在/dev/md0软件 RAID 设备上而被忽略?
我在我们的访问日志中注意到,有时$http_x_forwarded_for未设置变量,相反,正确的 IP 是设置为$remote_addr. 当它不存在时是否可以设置$http_x_forwarded_for为$remote_addr?
基本上,以下伪代码,在 nginx 逻辑中:
if($http_x_forwarded_for == null) $http_x_forwarded_for = $remote_addr
我在 上建立了一些限制请求区域$http_x_forwarded_for,所以我认为这个问题可能是它并不总是生效的原因。
谢谢。
在我们的 CentOS 6 服务器上,我使用了本文中的信息来减少我们服务器上的蛮力 ssh 尝试,特别是速率限制/日志记录部分。有没有办法在 CentOS 7 中使用 firewalld 做同样的事情?我宁愿避免切换回 iptables,因为似乎 firewalld 是操作系统的发展方向。
作为参考,这里是我们使用的iptables中的基本配置(有些值不同)
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j LOGDROP
Run Code Online (Sandbox Code Playgroud) 我想在单个 apache 虚拟主机上限制每个 IP/客户端的同时请求和节流带宽。换句话说,我想确保这个托管大型媒体文件的站点不会被试图一次下载所有内容的人所打击(前几天晚上刚发生)。
我想限制该站点的整体传出传输速度,并将单个 IP 可以与服务器建立的连接数限制为合理的默认值(即在多个请求的正常浏览器限制内,因此页面加载不是影响太大)。如果我实际上可以将其范围限定为文件类型(即不考虑 Web 文件,但将这些规则仅应用于媒体文件),则加分。
我们在所有服务器上运行 Ubuntu 9.04,并且有两个 apache/php 服务器由鱿鱼代理服务器通过轮循机制进行负载平衡。MySQL 也在它自己的机器上运行。我们有足够的带宽给他们,所以我真的不想要整体上限,而只是想限制为该站点提供服务所需的内存/CPU 量。这些服务器上还有其他站点,我们也不想应用这些规则,只是想让这个站点不占用所有资源。
如果您需要更多信息,请告诉我!预先感谢您的建议!
我们决定在我们的网站上试验和限制每分钟请求数,而不是每秒请求数。但是,在这种情况下,我对突发参数感到困惑。
我的印象是,当您使用“nodelay”标志时,速率限制工具的作用就像一个令牌桶,而不是一个漏桶。既然如此,桶的大小等于突发参数,每次你违反策略(比如 1 req/s),你必须在桶中放入一个令牌。一旦存储桶已满(等于突发设置),您将看到一个 503 错误页面。
我还认为,一旦违规者停止违反政策,就会以 1 个令牌/秒的速度从存储桶中删除一个令牌,让他重新获得对该站点的访问权限。
假设我有上述正确,我的问题是当我开始调节每分钟访问时会发生什么?如果我们选择每分钟 60 个请求,令牌桶以什么速率补充?
我有以下配置,它适用于速率限制连接。如果滥用者通过身份验证并且他每分钟访问定义的正则表达式位置超过 30 次,则会启动速率限制并将他转发到 rate_limiting 后端,在那里他收到错误消息:
frontend http_in
bind xx.xx.xx.xx:80
mode http
default_backend backend_nodes
tcp-request inspect-delay 5s
acl location_request path_reg ^/(.*)/(.*)/
acl too_many_requests sc0_gpc0_rate(context) ge 30
acl mark_seen sc0_inc_gpc0 gt 0
stick-table type string size 100k store gpc0_rate(60s)
tcp-request content track-sc0 cookie(authValidation) if location_request
use_backend rate_limiting if mark_seen too_many_requests
backend backend_nodes
mode http
balance roundrobin
option http-server-close
server srv1 192.168.0.1:80 weight 5
server srv2 192.168.0.2:80 weight 5
backend rate_limiting
mode http
timeout tarpit 2s
errorfile 500 /etc/haproxy/errorfiles/429.http
http-request tarpit
Run Code Online (Sandbox Code Playgroud)
此配置确保滥用者每分钟不能发出超过 30 …
我一直在尝试对我正在进行的一个学术项目执行基于 VLAN 的速率限制。该项目使用 Openflow(带有 Beacon 控制器),并使用 Mininet 模拟网络。该网络由 OpenVSwitch 组成。
对于我的项目,我需要对网络中每个 VLAN 上的流量进行速率限制。我为此选择了 tc (带有 htb),并且已经尝试了很多天来使其正常工作。这些是我想要使用 tc 实现的目标: 1) 将所有 VLAN 的速率限制为特定的数据速率。2) 确保设置速率限制后,使用交换机之间物理链路的所有 VLAN 都获得相同(或几乎相同)的最大数据速率。
因此,如果我将每个 VLAN 的数据速率限制设置为 100 Mbps,并且有 5 个 VLAN 使用物理链路,我希望所有这些 VLAN 不超过 100 Mbps,同时每个 VLAN 的最大数据速率约为 100 Mbps。
我已经为此拓扑编写了脚本:
s2---s4
|
s6---s8
|
s10---s12
Run Code Online (Sandbox Code Playgroud)
这是那个脚本:
#!/bin/bash
# delete prev:
tc qdisc del dev s10-eth2 root
tc qdisc del dev s2-eth3 root
tc qdisc del dev s6-eth2 root
tc qdisc del dev s6-eth3 root
tc qdisc del …Run Code Online (Sandbox Code Playgroud) 尝试在 nginx 中实现以下行为
使用浏览器时,每个 ip 的默认速率限制为 1r/s。bing 和 google 蜘蛛的速率限制为 10r/s。拒绝不良机器人。
不幸的是,谷歌没有发布 googlebot 的 IP 地址,所以我只能使用 useragent。
到目前为止,这已经很接近了:
http {
# Rate limits
map $http_user_agent $uatype {
default 'user';
~*(google|bing|msnbot) 'okbot';
~*(slurp|nastybot) 'badbot';
}
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req_zone $binary_remote_addr zone=two:10m rate=10r/s;
...
server {
...
location / {
if ($uatype == 'badbot) {
return 403;
}
limit_req zone=one burst=5 nodelay;
if ($uatype != 'user') {
limit_req zone=two burst=10 nodelay;
}
...
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是 - 'if' 不允许这样做。 …
我正在尝试根据响应状态代码限制 nginx 的请求。我想减慢具有太多 4xx 或 5xx 响应的请求。我的配置文件中有这个代码块:
map $status $bad_guy {
~^[23] "";
default $binary_remote_addr;
}
limit_req_zone "$bad_guy" zone=badguy:10m rate=1r/s;
server {
limit_req zone=badguy burst=20;
Run Code Online (Sandbox Code Playgroud)
看来上面的配置阻止了所有发送超过 1 rps 的 IP 地址,包括那些只有 200 OK 响应的 IP 地址。
请问你能帮帮我吗?为什么上面的配置不起作用?我是否必须使用其他东西(也许是 openresty?)来实现这一目标?谢谢。
使用nginx限速,以这条规则为例:
limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;
这将设置每分钟 30 个请求。但是,如果我想堆叠第二条规则,那么逻辑是“每分钟 30 个请求,或每秒 1 个请求。以先到者为准”
原因是我们仍然希望上限为 30/分钟,但有一些奇怪的尝试,我们在 1-2 秒内看到了 10 次请求的垃圾邮件。当请求通过得那么快时,这会导致一些问题。因此,我们希望将用户限制为每秒 1 个请求,并且每分钟上限为 30 个。
我阅读了文档参考,但没有看到太多有关堆叠不同费率规则的信息。
这可能吗?如果是这样,语法是什么?
rate-limiting ×10
nginx ×5
amazon-ec2 ×1
apache-2.2 ×1
firewalld ×1
haproxy ×1
htb ×1
http-headers ×1
ionice ×1
networking ×1
openflow ×1
squid ×1
tar ×1
tc ×1
ubuntu ×1
virtualhost ×1