Nginx的代理缓存常用指令

Nginx的代理缓存常用指令

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

ngx_http_proxy_module 模块中有一组专门用于代理缓存指令如下:

proxy_cache
proxy_cache_background_update
proxy_cache_bypass
proxy_cache_convert_head
proxy_cache_key
proxy_cache_lock
proxy_cache_lock_age
proxy_cache_lock_timeout
proxy_cache_max_range_offset
proxy_cache_methods
proxy_cache_min_uses
proxy_cache_path
proxy_cache_purge
proxy_cache_revalidate
proxy_cache_use_stale
proxy_cache_valid

下面就挑出几个可能常用的指令做下说明,更多详细细节还是请参考官方文档啦~~~

proxy_cache_path

语法: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
默认值: —
可使用的上下文: http

proxy_cache_path 指令用来定义缓存文件的存放目录和其他参数。

levels 参数用来定义缓存目录层次结构级别:从 13,每个级别接受值 12。例如,在以下配置中:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

13 表示 Nginx 缓存文件相对于缓存目录的最大深度就是 3,而每个级别接受值 12 指的是生成每级目录的目录名的字符长度为 12

此时生成的缓存文件的存储目录结构如下:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

首先将缓存的响应写入临时文件,然后重命名该文件。

从 0.8.9 版本开始,临时文件和缓存可以放在不同的文件系统上。但是,请注意,在这种情况下,文件是跨两个文件系统复制的,而不是简单的重命名操作。因此,建议对于任何给定位置,将实际缓存和保存临时文件的目录都放在同一文件系统上。

临时文件的目录是根据 use_temp_path 参数(1.7.10)设置的。如果省略此参数或将其设置为 on 的值,则将临时文件存储在使用 proxy_temp_path 指令设置的目录。如果将该值设置为 off,则临时文件将直接被放置在缓存目录中。

此外,所有 key 和有关数据的信息都存储在共享内存区域中,共享内存区域的名称和大小由 keys_zone 参数配置。一个兆字节区域可以存储大约 8000 个 key。

inactive 参数指定的时间内未访问的缓存数据,无论其新鲜度如何,都将从缓存中删除,默认情况下,inactive 的值为 10 分钟。

特殊的“缓存管理器”进程监视由 max_size 参数设置的最大缓存大小,当超过此大小时,它将删除最近最少使用的数据。

启动后一分钟,特殊的“缓存加载器”进程被激活,它将存储在文件系统上的先前缓存的数据的信息加载到内存中中,加载也以迭代方式完成。缓存管理器会对内存中保存的 key 进行迭代:

  • loader_files 可指定在一次迭代中,最多加载的缓存条目数量,默认情况下为 100
  • manager_files 可指定每一次迭代最多删除的缓存条目数量,默认值为 100
  • manager_threshold 指定每一次迭代操作持续的最长时间,默认情况下为 200 毫秒;
  • manager_sleep 指定迭代操作暂停的时间,默认情况下为 50 毫秒;

其余参数只有商业订阅版才能使用,就不介绍啦~

proxy_cache_key

语法: proxy_cache_key string;
默认值: proxy_cache_key $scheme$proxy_host$request_uri;
可使用的上下文: http, server, location

设定缓存使用 key,参数值可包含变量。

proxy_cache

语法: proxy_cache zone | off;
默认值: proxy_cache off;
可使用的上下文: http, server, location

指定使用缓存的区域并启用缓存,这个区域名由上面 proxy_cache_path 指令的 zone 参数所定义,同一区域可以在多个地方使用。
参数值可以包含变量(1.7.9)。

proxy_cache_method

语法: proxy_cache_methods GET | HEAD | POST ...;
默认值: proxy_cache_methods GET HEAD;
可使用的上下文: http, server, location
该指令出现在 0.7.59 版本。

如果请求的方法通过此指令列出的方法之一,则将缓存该请求的响应。

proxy_no_cache

语法: proxy_no_cache string ...;
默认值: —
可使用的上下文: http, server, location

string 参数值不为空且不为 0 时则不缓存,string 参数可有多个,有多个时只要有一项值不为空且不为 0 则不缓存。

proxy_cache_bypass

语法: proxy_cache_bypass string ...;
默认值: —
可使用的上下文: http, server, location

string 参数值不为空且不为 0 时则直接从后端请求数据,string 参数可有多个,有多个时只要有一项值不为空且不为 0 就直接从后端主机请求数据。

proxy_cache_min_uses

语法: proxy_cache_min_uses number;
默认值: proxy_cache_min_uses 1;
可使用的上下文: http, server, location

相同内容响应指定次数以上才会被缓存。

proxy_cache_purge

语法: proxy_cache_purge string ...;
默认值: —
可使用的上下文: http, server, location
该指令出现在 1.5.7 版本。

定义将请求视为缓存清除请求的条件。
如果字符串参数中的至少一个值不为空且不等于 0,则删除具有相应缓存键的缓存条目。
通过返回 204(无内容)响应状态码来指示成功操作的结果。

如果清除请求的缓存键以星号 * 结尾,则所有与通配符匹配的缓存条目都将从缓存中删除。
但是,这些条目将保留在磁盘上,直到因 inactive 超时而将其删除或由缓存清除器(1.7.12)处理或客户端尝试访问它们为止。

proxy_cache_revalidate

语法: proxy_cache_revalidate on | off;
默认值: proxy_cache_revalidate off;
可使用的上下文: http, server, location
该指令出现在 1.5.7 版本。

允许客户端请求使用 If-Modified-SinceIf-None-Match 头字段的条件请求重新验证过期的缓存项,从而延长缓存过期时间。

proxy_cache_use_stale

语法: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
默认值: proxy_cache_use_stale off;
可使用的上下文: http, server, location

当缓存过期并且后端服务器出错的情况下,指定哪种错误下过期的缓存依旧可以被使用,即哪种情况下可以使用过期的缓存:

proxy_cache_valid

语法: proxy_cache_valid [code ...] time;
默认值: —
可使用的上下文: http, server, location

设定指定响应码的后端响应内容的缓存时长。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/nginx-proxycache.html

Buy me a cup of coffee ☕.