kkfgef 发表于 2016-1-2 16:28:22

关于nginx模块限制问题

lnmp1.2,/usr/local/nginx/sbin/nginx -V下看到nginx version: nginx/1.8.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module这里面好像没有Http_Limit_Req_Module和Http_Limit_Zone_Module这两个模块吧?
同时看了这个帖子 http://www.bzfshop.net/article/176.html
网站安全配置(Nginx)防止网站被攻击(包括使用了CDN加速之后的配置方法)不知1.8的有没默认编译了这两个所需要的模块呢?HttpLimitZoneModule    限制同时并发访问的数量
HttpLimitReqModule   限制访问数据,每秒内最多几个请求
Nginx 限制单个IP的并发连接数及对每个连接速度(限速)#根据用户的真实 IP 做连接限制
## 这里取得原始用户的IP地址
map $http_x_forwarded_for $clientRealIp {
      "" $remote_addr;
      ~^(?P+),?.*$ $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;
      }
}但在 https://bbs.vpser.net/thread-3017-1-1.html
中却可以用到这个功能
#limit_conn_zone $binary_remote_addr zone=perip:10m;去除了#号后,是不是就可以了?
我是一M带宽,这样配置100K?
limit_conn perip 10;limit_rate 100k;

[ 本帖最后由 kkfgef 于 2016-1-2 16:29 编辑 ]

licess 发表于 2016-1-2 19:41:17

这是默认模块不需要单独启用或编译

https://bbs.vpser.net/thread-3017-1-1.html 上有具体设置的说明,这个不是完整的限制带宽的功能,只是限制并发和单个连接的速度。文档末尾有举例说明

kkfgef 发表于 2016-1-3 15:07:29

原帖由 licess 于 2016-1-2 19:41 发表 https://bbs.vpser.net/images/common/back.gif
这是默认模块不需要单独启用或编译

https://bbs.vpser.net/thread-3017-1-1.html 上有具体设置的说明,这个不是完整的限制带宽的功能,只是限制并发和单个连接的速度。文档末尾有举例说明 ...
我的nginx1.8经过这帖子后修改了一下配置:
在 limit_conn_zone $binary_remote_addr zone=perip:10m; 这一行,也把#号给删除了

      root/home/wwwroot/try;
      error_page 404 /404.html;
      error_page 500 502 503 504 /50x.html;
#这里添加了
       limit_conn perip 10;limit_rate 100k;
可是,我在做压力测试的时候,还是不行呢?
从后台日志看到,一秒才不到20个日志写入
121.43.154.199 - - "GET / HTTP/1.1" 200 2085 "-" "PTS-HTTP-CLIENT" --
121.43.154.199 - - "GET / HTTP/1.1" 200 2085 "-" "PTS-HTTP-CLIENT" --
121.43.154.199 - - "GET / HTTP/1.1" 200 2085 "-" "PTS-HTTP-CLIENT" --
121.43.154.199 - - "GET / HTTP/1.1" 200 2085 "-" "PTS-HTTP-CLIENT" --
121.43.154.199 - - "GET / HTTP/1.1" 200 2085 "-" "PTS-HTTP-CLIENT" --
这样的日志了,从浏览器打开网站很是卡而已。像这样的CC攻击如何配置好?

kkfgef 发表于 2016-1-3 15:09:23

期间,边SHH和SFTP这些都很难连接!

licess 发表于 2016-1-4 09:24:00

limit_rate为限速为 100KB/秒。
限制每个连接速度为100K,此限制是针对单个线程,比如,我用IE下载是100K,当用迅雷时它会占用2个线程,所以迅雷下载速度为200K,如果单个IP的并发数设置为10,则多线程下载的话速度可以达到100K×10。

你就只有1兆的带宽,理论上也就是最大才能到128KB/秒,你这一压力过去带宽就耗尽了,配置低的话负载应该很快就上去了

防cc建议还是找专业的
页: [1]
查看完整版本: 关于nginx模块限制问题