Nginx Proxy Cache原理和最佳实践(下)

简介: Nginx Proxy Cache原理和最佳实践

配置项

/path/to/cache : 本地路径,缓存文件存放地址;

levels : 默认所有缓存文件都放在同一个/path/to/cache下,从而影响缓存的性能,大部分场景推荐使用2级目录来存储缓存文件;

key_zone :在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key;

max_size : 最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件;

inactive : 未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件,默认为10分钟;“需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件”;

use_temp_path : 如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝;

proxy_cache : 启用proxy cache,指定key_zone;

附:缓存和代理中常用的配置项

上文讲述了如何配置最基础的proxy cache,接下来,会对常用的高级配置项进行梳理。

proxy_no_cache string;
Default: —
Context: http , server , location
config example:
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pragma $http_authorization;

$cookie_nocache a r g n o c a c h e . . . 皆 为 变 量 , 可 以 根 据 你 访 问 的 匹 配 策 略 来 设 置 , 其 值 只 有 2 类 , 0 和 非 0 ; 访 问 匹 配 策 略 例 如 : i f ( arg_nocache...皆为变量,可以根据你访问的匹配策略来设置,其值只有2类,0和非0; 访问匹配策略例如: if (arg

n

ocache...皆为变量,可以根据你访问的匹配策略来设置,其值只有2类,0和非0;访问匹配策略例如:if(request_uri ~ ^/(login|register|password/reset)/) { set $cookie_nocache 1; }

如果在此链式配置中,只要有一个值不为0,则不会cache;例如:proxy_no_cache $cookie_nocache(0) $arg_nocache(1) $arg_comment(0),不会被cache。`

注:一般会配合proxy_cache_bypass共同使用;

proxy_cache_bypass string;
Default: —
Context: http , server , location
config example:
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;

定义在哪些情况下不从cache读取,直接从backend获取资源;配置方式同proxy_no_cache。

proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location

自定义cache key,例如:

proxy_cache_key “h o s t hosthostrequest_uri $cookie_user”;

默认值为:

proxy_cache_key s c h e m e schemeschemeproxy_hostu r i uriuriis_args$args;


proxy_cache_methods GET| HEAD|POST…;

Default: proxy_cache_methods GET HEAD;

Context: http, server, location


指定客户端那些方法被缓存,默认为GET|HEAD。

proxy_cache_purge string ...;
Default: —
Context: http, server, location
config example:
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
map $request_method $purge_method {
     PURGE 1;
     default 0;
}
server {
     ...
     location / {
          proxy_pass http://backend;
          proxy_cache cache_zone;
          proxy_cache_key $uri;
          proxy_cache_purge $purge_method;
     }
}

定义缓存清除场景,同proxy_no_cache,proxy_cache_bypass链式配置方式,只要又一个不为0,则清除对应的cache key则会被清除,并返回204 response。注意,这里是删除内存中的cache key,而不是disk上的cache文件!!!disk的cache文件是由inactive控制;

当purege request的cache key以通配符*结束时,所有匹配到通配符的cache入口的cachekey都会被删除。

proxy_cache_valid *[code...] time *;
Default: —
Context: http, server, location

设置不同相应码的缓存时间,当不指定响应码的时候,例如

proxy_cache_valid 5m;

只对响应码为200,301,302的访问请求资源设置缓存时间,此外可以个性化定制,例如:

proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid 404 1m; proxy_cache_valid any 1m;

此外,还可以在相应header里设置优先级更高的缓存有效时间:


“X-Accel-Expires”,设置响应的缓存过期时间,以秒为单位;0为不缓存;

如果没有设置“X-Accel-Expires” header,则关于缓存的配置策略可能会在“Expires”或者“Cache-Control” header中;

如果header含有“Set-Cookie”,则响应不会被缓存,类似的配置可以在“proxy_ignore_header”中可见;

header包含“Vary”并且设置为“*”,则请求不会被缓存,如果“Vary”有具体的值,则对应的请求会被缓存;

proxy_ignore_headers field;

Default: —

Context: http, server, location


不缓存包含在field的响应header,可以设置的值有:“X-Accel-Redirect”, “X-Accel-Expires”, “X-Accel-Limit-Rate”,“X-Accel-Buffering”, “X-Accel-Charset”, “Expires”, “Cache-Control”, “Set-Cookie” (0.8.44), and “Vary”。

如果上述的header field没有设置为忽略,则header filed中有“X-Accel-Expires”, “Expires”, “Cache-Control”, “Set-Cookie”, and “Vary”的话,响应会被缓存。

proxy_pass_headers field;
proxy_hide_headers field;
Default: —
Context: http, server, location

参考

目录
相关文章
|
6月前
|
缓存 JavaScript 安全
深度解析Nginx正向代理的原理与实现
深度解析Nginx正向代理的原理与实现
223 8
|
3月前
|
负载均衡 网络协议 关系型数据库
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
|
1月前
|
中间件 应用服务中间件 nginx
Nginx+uWSGI+Django原理
Nginx+uWSGI+Django原理
|
1月前
|
Java 应用服务中间件 API
nginx线程池原理
nginx线程池原理
30 0
|
4月前
|
应用服务中间件 网络安全 nginx
使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
本文引导如何用Nginx Proxy Manager (NPM)配置Halo的反向代理与SSL证书。NPM简化了Nginx的配置流程,适合无Nginx基础的用户。安装NPM无需额外安装Nginx,避免端口冲突。通过`docker-compose.yaml`启动NPM服务,并映射必要的端口。配置Halo反向代理需登录NPM面板,添加代理主机,设置域名、转发IP等参数。NPM支持自动申请与续期SSL证书,确保网站安全访问。更多Halo安装细节,请参考[如何在Linux云服务器上通过Docker Compose部署安装Halo](https://zhangfeidezhu.com/?p=631).
247 0
使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
|
3月前
|
域名解析 缓存 负载均衡
深度解析Nginx正向代理的原理与实现
Nginx虽然主要被用作反向代理,但也可以通过一些特殊配置用作正向代理。虽然不是它的主流用途,但它仍能以其高性能和高稳定性为用户提供代理服务。不过,出于安全性和匿名性的考虑,在使用它作为正向代理时须谨慎配置,并根据实际需求做出调整。
110 0
|
6月前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
6月前
|
JSON JavaScript 前端开发
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
210 1
|
6月前
|
应用服务中间件 nginx
Nginx的referer参数的用法和原理
总结:referer参数可以用于Nginx配置,以限制或允许特定来源网站的访问,提高安全性或控制流量。它通过valid_referers指令来定义合法的Referer来源,并根据配置对请求进行处理。但需要注意,Referer字段内容可以被伪造,因此不应作为唯一的安全措施。
806 0
|
6月前
|
安全 应用服务中间件 网络安全
SSL原理、生成SSL密钥对、Nginx配置SSL
现在,你的Nginx虚拟主机应该已经配置了SSL,可以通过HTTPS安全访问。确保在生产环境中使用有效的SSL证书来保护通信的安全性。
136 0