ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、CC攻击防护 nginx自带了限流的模块,结合反向代理部署,可以用来防CC攻击:limit_conn和limit_req; ## 二、访问频率限制 ### **首先定义限制请求的区域(可以定义多个)** 在http段增加配置(定义`limit_req_zone`): ``` limit_req_zone $binary_remote_addr zone=myreqzone:10m rate=10r/s; ``` **参数说明:** $binary_remote_addr是需要限制的ip群; zone=myreqzone表示这个limit_zone的名字叫做myreqzone,后面的使用中可以用这个myreqzone来进行指代; 后面的10m,代表为这个zone分配10m的内存,1m可以保存16000个$binary_remote_addr; 最后一个rate是频率,表示每个IP一秒钟只处理10个请求; ### **然后就可以在server段增加配置** ``` ##对全部的请求进行限流(应用上面定义的区域) location /{ ...... limit_req zone=myreqzone burst=150; ...... } ##也可以对某种后缀的url进行限流 location ~* .htm$ { ...... limit_req zone=myreqzone burst=150 nodelay; ...... } ``` >[danger] > 1、burst表示缓冲队列的长度; > 2、nodelay字面的意思是不延迟,具体说是对用户发起的请求不做延迟处理,有请求立即放进来,如果超过区域定义的限制,则直接丢弃,如果不增加nodelay,则严格按照频率,限制请求排队,按照顺序放请求进来处理; ## 三、访问连接限制 ### **首先定义限制连接的区域(可以定义多个)** ``` limit_conn_zone $binary_remote_addr zone=myconnzoneperip:10m; limit_conn_zone $server_name zone=myconnzoneperserver:10m; ``` 区域定义的目的,是将该区域内的IP,同时允许存在的最大连接数,超过这个数字的请求将被返回”Service unavailable” (503)代码; **参数说明** $binary_remote_addr是需要限制的ip群; zone=myconnzoneperip表示这个limit_zone的名字叫做myconnzoneperip,后面的使用中可以用这个myconnzoneperip来进行指代; 后面的10m,代表为这个zone分配10m的内存,1m可以保存16000个$binary_remote_addr是限制同一客户端ip地址; ### **然后就可以配置到Nginx的请求解析段;** ``` server { location / { ...... limit_conn myconnzoneperip 25; ...... } ``` >[danger] > 表示限制每个IP只能同时存在25个连接;