nginx可以通过limit_conn_zone 和limit_req_zone两个组件来对客户端访问目录和文件的访问频率和次数进行限制,另外还可以善用进行服务安全加固,两个模块都能够对客户端访问进行限制,具体如何使用要结合公司业务环境进行配置。

如能善用此模块能够对 cc、ddos等此类的攻击进行有效的防御。

一:nginx访问限制模块简介

nginx限速配置指令

1.

指令

limit_zone

语法:limit_conn_zone $variable zone=name:size;

默认值:no

使用字段:http

指令描述会话状态存储区域。

会话的数目按照指定的变量来决定,它依赖于使用的变量大小和memory_max_size的值。

2.

指令

limit_conn

语法:limit_conn zone_name max_clients_per_ip

默认值:no

使用字段:http, server, location

指令指定一个会话的最大同时连接数,超过这个数字的请求将被返回”Service unavailable” (503)代码。

如下例:

http {
imit_conn_zone $binary_remote_addr zone=one:10m; ............ server {
listen 80;
server_name www.abc.com;
location / {
limit_conn one 1; #这将指定一个地址只能同时存在一个连接。“one”与上面的对应,也可以自定义命名
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

上下文:http

命令解析:为session会话状态分配一个大小为size的内存存储区,限制了每秒(分、小时)只接受rate个IP的频率。

4.

指令

limit_req

语法:limit_req  zone=name  burst=burst  [nodelay]

默认值:none

使用字段:http、server、location

命令解析:该指令用于指定使用的内存存储区(zone)名称,以及最大的突发请求数(burse)。如果请求的速率超过了limit_req_zone指令中设置的速率,这些请求将被延迟处理,在这种情况下,请求获得服务不可用信息,返回503状态码。

如下例:

http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server {
location /{
limit_req zone=one burst=10;
}
}

上面的参数会让nginx 每个IP一秒钟只处理一个请求,但是仍然会有很多还在队列里面等待处理,这样也会占用很多tcp连接,从上面那条命令的结果中就能看得出来。

如果加上nodelay就会立即丢弃

limit_req zone=one burst=10 nodelay;

5.

指令

limit_conn_log_level

语法: limit_conn_log_level info | notice | warn | error

默认值: error

使用字段: http, server, location

指定当连接数超过设定的最大连接数,服务器限制连接时的日志等级。

二、实际应用

如果作为代理服务器,我们需要限制每个用户的请求速度和链接数量,但是,由于一个页面有多个子资源,如果毫无选择的都进行限制,那就会出现很多不必要的麻烦,如:一个页面有40个子资源,那么如果想让一个页面完整的显示,就需要将请求速度和连接数都调整到40,以此达到不阻塞用户正常请求,而这个限制,对服务器性能影响很大,几百用户就能把一台nginx的处理性能拉下来。

所以我们需要制定哪些请求是需要进行限制的,如html页面;哪些是不需要限制的,如css、js、图片等,这样就需要通过配置对应的location进一步细化。

我们不对css、js、gif、png,jpg等进行连接限制,而对除此之外的链接进行限制

http {

  limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
... server {
... location ~ .*\.(gif|png|css|js|icon)$ {
proxy_set_header Host $http_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 $http_host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #p_w_picpath_filter resize 480 -;
#p_w_picpath_filter_jpeg_quality 50;
#p_w_picpath_filter_sharpen 10;
#p_w_picpath_filter_buffer 4M; } location / {
proxy_set_header Host $http_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=one burst=5;
} }

补充路径详解:

格式:location ??? {

}

路径优先级 (与代码所在前后顺序无关,只与规则有关)
1. = /error.html
2. ^~ /images/
3. ~* \.(gif|jpg|jpeg|png|bmp|swf)$
4. /static/
5. /

解释:
1.表示完整匹配,用=和完全的路径匹配,比如 =/error.html 就匹配 error.html =/ 匹配根路径
2.表示开头等于,优先级第二,越长就越能匹配,比如^~ /abc/cd ^~/abc 第一个会优先匹配/abc/cd/xxx
3.表示不区分大小的正则,并且正则中含义是.jpg等结尾的,优先级第三,同样正则越长越高。
4.表示开头等于/static/的,但是优先级比第二种低,是一种其他配置找不到再找它,越长就越能匹配。
5.因为4说了是越长越能匹配,当能匹配/static/就不会匹配/,而/是所有其他的一个默认匹配。

特别补充比如:location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ { //注意正则与其他符号要空格,其他一些配置也是如是。

参考官方文档:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

Nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用的更多相关文章

  1. nginx的gzip模块详解以及配置

    文章来源 运维公会:nginx的gzip模块详解以及配置   1.gzip模块作用 gzip这个模块无论在测试环境还是生产环境都是必须要开启,这个模块能高效的将页面的内容,无论是html或者css.j ...

  2. 【nginx】负载均衡和proxy的配置

    简介 使用upstream模块实现nginx负载均衡使用nginx_upstream_check_module模块实现后端服务器的健康检查使用nginx-sticky-module扩展模块实现Cook ...

  3. Nginx基础 - 常用模块配置

    1.Nginx状态监控http_stub_status_module记录Nginx客户端基本访问状态信息 location /mystatus { stub_status on; access_log ...

  4. nginx 的限制连接模块limit_zone与limit_req_zone

    转载于:http://storysky.blog.51cto.com/628458/642970/ nginx 上有两个限制连接的模块一个是 limit_zone 另一个是 limie_req_zon ...

  5. Nginx 访问日志配置

    一.Nginx 访问日志介绍 Nginx 软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由 ngx_http_log_module 模块负责. 二. ...

  6. nginx访问静态文件配置

    通过nginx访问静态文件配置,均是在server模块中配置,有两种方式: 1.alias 通过alias关键字,重定义路径,如 server{     listen 7001;     server ...

  7. FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块(转)

    1.Nginx的FastDFS模块什么作用? 我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传.下载.删除等操作.同时通过 FastDFS的HTT ...

  8. 2020年,最新NGINX的ngx_http_geoip2模块以精准禁止特定国家或者地区IP访问

    1.0 geoip2核心识别库 安装geoip2 lib步骤: cd /usr/local/src .tar.gz wget https://github.com/maxmind/libmaxmind ...

  9. Nginx使用SSL模块配置https

    背景 开发微信小程序,需要https域名,因此使用Nginx的SSL模块配置https 步骤 一.去域名管理商(如腾讯云.阿里云等)申请CA证书 二.在Nginx中配置,一般情况下域名管理商会提供配置 ...

随机推荐

  1. Phalcon框架数据库读写分离的实现方法

    Phalcon框架和Yaf类似,是一款用C实现的拓展级别的框架,不过其功能实现更加丰富,设计思路基于依赖注入.容器等方式,更符合现代框架思想.本文主要针对Phalcon框架数据库层的读写分离进行说明, ...

  2. Vue.js Client-Side Storage;( Web Storage/localStorage)

    原文:https://cn.vuejs.org/v2/cookbook/client-side-storage.html LocalStorage (api) my code pen :https:/ ...

  3. (GoRails) 如何去掉form输入框头尾的空格;何时用callbacks,gem;

    视频:https://gorails.com/episodes/when-callbacks-and-adding-dependencies-are-good?autoplay=1 主题:应当在什么时 ...

  4. 看起来很懵的java内存加载面试题

    源代码如下,求结果 public class MemoryAnalyse { public static int k = 0; public static MemoryAnalyse t1 = new ...

  5. Service Account和其secrets 作用和场景,看了不亏。。

    Service Account概念的引入是基于这样的使用场景: 运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Account它并 ...

  6. 模拟模拟vij1120

    花生采摘 描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”. 鲁宾逊先生和多多都很开心,因为花生正 ...

  7. OAF 获取页面路径

    --模糊查询某个页面 SELECT * FROM JDR_PATHS jp WHERE JP.PATH_NAME LIKE '%XXXX%'; --精确的查找过程 -- DocID --参数通过关于此 ...

  8. 无名管道跟dup,dup的使用

    参考资料: http://www.tldp.org/LDP/lpg/node11.html http://blog.csdn.net/yeyuangen/article/details/6852682 ...

  9. spring boot 学习(八)定时任务 @Scheduled

    SpringBoot 定时任务 @Scheduled 前言 有时候,我们有这样的需求,需要在每天的某个固定时间或者每隔一段时间让应用去执行某一个任务.一般情况下,可以使用多线程来实现这个功能:在 Sp ...

  10. vuex2.0+两个小例子

    首先vuex概念比较多,一定要搞懂里面的概念,可以参考官网Vuex2.0概念,我写此文的目的是希望能对前端爱好者提供个参考,加深对vuex2.0各核心概念的理解. 废话少说,直接上干货.这是官网上的一 ...