我现在的nginx需要限速防cc,可是添加了
## 这里取得原始用户的IP地址
map $http_x_forwarded_for $clientRealIp {
"" $remote_addr;
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}
## 针对原始用户 IP 地址做限制
limit_conn_zone $clientRealIp zone=TotalConnLimitZone:20m ;
limit_conn TotalConnLimitZone 50;
limit_conn_log_level notice;
## 针对原始用户 IP 地址做限制
limit_req_zone $clientRealIp zone=ConnLimitZone:20m rate=10r/s;
#limit_req zone=ConnLimitZone burst=10 nodelay;
limit_req_log_level notice;
## 具体服务器配置
server {
listen 80;
location ~ \.php$ {
## 最多 5 个排队, 由于每秒处理 10 个请求 + 5个排队,你一秒最多发送 15 个请求过来,再多就直接返回 503 错误给你了
limit_req zone=ConnLimitZone burst=5 nodelay;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
我添加了,是正常的,可是感觉 效果不明显,我不知道是不是我的nginx没有这个功能。但是./nginx -s reload是没有报错的。
我平时需要维护大量服务器。limit_*用过一段时间,我可以确定的告诉你,效果肯定是有的。
但是,可能会将大量艾普长城宽带等等多用户使用一个公网IP出口的用户给屏蔽掉了,或者将正常访问的用户给屏蔽(比如,同时打开多个页面,连接数就会非常大)。经常出现无法连接的情况。所以,用户体验很差。
说说我现在在用的防CC方法:
1.使用tengine代替原版nginx,启用ngx_http_sysguard_module模块。防止系统因为CC攻击,将CPU和内存用完,导致服务器死机。
2.查看访问日志,手动屏蔽CC攻击的特征。比如,大量有相同浏览器User-agent的访问等等。在nginx屏蔽对应的User-agent。CC攻击一般都是使用工具实施。所以,很多时候User-agent是相同的。还有类似模式的其它特征。就不详细描述了。
CC攻击只能半自动,全自动是不现实的,误判太多,攻击特征不尽相同,无法面面俱到,会导致用户体验太差。
我这个有cdn加速,所以需要找真实ip!版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。