• 售前

  • 售后

热门帖子
入门百科

Nginx内容缓存以及常见参数配置详析

[复制链接]
润唇膏贡 显示全部楼层 发表于 2021-10-26 12:33:50 |阅读模式 打印 上一主题 下一主题
利用场景:
项目标页面需要加载很多数据,也不是常常变革的,不涉及个性化定制,为每次哀求去动态生成数据,性能比不上根据哀求路由和参数缓存一下效果,利用 Nginx 缓存将大幅度提拔哀求速度。
基础

只需要配置 proxy_cache_path 和 proxy_cache 就可以开启内容缓存,前者用来设置缓存的路径和配置,后者用来启用缓存。
  1. http {
  2. ...
  3. proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
  4. server {
  5. proxy_cache mycache;
  6. location / {
  7.   proxy_pass http://localhost:8000;
  8. }
  9. }
  10. }
复制代码
对应参数阐明:

1.用于缓存的当地磁盘目录是 /path/to/cache/
2.levels 在 /path/to/cache/ 设置了一个两级条理布局的目录。将大量的文件放置在单个目录中会导致文件访问缓慢,以是针对大多数摆设,我们推荐利用两级目录条理布局。假如 levels 参数没有配置,则 NGINX 会将所有的文件放到同一个目录中。
3.keys_zone 设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。将键的拷贝放入内存可以使 NGINX 在不检索磁盘的情况下快速决定一个哀求是 HIT 还是 MISS,这样大大进步了检索速度。一个 1MB 的内存空间可以存储大约 8000 个 key,那么上面配置的 10MB 内存空间可以存储差不多 80000 个key。
4.max_size 设置了缓存的上限(在上面的例子中是 10G)。这是一个可选项;假如不指定详细值,那就是允许缓存不停增长,占用所有可用的磁盘空间。当缓存达到这个上线,处置处罚器便调用 cache manager 来移除最近最少被利用的文件,这样把缓存的空间低沉至这个限定之下。
5.inactive 指定了项目在不被访问的情况下能够在内存中保持的时间。在上面的例子中,假如一个文件在 60 分钟之内没有被哀求,则缓存管理将会主动将其在内存中删除,不管该文件是否逾期。该参数默认值为 10 分钟(10m)。留意,非活动内容有别于逾期内容。NGINX 不会主动删除由缓存控制头部指定的逾期内容(本例中Cache-Control:max-age=120)。逾期内容只有在 inactive 指定时间内没有被访问的情况下才会被删除。假如逾期内容被访问了,那么 NGINX 就会将其从原服务器上革新,并更新对应的 inactive 计时器。
6.NGINX 最初会将注定写入缓存的文件先放入一个临时存储地区, use_temp_path=off 下令指示 NGINX 将在缓存这些文件时将它们写入同一个目录下。我们强烈发起你将参数设置为 off 来制止在文件系统中不须要的数据拷贝。use_temp_path 在 NGINX1.7 版本和 NGINX Plus R6 中有所先容。
终极,proxy_cache 下令启动缓存那些 URL 与 location 部分匹配的内容(本例中,为/)。你同样可以将 proxy_cache 下令添加到 server 部分,这将会将缓存应用到所有的那些 location 中未指定自己的 proxy_cache 下令的服务中。
Nginx 缓存相关历程

缓存中还涉及两个额外的NGINX历程:
      
  • cache manager 周期性地启动,查抄高速缓存的状态。假如高速缓存大小超过 proxy_cache_path 中 max_size 参数设置的限定,则高速缓存管理器将删除最近访问过的数据。在两次缓存管理器启动的间隔,缓存的数据量可能短暂超过配置的大小。  
  • cache loader 只运行一次,NGINX 开始之后。它将有关以前缓存的数据的元数据加载到共享内存地区。一次加载整个缓存可能会消耗足够的资源来在启动后的最初几分钟内低沉 NGINX 的性能。要制止这种情况,请通过在 proxy_cache_path 指令中包含以下参数来配置缓存的迭代加载:
         
    • loader_threshold - 迭代连续时间,以毫秒为单位(默认情况下 200)   
    • loader_files - 一次迭代期间加载的最大项目数(默认情况下 100)   
    • loader_sleeps - 迭代之间的耽误,以毫秒为单位(默认情况下 50)  
      
在以下示例中,迭代连续数300 毫秒或直到 200 个项目被加载进去:
  1. proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
复制代码
其他常用参数

配置示例:
  1. proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
  2. server {
  3. ...
  4. location / {
  5.   proxy_cache my_cache;
  6.   # proxy_cache_key "$host$request_uri$cookie_user";   proxy_cache_min_uses 3;
  7.   proxy_cache_methods GET HEAD POST;
  8.   proxy_cache_valid 200 302 10m;
  9.   proxy_cache_valid 404  1m;
  10.   # proxy_cache_valid any 5m;   proxy_pass http://localhost:8000;
  11. }
  12. }
复制代码
对应参数阐明:

      
  • proxy_cache_key 为更改盘算密钥时利用的哀求特征,指定缓存的 key,这个不推荐,示例是利用域名,哀求url,用户 cookie 来当作 key,意味着一个页面将为差别的用户缓存 n 次,绝大多数情况不需要这样的操纵。  
  • proxy_cache_min_uses 为在缓存响应之前必须利用相同密钥的哀求的最小次数。  
  • proxy_cache_methods 为指定要被缓存的哀求方式的响应值,默以为 GET 和 HEAD,新增其他的需要一起列出来,如上示例所示。  
  • proxy_cache_valid 为响应状态码的缓存时间,示例可以为每个状态码缓存指定时间,也可以利用 any 举行全部状态码的缓存。
扫除缓存

需要提前加一个配置,用于标识利用 HTTP PURGE 方法的哀求并删除匹配的 URL 对应的缓存。

1.在 http {} 上下文中创建新变量,比方 $purge_method, 他依靠于 $request_method 变量:
  1. http {
  2. ...
  3. map $request_method $purge_method {
  4.   PURGE 1;
  5.   default 0;
  6. }
  7. }
复制代码
2.在 location {} 块中,已经配置缓存的条件下,引入 proxy_cache_purge 参数来指定扫除缓存哀求的条件。比方在上一步指定的 $request_method
  1. server {
  2. listen  80;
  3. server_name www.example.com;
  4. location / {
  5.   proxy_pass https://localhost:8002;
  6.   proxy_cache mycache;
  7.   proxy_cache_purge $purge_method;
  8. }
  9. }
复制代码
配置完并使之见效之后,就可以发送一条 purge 哀求来让缓存失效了,比方:
  1. curl -X PURGE -D – https://www.example.com/*
复制代码
在该示例中,将扫除具有公共 URL 部分(由星号通配符指定)的资源。但这些缓存条目不会从缓存中完全删除:它们会保留在磁盘上,直到它们被视为不活动(由proxy_cache_path 中的 inactive参数决定)的时间才完全删除,或缓存扫除器(由 proxy_cache_path 中的 purge 决定),或客户端实验访问它们的时间。
参考链接:
      
  • Nginx 缓存利用官方指南  
  • Nginx 内容缓存文档
总结
以上就是这篇文章的全部内容了,盼望本文的内容对各人的学习大概工作具有肯定的参考学习价值,谢谢各人对草根技术分享的支持。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作