基于Proxy Store的缓存机制
404错误驱动Web缓存
当Nginx服务器在处理客户端请求时,发现请求的资源数据不存在,会产生404错误,然后服务器通过捕获该错误,进一步转向后端服务器请求数据,最后将后端服务器的响应数据传回给客户端,同时在本地进行缓存。从实现原理上来看,Nginx服务器向后端服务器发起数据请求并完成Web缓存,主要是由产生的404错误驱动的。
…
location / {
…
root /myweb/server/; # 主目录
error_page 404 =200 /errpage$request_uri; # 404定向到/errpage目录下
}
# 捕获404错误的重定向
location /errpage/ {
…
internal; # 该目录不能通过外部链接直接访问
alias /home/html/;
proxy_pass http://backend/; # 后端upstream地址或者源地址
proxy_set_header Accept-Encoding ""; # 后端不返回压缩(gzip/deflate)数据
proxy_store on; # 指定nginx将代理返回的文件保存
proxy_store_access user:rw group:rw all:r; # 配置缓存数据的访问权限
proxy_temp_path /myweb/server/tmp; # 配置临时目录,该目录要和
# /myweb/server/在同一个硬盘分区内
}
配置将404错误响应进行重定向,然后使用location块捕获重定向请求,向后端服务器发起请求获取响应数据,然后将数据转发给客户端的同时缓存到本地。
资源不存在驱动Web缓存
通过location块的location if条件判断直接驱动Nginx服务器与后端服务器的通信和Web缓存。
…#其他配置
location / {
…#其他配置
root /home/html/;
internal; #配置该目录不能通过外部链接直接访问
alias /myweb/server/;
proxy_set_header Accept-Encoding ""; # 配置后端不返回压缩(gzip或deflate)数据
proxy_store on; # 指定nginx将代理返回的文件保存
proxy_store_access user:rw group:rw all:r; # 配置缓存数据的访问权限
proxy_temp_path /myweb/server/tmp; # 配置临时目录,该目录要和
# /myweb/server/在同一个硬盘分区内
if ( !-f $request_filename ) # 判断请求资源是否存在
{
proxy_pass http://backend/; # 配置后端upstream地址或者源地址
}
}
在配置实例中使用location if条件判断支持的“!-f”判断请求的资源在Nginx服务器上是否存在,如果不存在就通过后端服务器获取数据,然后回传给客户端,同时使用Proxy Store进行缓存。
Last updated
Was this helpful?