Limit Requests模块可以限制单个客户端发送请求的速率。
示例配置如下:
复制代码代码示例:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location ~ .*\.(php|php5)?$ { limit_req zone=one burst=5 nodelay; fastcgi_pass unix:/tmp/php-cgi-www.jbxue.com.sock; fastcgi_index index.php; include fcgi.conf; } } 以上配置,限制单个客户端请求php动态文件的速率是每秒一个请求,峰值是5个请求。 附,nginx利用limit模块设置IP并发防CC攻击
在nginx.conf 中的http字段下面加入:
复制代码代码示例:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ##平均 1r/s 每秒1个请求
然后,在server下配置的主机定义文档中加入如下一行(全局就加在server下面)
复制代码代码示例:
limit_req zone=one burst=8;队列模式
limit_req zone=one burst=8 nodelay; ###不用队列 默认的突发(burst是0)
如果只想限制php的请求,加在location中:
复制代码代码示例:
location ~ \.php$ {
try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; limit_req zone=one burst=8 nodelay;
重加载nginx:
比如nginx.conf的http段配置:
复制代码代码示例:
limit_req_zone $binary_remote_addr zone=req:20m rate=100r/s;
limit_req zone=req burst=150;
“limit_req_zone $binary_remote_addr zone=req:20m rate=100r/s;”
然后就是burst=150了。这相当于在检查站req旁边放150个座位。如果某个请求当时超过速度限制被拦了,请他在空座位上坐着,等排队,如果检查站空了,就可以通过。如果连座位都坐满了,那就抱歉了,请求直接退回,客户端得到一个服务器忙的响应。 就是这些了,在某些特定的环境或需求中,确实要进行限速或防止CC攻击,希望以上的方法,可以帮助到大家。 (责任编辑:IT) |