怎样在小程序里实现标题的更改
1667
2022-09-28
nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用详解
nginx可以通过limit_conn_zone 和limit_req_zone两个组件来对客户端访问目录和文件的访问频率和次数进行限制,另外还可以善用进行服务安全加固,两个模块都能够对客户端访问进行限制,具体如何使用要结合公司业务环境进行配置。
如能善用此模块能够对 cc、ddos等此类的***进行有效的防御。
一:nginx访问限制模块简介
nginx限速配置指令
1.
指令
limit_zone
语法:limit_conn_zone $variable zone=name:size;
默认值:no
使用字段:zone_name max_clients_per_ip
默认值:no
使用字段:server, location
指令指定一个会话的最大同时连接数,超过这个数字的请求将被返回”Service unavailable” (503)代码。
如下例:
limit_conn_zone $binary_remote_addr zone=kjh:10m;
server { listen 80; server_name abc.com;location /{ limit_conn kjh 1; ##这将指定一个地址只能同时存在一个连接。limit_rate 300k; }}
limit_zone: 是针对每个IP定义一个存储session状态的容器.这个示例中定义了一个10m的容器,按照32bytes/session, 可以处理320000个session。
limit_conn one 1:限制每个IP只能发起一个并发连接。
limit_rate 300k: 对每个连接限速300k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。
nginx限制访问频率配置指令
3.
指令
limit_req_zone
语法:limit_req_zone $session_variable zone=name:size rate=rate
默认值:none
上下文: zone=name burst=burst [nodelay]
默认值:none
使用字段: $binary_remote_addr zone=kjh:10m rate=1r/s; server { location /{ limit_req zone=kjh burst=10; } }
上面的参数会让nginx 每个IP一秒钟只处理一个请求,但是仍然会有很多还在队列里面等待处理,这样也会占用很多tcp连接,从上面那条命令的结果中就能看得出来。
如果加上nodelay就会立即丢弃
limit_req zone=kjh burst=10 nodelay;
5.
指令
limit_conn_log_level
语法: limit_conn_log_level info | notice | warn | error
默认值: error
使用字段: server, location
指定当连接数超过设定的最大连接数,服务器限制连接时的日志等级。
二、实际应用
如果作为代理服务器,我们需要限制每个用户的请求速度和链接数量,但是,由于一个页面有多个子资源,如果毫无选择的都进行限制,那就会出现很多不必要的麻烦,如:一个页面有40个子资源,那么如果想让一个页面完整的显示,就需要将请求速度和连接数都调整到40,以此达到不阻塞用户正常请求,而这个限制,对服务器性能影响很大,几百用户就能把一台nginx的处理性能拉下来。
所以我们需要制定哪些请求是需要进行限制的,如html页面;哪些是不需要限制的,如css、js、图片等,这样就需要通过配置对应的location进一步细化。
我们不对css、js、gif、png,jpg等进行连接限制,而对除此之外的链接进行限制
{ limit_conn_zone $binary_remote_addr zone=addr:10m; limit_req_zone $binary_remote_addr zone=kjh:10m rate=5r/s; ... server { ... location ~ .*\.(gif|png|css|js|icon)$ { proxy_set_header Host $ proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~* .*\.(jpeg|jpg|JPG)$ { proxy_set_header Host $ proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # image_filter resize 480 -; # image_filter_jpeg_quality 50; # image_filter_sharpen 10; # image_filter_buffer 4M; } location / { proxy_set_header Host $ proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #limit limit_conn addr 3; limit_req zone=kjh burst=5; }}
参考文章
http://log.medcl-/item/2013/02/nginx-speed-limit/
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~