开发者社区> 问答> 正文

如何知道nginx是不是有限速功能!?报错

我现在的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是没有报错的。

展开
收起
爱吃鱼的程序员 2020-06-14 22:19:19 535 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    我平时需要维护大量服务器。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!
    2020-06-14 22:19:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《Nginx 代理系统常用手册》 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载