在 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
参数用来定义缓存目录层次结构级别:从 1
到 3
,每个级别接受值 1
或 2
。例如,在以下配置中:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
从
1
到3
表示 Nginx 缓存文件相对于缓存目录的最大深度就是 3,而每个级别接受值1
或2
指的是生成每级目录的目录名的字符长度为1
或2
。
此时生成的缓存文件的存储目录结构如下:
/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-Since
和 If-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
设定指定响应码的后端响应内容的缓存时长。
评论区