精华内容
下载资源
问答
  • NGINX内容缓存配置

    2019-11-20 21:52:57
    NGINX内容缓存配置 本节介绍如何启用和配置从代理服务器收到的响应的缓存。 总览 启用响应缓存 缓存涉及的NGINX进程 指定要缓存的请求 限制或绕过缓存缓存中清除内容 配置缓存清除 发送清除命令 ...

    NGINX内容缓存配置

    本节介绍如何启用和配置从代理服务器收到的响应的缓存。

     

    总览

    启用缓存后,NGINX Plus将响应保存在磁盘缓存中,并使用它们来响应客户端,而不必每次都代理相同内容的请求。

    要了解有关NGINX Plus缓存功能的更多信息,请观看NGINX网络研讨会的内容缓存,并深入了解诸如动态内容缓存,缓存清除和延迟缓存等功能。

     

    启用响应缓存

    要启用缓存,请将proxy_cache_path指令包含在顶级上下文中。强制性的第一个参数是缓存内容的本地文件系统路径,而强制性参数定义用于存储有关缓存项的元数据的共享内存区的名称和大小:http {}keys_zone

    然后将proxy_cache指令包含在要为其缓存服务器响应的上下文(协议类型,虚拟服务器或位置)中,并keys_zoneproxy_cache_path指令指定参数定义的区域名称(在本例中为one):

    请注意,keys_zone参数定义的大小并不限制缓存的响应数据的总量。缓存的响应本身与元数据的副本一起存储在文件系统上的特定文件中。要限制缓存的响应数据量,请max_sizeproxy_cache_path指令中包含参数。(但是请注意,缓存的数据量可能会暂时超过此限制,如下一节所述。)

     

    缓存涉及的NGINX进程

    缓存还涉及另外两个NGINX流程:

    • 高速缓存管理器周期性地起动,检查高速缓存的状态。如果高速缓存大小超出了max_size参数由proxy_cache_path伪指令设置的限制,则高速缓存管理器将删除最近最少访问的数据。如前所述,在缓存管理器激活之间的时间内,缓存的数据量可能会暂时超过限制。
    • 缓存加载器只运行一次,NGINX开始之后。它将有关先前缓存的数据的元数据加载到共享内存区域中。在启动后的最初几分钟内,一次加载整个缓存可能会消耗足够的资源,从而降低NGINX的性能。为避免这种情况,请通过在proxy_cache_path伪指令中包含以下参数来配置缓存的迭代加载:
      • loader_threshold –迭代持续时间,以毫秒为单位(默认为  200
      • loader_files –一次迭代期间加载的最大项目数(默认为  100
      • loader_sleeps –迭代之间的延迟,以毫秒为单位(默认为  50

    在下面的示例中,迭代持续300 毫秒或直到200 加载项为止:

    proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

     

    指定要缓存的请求

    默认情况下,NGINX Plus会缓存对使用HTTP发出的请求的所有响应,GETHEAD在首次从代理服务器接收到此类响应时使用方法。NGINX Plus使用请求字符串作为请求的键(标识符)。如果请求具有与缓存的响应相同的密钥,则NGINX Plus会将缓存的响应发送到客户端。您可以在不同的指令,或上下文来控制其响应缓存。http {}server {}location {}

    要更改用于计算密钥的请求特征,请包含以下proxy_cache_key指令:

    proxy_cache_key "$host$request_uri$cookie_user";

    要定义在缓存响应之前必须进行具有相同密钥的请求的最小次数,请包含以下proxy_cache_min_uses指令:

    proxy_cache_min_uses 5;
    

    要使用GET和以外的方法来缓存对请求的响应HEAD,请将它们与GET和一起HEAD作为proxy_cache_methods指令的参数列出:

    proxy_cache_methods GET HEAD POST;

     

    限制或禁用缓存

    默认情况下,响应会无限期保留在缓存中。仅当高速缓存超过最大配置大小时才将其删除,然后按自上次请求以来的时间长度顺序进行删除。您可以设置多长时间缓存的响应被认为是有效的,甚至他们是否在所有使用,通过在指示,或上下文:http {}server {}location {}

    要限制具有特定状态码的缓存响应被视为有效的时间,请包含以下proxy_cache_valid指令:

    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404      1m;

    在此示例中,带有代码200或的响应302被认为有效10分钟,带有代码的响应被认为有效4041分钟。要定义所有状态代码的响应的有效时间,请指定any作为第一个参数:

    proxy_cache_valid any 5m;

    要定义NGINX Plus不向客户端发送缓存的响应的条件,请包含proxy_cache_bypass指令。每个参数定义一个条件,并由许多变量组成。如果至少一个参数不为空并且不等于“ 0”(零),则NGINX Plus不会在高速缓存中查找响应,而是立即将请求转发给后端服务器。

    proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;

    要定义NGINX Plus根本不缓存响应的条件,请包含proxy_no_cache指令,以与proxy_cache_bypass指令相同的方式定义参数。

    proxy_no_cache $http_pragma $http_authorization;

     

    从缓存中清除内容

    NGINX可以从缓存中删除过期的缓存文件。这对于删除过期的缓存内容是必要的,以防止同时提供新旧版本的网页。收到包含自定义HTTP标头或HTTP PURGE方法的特殊“清除”请求后,将清除缓存。

     

    配置缓存清除

    让我们设置一个配置,该配置标识使用HTTP PURGE方法的请求并删除匹配的URL。

    • 在上下文中,创建一个新变量,例如,该变量取决于该变量:http {}$purge_method$request_method

    ​​​​​​               ​

    • 在配置了缓存的块中,包括指令以指定用于缓存清除请求的条件。在我们的示例中,它是上一步中配置的:location {}proxy_cache_purge$purge_method

      server {
          listen      80;
          server_name www.example.com;
      
          location / {
              proxy_pass  https://localhost:8002;
              proxy_cache mycache;
      
              proxy_cache_purge $purge_method;
          }
      }

     

    发送清除命令

    proxy_cache_purge指令配置,你需要发送一个特殊的缓存清除请求清除缓存。您可以使用多种工具发出清除请求,包括curl以下示例中的命令:

    在该示例中,将清除具有公共URL部分(由星号通配符指定)的资源。但是,此类高速缓存条目不会完全从高速缓存中删除:它们保留在磁盘上,直到因不活动(由指令的inactive参数确定proxy_cache_path)或由高速缓存清除程序(将purger参数启用为proxy_cache_path)或客户端而被删除为止。尝试访问它们。

     

    限制对清除命令的访问

    我们建议您限制允许发送缓存清除请求的IP地址数量:

    geo $purge_allowed {
       default         0;  # deny from other
       10.0.0.1        1;  # allow from localhost
       192.168.0.0/24  1;  # allow from 10.0.0.0/24
    }
    
    map $request_method $purge_method {
       PURGE   $purge_allowed;
       default 0;
    }

    在此示例中,NGINX检查PURGE请求中是否使用了该方法,如果是,则分析客户端IP地址。如果IP地址已列入白名单,则将$purge_method设置为$purge_allowed1允许清除,并0拒绝它。

     

    从缓存中完全删除文件

    要完全删除与星号匹配的缓存文件,请激活一个特殊过程,该过程永久性地遍历所有缓存条目,并删除与通配符匹配的条目。在上下文中将参数包含在指令中:cache purgerpurgerproxy_cache_pathhttp {}

    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;

     

    缓存清除配置示例

    http {
        ...
        proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;
    
        map $request_method $purge_method {
            PURGE 1;
            default 0;
        }
    
        server {
            listen      80;
            server_name www.example.com;
    
            location / {
                proxy_pass        https://localhost:8002;
                proxy_cache       mycache;
                proxy_cache_purge $purge_method;
            }
        }
    
        geo $purge_allowed {
           default         0;
           10.0.0.1        1;
           192.168.0.0/24  1;
        }
    
        map $request_method $purge_method {
           PURGE   $purge_allowed;
           default 0;
        }
    }

     

    字节范围缓存

    初始高速缓存填充操作有时会花费很长时间,尤其是对于大文件。例如,当视频文件开始下载以满足部分文件的初始请求时,后续请求必须等待整个文件被下载并放入缓存中。

    NGINX可以缓存此类范围请求,并使用“ 缓存切片”模块逐渐填充缓存,该模块将文件分成较小的“切片”。每个范围请求都选择覆盖所请求范围的特定切片,如果仍未缓存该范围,则将其放入缓存。对这些切片的所有其他请求均从缓存中获取数据。

    要启用字节范围缓存:

    1. 确保NGINX是使用“ 缓存切片”模块编译的。

    2. 使用slice指令指定切片的大小:

      location / {
          slice  1m;
      }

    选择切片大小以使切片下载速度更快。如果大小太小,则内存使用可能会过多,并且在处理请求时会打开大量文件描述符,而太大的大小可能会导致延迟。

    1. $slice_range变量包括到缓存键中:

      proxy_cache_key $uri$is_args$args$slice_range;
    2. 使用206状态码启用响应缓存:

      proxy_cache_valid 200 206 1h;
    3. 通过$slice_rangeRange标头字段中设置变量,可以将范围请求传递到代理服务器:

      proxy_set_header  Range $slice_range;

    这是完整的配置:

    location / {
        slice             1m;
        proxy_cache       cache;
        proxy_cache_key   $uri$is_args$args$slice_range;
        proxy_set_header  Range $slice_range;
        proxy_cache_valid 200 206 1h;
        proxy_pass        http://localhost:8000;
    }

    请注意,如果启用了切片缓存,则不得更改初始文件。

     

    组合配置示例

    下面的示例配置结合了上述某些缓存选项。

    http {
        ...
        proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 
                         loader_files=200 max_size=200m;
    
        server {
            listen 8080;
            proxy_cache mycache;
    
            location / {
                proxy_pass http://backend1;
            }
    
            location /some/path {
                proxy_pass http://backend2;
                proxy_cache_valid any 1m;
                proxy_cache_min_uses 3;
                proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
            }
        }
    }

    在此示例中,两个位置使用相同的缓存,但方式不同。

    由于响应backend1很少改变,因此不包括缓存控制指令。响应在第一次发出请求时被缓存,并无限期保持有效。

    相比之下,对请求的响应backend2通常由更改来服务,因此它们仅在1分钟内有效,并且直到发出相同请求3次后才被缓存。此外,如果请求符合proxy_cache_bypass指令定义的条件,NGINX Plus会立即将请求传递给,backend2而无需在缓存中查找相应的响应。

    展开全文
  • nginx 代理缓存

    2018-05-22 11:30:37
    nginx proxy 缓存简介 转自:https://mp.weixin.qq.com/s/DRTWuwiB6gdrRVEP6UWBAg nginx 将用户已经访问过的内容保留在 nginx 服务器本地,这样在一段时间内用户再次访问该数据,就不需要 nginx 服务器对后端服务器...

    nginx proxy 缓存简介

    转自:https://mp.weixin.qq.com/s/DRTWuwiB6gdrRVEP6UWBAg

    nginx 将用户已经访问过的内容保留在 nginx 服务器本地,这样在一段时间内用户再次访问该数据,就不需要 nginx 服务器对后端服务器发请求,减少 nginx 和后端服务器之间的网络阻塞,减小数据延迟,提高用户访问速度。即使后端服务器宕机,nginx 的 cache 也会返回给客户端请求,不至于服务不可用。 proxy cache 是把请求的链接用 md5 编码 hash 后保存,所以它可以支持任意链接,同时也支持 404/301/302 这样的非 200 状态。

    nginx proxy cache 缓存配置

    配置样例

    proxy_cache_path /home/work/nginx/proxy_cache levels=1:2 keys_zone=cache:2g inactive=2d max_size=8g;
    location ~ ^/api {
          proxy_buffering on;
          proxy_upstream_tries 2;
          proxy_cache cache;
          proxy_cache_valid 200 304 15m;
          proxy_cache_key $host$uri?Accept-Encoding=$http_accept_encoding;
          proxy_ignore_headers "Cache-Control" "Expires" ;
    }

    配置项说明
    proxy_cache_path:本地路径,缓存文件存放路径。
    levels:cache 目录的层次,使用 2 级目录来存储缓存文件。
    keys_zone: 在共享内存中设置一块存储区域来存放缓存的 key 和 metadata(类似使用次数),这样 nginx 可以快速判断一个 request 是否命中或者未命中缓存,1m 可以存储 8000 个 key,10m 可以存储 80000 个 key。
    inactive : 未被访问文件在缓存中保留时间,本配置中如果 2 天未被访问,缓存控制程序会删掉文件,默认为 10 分钟。
    max_size : 最大 cache 空间,如果不指定,会使用掉所有 disk space,当达到配额后,会删除最少使用的 cache 文件。
    proxy_cache : 启用 proxy cache,指定 key_zone。
    proxy_cache_valid: 设置不同相应码的缓存时间,当不指定响应码的时候,例如 proxy_cache_valid 5m; 只对响应码为 200,301,302 的访问请求资源设置缓存时间。
    proxy_cache_key:若某个接口返回的值基本不变,或者是特定类别的,就可以根据请求的 url 的参数,自定义 cache key。
    proxy_ignore_headers:禁止处理来自代理服务器的应答,可以设置的字段有 ”X-Accel-Redirect”, “X-Accel-Expires”, “Expires” 或”Cache-Control。
    注意:proxy_cache_key 压缩方式 Accept-Encoding 应该指定为通用压缩格式,防止客户端不支持某种压缩方式。
    nginx log 里可以添加缓存命中状态,便于查看是否命中,统计缓存命中率,具体可以如下定义格式:

    log_format  main  '$remote_addr - $remote_user [$time_local] "$host|$request" $status $body_bytes_sent '
            '$request_length $request_body "$http_referer" "$http_user_agent" "$scheme" "$http_x_forwarded_for" '
            '"$upstream_cache_status" "$http_accept_encoding" "$upstream_addr" "$request_time_usec" "$request_time_msec" '
            '"$request_time" "$upstream_response_time"';

    $upstream_cache_status 包含以下几种状态:
    MISS:未命中,请求被传到后端
    HIT:缓存命中
    EXPIRED:缓存过期,请求被传到后端
    UPDATING:缓存正在更新,使用旧缓存应答
    STALE:后端将得到过期的应答

    故障时利用 cache 对服务降级

    当调用后端接口暂时故障时,比如用手机看视频拿不到播放数据,或者不出广告,这时候如果有 cache,nginx 会返回给客户端之前暂存的缓存数据,或者提前准备好的静态页面,用户不至于面对一个空白页面。对于重要的一级接口,可以每天请求一次填充 cache 到备份 nginx 服务器,即使线上后端接口完全不可用,流量冗余到备份服务器,对用户体验也不会有很大影响。

    cache 优化

    nginx 只有硬盘级别 cache,没有内置内存级别的 cache,为了利用内存加速,减少服务器响应时间,可以将 cache 目录挂载到 / dev/shm 内存目录。
    mount --bind /dev/shm/proxy_cache /home/work/nginx/proxy_cache
    线上流量相差不大的情况下,将 cache 目录挂载到内存与未挂载到内存的耗时对比,还是有明显差距,将 cache 目录挂载到内存中,响应时间可以缩短 7 倍以上。

    总结

    缓存不是什么高深技术,但是正确利用缓存,在业务遭受大流量冲击下,会起到重要作用,缓存的 key 设置需合理,避免不正确缓存。

    参考资料

    http://nginx.org/en/docs/http/ngx_http_proxy_module.html
    http://www.alonely.com.cn/Nginx/20160827/18993.html

    转载于:https://blog.51cto.com/243662875/2118988

    展开全文
  • nginx expires 缓存

    千次阅读 2019-03-13 18:00:13
    nginx 缓存设置非常简单,可以设置在location /if 段里。 注:这个缓存是指针对浏览器所做的缓存,不是指服务器端的数据缓存. 下面就以具体的示例网站,针对该示例网站做实验。 一般缓存是针对不常发生变化的内容来...

    本文针对nginx expires 设置进行讲解。nginx 缓存设置非常简单,可以设置在location /if 段里。

    注:这个缓存是指针对浏览器所做的缓存,不是指服务器端的数据缓存.

    下面就以具体的示例网站,针对该示例网站做实验。

    一般缓存是针对不常发生变化的内容来做的缓存,在我们的这个示例网站中,可以看到图片是很多的,如果每次访问都请求加载很多图片资源的话,那是相当慢的,也是非常浪费服务器资源的。

    ok,我们这边设置nginx 做下缓存,让浏览器一个星期内不再重复请求图片内容。

    我们先看下,在没做缓存配置前的一个浏览器请求响应头信息:

     

    注:我这里nginx 有配置过虚拟主机,把虚拟主机的配置单独抽离出来放在了vhosts 目录下,因此,下面所做的配置主要是针对该主机,如果配置在nginx.conf 文件中也同样适用的(前提要配置正确哦)。

    配置如下:

    location ~* \.(jpg|jpeg|gif|png){
    
            root       /data/www/OneGame/public ;
            expires 7d;
    
    }

    该配置表示:所有在/data/www/OneGame/public 目录下的以.jpg、.png、.gif、.jpeg为后缀  (不区分大小写)的文件缓存7天。

     以下是我配置文件完整内容:

     

     

    让nginx  重新载入配置

    nginx -s reload

     

    然后强制刷新访问示例网站,查看一下图片的请求响应头信息。

    可以看到响应头信息多了一个Cache-Control ,而且该值为:604800 ( 3600 * 24 * 7 ) ,该值单位为秒,即缓存7天。

    再次刷新(非强制刷新)查看浏览器请求响应头信息

    再次刷新后(非强制刷新),可以查看到,状态码304的数据浏览器已经没有再请求服务器了


    原理是:第一次浏览器访问资源,服务器响应Etag 验证令牌,Last-Modified 时间,Cache-Control:max-age 缓存时长,第二次浏览器发送请求的时候在HTTP If-None-Match 请求标头中加上ETAG 验证令牌,服务器根据当前请求资源核对令牌如果它未发生变化,服务器返回"304 Not Modified"响应,告知浏览器缓存中响应未发生变化,可以继续延用Cache-Control响应头中max-age时长。这次不必再次下载响应,这节约了时间和带宽。

    浏览器发出的所有 HTTP 请求会首先路由到浏览器缓存,以确认是否缓存了可用于满足请求的有效响应。 如果有匹配的响应,则从缓存中读取响应,这样就避免了网络延迟和传送产生的流量费用。

    关于HTTP 缓存更多内容,推荐:https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-cn 。

    展开全文
  • Nginx 使用nginx cache缓存网站数据

    千次阅读 2018-11-28 18:05:43
    Nginx本身就有缓存功能,能够缓存静态对象,比如图片、CSS、JS等内容直接缓存到本地,下次访问相同对象时,直接从缓存即可,无需访问后端静态服务器以及存储存储服务器,可以替代squid功能。 1 环境准备 我们这里只...

    Nginx本身就有缓存功能,能够缓存静态对象,比如图片、CSS、JS等内容直接缓存到本地,下次访问相同对象时,直接从缓存即可,无需访问后端静态服务器以及存储存储服务器,可以替代squid功能。

    1 环境准备

    我们这里只测试nginx的proxy_cache的缓存功能,所以结构越简单越好,这里我们只需要准备一台nginx的虚拟机即可,如果没有nginx,那么我们可以使用epel源,yum安装一个即可:

    #添加epel源

        root@~>> wget -O /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo
    

    #yum安装nginx

    root@~>> yum install nginx -y
    

    #rpm -ql查看主要配置文件位置

        root@~>> rpm -ql nginx
    

    这里为了简单,只使用简单的nginx.conf配置文件:

    root@nginx>> cat nginx.conf
    
        user              nginx;
        worker_processes  1;
        error_log /var/log/nginx/error.log;
        pid       /var/run/nginx.pid;
        events {
           worker_connections  1024;
        }
        http {
           include      /etc/nginx/mime.types;
           default_type application/octet-stream;
           log_format  main  '$remote_addr - $remote_user [$time_local]"$request" '
                              '$status $body_bytes_sent"$http_referer" '
                             '"$http_user_agent" "$http_x_forwarded_for"';
           sendfile        on;
           keepalive_timeout  65;
           server {
               listen 80;
               location / {
                    root   /usr/share/nginx/html;
                    index  index.html index.htm;
               }
           }
        }
    

    启动查看初始界面是否正常:

    root@nginx>> nginx
    
    root@nginx>> netstat -tupln|grepnginx
    tcp       0      0 0.0.0.0:80           0.0.0.0:*                   LISTEN      1043/nginx
    root@nginx>> curl -I 192.168.16.199
    HTTP/1.1 200 OK
    Server: nginx/1.0.15
    Date: Mon, 14 Sep 2015 09:40:53 GMT
    Content-Type: text/html
    Content-Length: 3698
    Last-Modified: Tue, 16 Jun 2015 21:34:15GMT
    Connection: keep-alive
    Accept-Ranges: bytes
    

    一切正常,首页有2张图片,正好用于实验:

    root@html>> tree/usr/share/nginx/html/
    /usr/share/nginx/html/
    |-- 404.html
    |-- 50x.html
    |-- index.html
    |-- nginx-logo.png
    `-- poweredby.png
    

    至此环境准备完毕。

    2 配置cache

    2.1 创建目录并挂载tmpfs

    nginx的proxy_cache是基于内存和磁盘的缓存,需要指定缓存目录和临时目录:

    root@nginx>> mkdir /tmp/{ngx_tmp,ngx_cache}-p
    

    缓存存放于磁盘,磁盘IO会影响缓存的速度,所以我们在将tmpfs挂载于ngx_cache目录上来加速缓存的读取和写入:

    root@nginx>> mount -t tmpfs -osize=100M tmpfs /tmp/ngx_cache
    root@nginx>> mount|grep tmpfs
    tmpfs on /dev/shm type tmpfs (rw)
    tmpfs on /tmp/ngx_cache type tmpfs (rw,size=100M)
    

    2.2 配置缓存目录大小以及key空间名

    将下面配置放至http标签中:

    root@nginx>> grep proxy_cache_pathnginx.conf
    
           proxy_cache_path /tmp/ngx_cache levels=1:2 keys_zone=cache_one:100minactive=1d max_size=5g;
    

    #指定缓存目录,缓存等级,键空间名,键空间大小,失效时间,以及磁盘最大缓存大小

    2.3 配置反向代理

    首先配置upstream节点池:

    upstream server_pool {
       server 127.0.0.1:8080;
    }
    

    在server标签的location段中配置代理:

    proxy_pass http://server_pool;
    

    配置8080端口的标签:

    server {
       listen 8080;
       location / {
           root /usr/share/nginx/html;
           index index.html index.htm;
       }
       access_log /var/log/nginx/access.log  main;
    }
    

    配置proxy_cache相关参数启用缓存:

    proxy_pass http://server_pool;
    proxy_next_upstream http_502 http_504error timeout invalid_header; #出错尝试下一个节点
    proxy_cache cache_one;      #缓存键空间名
    proxy_cache_valid 200 304 12h; #指定对应状态码的缓存时间
    proxy_cache_valid 301 302 1m;
    proxy_cache_valid any 1m;
    proxy_cache_key $host$uri$is_args$args; #指定键key的格式
    proxy_set_header Host $host;        #传递主机名给后端节点
    proxy_set_header X-Forwarded-For$remote_addr; #传递客户端IP给后端节点
    expires 1d; #超期时间
    

    最终的nginx.conf配置文件如下:

    root@nginx>> cat nginx.conf
    user              nginx;
    worker_processes  1;
    error_log /var/log/nginx/error.log;
    pid       /var/run/nginx.pid;
    events {
       worker_connections  1024;
    }
    http {
       include      /etc/nginx/mime.types;
       default_type application/octet-stream;
       log_format  main  '$remote_addr - $remote_user [$time_local]"$request" '
                          '$status $body_bytes_sent"$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"'
                                             '"addr:$upstream_addr-status:$upstream_status-cachestatus:$upstream_cache_status"';
       sendfile        on;
       keepalive_timeout  65;
           proxy_cache_path /tmp/ngx_cache levels=1:2 keys_zone=cache_one:100m inactive=1dmax_size=5g;
           upstream server_pool {
                    server 127.0.0.1:8080;
           }
       server {
                    listen 80;
           location / {
                            proxy_passhttp://server_pool;
                            proxy_next_upstreamhttp_502 http_504 error timeout invalid_header;
                            proxy_cache cache_one;
                            proxy_cache_valid 200304 12h;
                            proxy_cache_valid 301302 1m;
                            proxy_cache_valid any 1m;
                            proxy_cache_key$host$uri$is_args$args;
                            proxy_set_header Host$host;
                            proxy_set_headerX-Forwarded-For $remote_addr;
                            expires 1d;
           }
           access_log /var/log/nginx/cache_access.log main;
       }
           server {
                    listen 8080;
                    location / {
                            root/usr/share/nginx/html;
                            index index.htmlindex.htm;
                    }
           }
    }
    

    2.4 配置日志

    为了观察缓存的命中状态,我们可以将缓存相关的变量记录在日志中。

    定义日志格式:

    log_format main  '$remote_addr - $remote_user[$time_local] "$request" '
                      '$status $body_bytes_sent"$http_referer" '
                      '"$http_user_agent""$http_x_forwarded_for"'
                     '"addr:$upstream_addr-status:$upstream_status-cachestatus:$upstream_cache_status"';
    

    #其中upstream_addr记录分发的后端节点IP;upstream_status记录后端节点返回的状态码;upstream_cache_status记录缓存的命中情况。

    在反向代理标签中引用日志:

    access_log /var/log/nginx/cache_access.log  main;
    

    nginx重新加载配置:

    root@nginx>> nginx -s reload
    

    2.5 监测缓存

    监测缓存文件的事件

    浏览网站:

    root@ngx_cache>> inotifywait -mrq/tmp/ngx_cache/
    /tmp/ngx_cache/ CREATE,ISDIR 6
    /tmp/ngx_cache/ OPEN,ISDIR 6
    /tmp/ngx_cache/ CLOSE_NOWRITE,CLOSE,ISDIR6
    /tmp/ngx_cache/ CREATE,ISDIR 1
    /tmp/ngx_cache/ OPEN,ISDIR 1
    /tmp/ngx_cache/ CLOSE_NOWRITE,CLOSE,ISDIR1
    /tmp/ngx_cache/ CREATE,ISDIR 3
    /tmp/ngx_cache/ OPEN,ISDIR 3
    /tmp/ngx_cache/ CLOSE_NOWRITE,CLOSE,ISDIR3
    /tmp/ngx_cache/3/ CREATE,ISDIR fd
    /tmp/ngx_cache/3/ OPEN,ISDIR fd
    /tmp/ngx_cache/3/CLOSE_NOWRITE,CLOSE,ISDIR fd
    /tmp/ngx_cache/3/fd/ CREATEdd404cd351f6b9efb072e5806dc2efd3.0000000026
    /tmp/ngx_cache/3/fd/ OPENdd404cd351f6b9efb072e5806dc2efd3.0000000026
    /tmp/ngx_cache/3/fd/ MODIFYdd404cd351f6b9efb072e5806dc2efd3.0000000026
    /tmp/ngx_cache/3/fd/ CLOSE_WRITE,CLOSEdd404cd351f6b9efb072e5806dc2efd3.0000000026
    /tmp/ngx_cache/3/fd/ MOVED_FROMdd404cd351f6b9efb072e5806dc2efd3.0000000026
    /tmp/ngx_cache/3/fd/ MOVED_TOdd404cd351f6b9efb072e5806dc2efd3
    

    说明:有最后几行可知,图片缓存到目录中。

    展开全文
  • nginx 设置缓存

    千次阅读 2017-02-04 17:51:05
    缓存目录 目录级别 缓存池 有效时间 最大空间 proxy_cache_path /usr/local/etc/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; location /get_api_post_data { proxy_pass http://12
  • nginx 图片缓存

    2016-01-12 17:49:54
    最近准备用nginx搭建了一个图片服务器,看中的就是nginx超强的静态文件处理能力。由于图片量比较大,和web服务器(也是nginx)分开运行,虽然web服务器调用图片没用问题,但毕竟是远程调用,肯定没有本地文件系统...
  • nginx图片缓存

    千次阅读 2013-09-29 03:20:59
     #设置web缓存的key值,nginx根据key值md5哈希存储缓存,这里根据'域名,URI,参数'组合成key  proxy_cache_key $host$uri$is_args$args;  #反向代理,访问后端内容源服务器  proxy_set_header Host 192.168...
  • 因为使用cdn的缓存,发现前端写的代码总是不生效,最后发现问题是出在nginx层. 只需要在nginx层设置成下面的配置就可以让前端代码生效了 location / { # First attempt to serve request as file, then # as ...
  • nginx设置缓存策略

    2018-07-15 15:00:00
    直到今天给客户做项目碰到缓存问题:客户有个app,只是用原生做了个壳,里面的内容都是用h5写的,我们半途接手将新版本静态资源部署到服务器上后,发现手机端一直显示老的页面,一抓包,发现手机端根本就没有去请求...
  • 进阶——Nginx系列——缓存解决接口性能问题 后续更新… 1、架构演变 传统架构 分布式 微服务 上面通过架构的演变我们发现了,时代的变迁导致了架构的变迁,由原先的单一应用变成了现在的多服务集群部署,由...
  • location ~.*\.(js|css|html|png|jpg|gif)$ { expires 3d; } ... //表示缓存3天 expires 3h; //表示缓存3小时 expires max; //表示缓存10年 expires -1; //表示永远过期。 如果设置为-1在js、cs...
  • 什么是缓存? Web缓存是可以自动保存常见文档副本的HTTP设备。当Web请求抵达缓存时,如果本地有...缓存分为服务端侧(比如Nginx,redis,memcached)和客户端侧(比如web browser)。 服务端缓存又分为 代理服务器缓...
  • HTTP缓存模型中,如果请求成功会有三种情况:2)本地缓存相关Header:3)协商缓存相关Header:4、缓存策略的选择1)适合缓存的内容2)建议使用协商缓存注意事项:3)不建议缓存的内容二、Nginx配置缓存策略1、模拟 ...
  • nginx缓存配置

    2020-11-04 11:38:36
    使用 nginx 缓存配置缓存接口数据(主要用于接口实时性不是很强的业务场景) 配置开启缓存nginx.conf 配置如下 http { #nginx缓存配置 proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=nuget-...
  • 缓存 缓存的基本思想是利用客户端访问的时间局限性,将客户端访问过的内容做一个副本,在一定时间内存放到本地,当改数据下次被访问时,不必连接到后端服务器反复去查询数据,而是由本地保存的副本响应数据。 ...
  • 看似正常的 php-fpm 请求处理,nginx 却返回 502,出错的原因是因为 php warning 信息触发了 nginx fastcgi 缓存上的缺陷。本文详细描述了此缺陷的复现方法,最后在第7部分给出了结论和改进的办法。 最后部分是基于...
  • Nginx缓存详解

    2021-06-03 13:54:56
    nginx缓存 什么是缓存缓存的基本概述 缓存的基本思想是利用客户端访问的时间局限性,将客户端访问过的内容做一个副本,在一定时间内存放到本地,当改数据下次被访问时,不必连接到后端服务器反复去查询数据,...
  • nginx缓存

    2018-09-21 16:23:22
    压缩提高响应速度,缓存减少请求。   设置服务器时间:  
  • 浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程...
  • Nginx反向代理缓存,当客户端向Nginx服务器发送请求时,nginx根据请求的URI可以加一层缓存,可缓存动态请求,当缓存存在时Nginx直接将缓存返回给客户端,而不请求服务接口,这样可以使服务器压力降低。 如何配置? ...
  • Nginx缓存配置

    2018-08-15 22:14:00
    本文介绍利用 nginxnginx_ngx_cache_purge 模块来实现缓存功能,前几篇文章介绍了 Nginx 的动静分离以及 CDN 技术,在其基础上,再对整个页面进行缓存,将大大提高服务器的负载能力。 基础环境 CentOS 6.8 ...
  • nginx反向代理缓存

    千次阅读 2018-07-07 00:31:19
    这次接手浏览器项目,发现他们用到了 nginx缓存,所以就研究了一下 nginx缓存配置简单介绍nginx 一般用来做反向代理和负载均衡,将客户端请求发送到后端的 jetty,并将 jetty 的响应发送给客户端。后端的 ...
  • nginx静态文件缓存

    万次阅读 2018-05-24 16:29:05
    nginx的一大功能就是完成静态资源的分离部署,减轻后端服务器的压力,如果给这些静态资源再加一级nginx缓存,可以进一步提升访问效率。第一步:添加nginx.conf的http级别的缓存配置##cache## proxy_connect_time...
  • Nginx缓存配置之手动清除缓存

    千次阅读 2018-08-15 22:14:00
    前文介绍了利用 nginxnginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天。 但是如果前端修改了页面,比如首页,由于 Nginx 缓存的存在,网站首页并不会立即生效,而是要等到缓存过期。这样明显...
  • 遇到问题前言fastcgi_cache是一个nginx的插件,用于缓存fastcgi接口的执行结果,例如缓存php的执行结果。特别是php网站的首页与一些非交互页面,利用fastcgi_cache可以大幅度提升访问速度,并且降低php的执行压力。...
  • Nginx提供了expires、etag、if-modified-since指令来实现浏览器缓存控制。  expires  如果我们使用Nginx作为静态资源服务器,那么可以使用expires进行缓存控制。  location /img {  alias /e...
  • 要统计nginx缓存,前提肯定是你已经配置了nginx缓存,然后需要在日志中输出缓存的状态,如下日志格式配置:log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$...
  • 问题:对于某些PHP的接口,请求很频繁,但是这些接口返回的数据又不是实时的,即存在一定的延时性。 分析:可以将这些接口返回的数据缓存起来,减少PHP执行...这里讨论在NGINX缓存,利用NGINX的反向代理缓存可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,315
精华内容 19,726
关键字:

nginx接口缓存