zoukankan      html  css  js  c++  java
  • Nginx学习笔记(五、Nginx缓存与限流)

    目录:

    • Nginx缓存
    • Nginx限流

    Nginx缓存

    顾名思义,Nginx缓存就是Nginx在接受到代理服务器的数据后,根据Cache的配置将这样写数据缓存到本地硬盘。

    当客户端下次访问相同数据时,Nginx服务器直接从硬盘检索到响应的数据给客户,从而减少于被代理服务器交互的时间。

    1、Cache配置:

     1 proxy_temp_path  /usr/local/nginx/proxy_temp 1 2;
     2 proxy cache_path /usr/local/nginx/proxy_cache/mycache levels=1:2 keys_zone=mycache:100m inactive=1d max_size=1g;
     3 
     4 location ~^.(png|jpg|gif|css|js|html)$ {
     5     # cache config
     6     proxy_cache         mycache;
     7     proxy_cache_key     $host$uri;
     8     proxy_cache_valid   200 206 304 301 302 10m;
     9     expires             30d;
    10     
    11     # proxy_pass
    12     proxy_set_header    Host $host:$server_port;
    13     proxy_set_header    X-Real-IP $remote_addr;
    14     
    15     # cache有HIT、MISS、EXPIRED三种状态
    16     proxy_set_header    X-Cache $upstream_cache_status;
    17     proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    18     proxy_pass          http://127.0.0.1:8080/;
    19 }
    • proxy_temp_path:临时文件存放路径。1 2的意思是文件按照二级hash目录存放,一级目录1个字符,二级目录2个字符。
      • 目录字符按照16进制存放,1级0-f,2级00-ff;nginx会把请求hash后,再放入对应的路径,取出同理(注意:它是懒hash,非一开始全部创建所有的一级二级目录)。
    • proxy_cache_path:缓存文件的存放路径。
      • levels:1:2表示两级hash目录存放,同proxy_temp_path。
      • keys_zone:设置缓存名字和缓存内存的大小(格式=缓存名:内存大小)。
      • inactive:在指定时间内没有被访问的cache将被删除。
      • max_size:最大缓存空间,如果缓存空间满了,默认会覆盖掉缓存时间最长的资源。
    • proxy_cache_key:定义缓存唯一key,判断缓存存放的路径就是用此key的hash值。
    • proxy_cache_valid:设置缓存内容和时间,上述示例则是对httpcode=200、206、304、301、302进行10分钟的缓存。

    Nginx限流

    Nginx限流的方式:

    测试限流的压测工具:apache bench(可用于简单的压测)。

    1、令牌桶:

    原理解析:

    • 令牌以固定速率产生,并缓存到令牌桶中;令牌桶最多存放N个令牌,放满时多余的令牌将被丢弃
    • 请求数量要与产生的令牌数量等比才能都被处理;当令牌不足N个时,多余令牌也不会被删除;当请求大于令牌数量时,请求会被缓存或丢弃(看所需的策略)。

    2、漏桶:

    原理解析:

    • 固定容量的漏桶,按照固定速率流出请求;
    • 漏桶的容量不便,可以以任意速率放入请求到漏桶;
    • 如果桶是空的,则不需要流出请求;如果放入的请求超过桶的容量,则多余的请求将被丢弃。

     令牌桶和漏桶的区别:

    令牌桶算法和漏桶算法最明显的区别就是是否允许突发流出的处理。

    我们可以想想,令牌桶是均匀的产生令牌放入桶中,当流量低峰时,桶中的令牌数任然保持为N-X(N=桶的容量,X=当前时间的请求数),即使是突发流量的到来也能处理最大为N的请求数。

    而漏桶则不能应对突发流量,因为漏桶的流速是始终固定的,突发流量的到来会导致请求溢出。

    Nginx连接数限流配置:

     1 http {
     2     # limit connections
     3     limit_conn_zone      $binary_remote_addr zone=addr:10m;
     4     limit_conn_zone      $server_name zone=preserver:10m;
     5     limit_conn_log_level error;
     6     limit_conn_status    503;
     7     
     8     server {
     9         listen      80;
    10         server_name www.xxxxxx.com
    11         
    12         location / {
    13             root  html;
    14             index index.html index.htm
    15             
    16             limit_conn_addr 1;
    17             limit_conn preserver 2;
    18         }
    19     }
    20 }

    limit_conn:存key和计数器的共享内存区域和指定key的最大连接数。

    limit_conn_zone:用于配置限流key及存放key对应信息的共享内存区域大小。$binary_remote_addr标识根据IP地址,也可以使用$server_name来限制域名最大数。

    limit_conn_status:被限流后返回的状态码。

    limit_conn_log_level:被限流后记录日志的级别,默认error级别。

    Nginx请求限流配置(漏桶算法):

     1 http {
     2     limit_req_zone       $binary_remote_addr zone=addr:10m rate=1r/s;
     3     limit_conn_log_level error;
     4     limit_conn_status    503;
     5     
     6     server {
     7         listen      80;
     8         server_name www.xxxxxx.com
     9         
    10         location / {
    11             root  html;
    12             index index.html index.htm
    13             
    14             # burst默认值是0;延迟模式默认是delay。
    15             limit_req zone=addr 1 burst=5 noelay;
    16         }
    17     }
    18 }

    limit_req:配置限流区域、桶容量(突发容量,默认为0)、是否延迟(默认延迟)。

    limit_req_zone:限流key,存放key对应信息的共享内存区域大小、固定请求速率。固定请求速率支持10r/s或者60r/m,即每秒10个请求或每分钟60个请求。

    limit_conn_status:被限流后返回的状态码。

    limit_conn_log_level:被限流后记录日志的级别,默认error级别。

    基于连接和基于请求有啥区别:

    基于连接,限制并发连接数;基于请求,限制访问频率。

  • 相关阅读:
    git 创建一个空分支
    github page的两种类型
    hexo-theme-next
    github网页
    Linux下的CPU使用率与服务器负载的关系与区别
    mysql数据库优化日志(更)-howyue
    图片延时加载
    jQuery实现页面滚动时顶部动态显示隐藏
    TCP与UDP区别
    记一次网站服务器迁移(my)
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/14014633.html
Copyright © 2011-2022 走看看