文章目录
一、介绍
Nginx服务器缓存机制有助于在无法一下子传输全部数据时将客户端所请求处理好的数据缓存在临时文件中,待到数据全部缓存完毕后再把数据打成包一下子返回给客户端。
二、几种缓存方案
1. 什么是Web缓存技术。
客户端第一次把请求发送给Nginx服务器,然后Nginx服务器代理请求发送给后端服务器进行处理,产生的数据直接返回给客户端,另外生成的数据副本存储在本地缓存中,等到下次客户端再次进行相同的请求时,Nginx服务器直接访问本地缓存数据副本并返回数据。如下图:
2. web缓存方案主要有哪些?
2.1 404错误驱动Web缓存
当Nginx服务器在处理客户端请求时,发现请求的资源数据不存在,就会产生404错误,把404错误响应进行重定向,然后使用location块捕获重定向请求,向后端服务器发起请求获取响应数据传回给客户端,并同时缓存到本地上。
server {
listen 8899;
server_name www.myweb.com;
location /{
root /myweb/server/;
error_page 404 =200 /errpage$request_uri; #404定向到、errpage目录下
}
#捕获404错误的重定向
location /errpage/{
internal; #该目录不能通过外部链接直接访问
alias /home/html;
proxy_pass https://192.168.1.1; #后端服务器地址
proxy_set_header Accept-Encoding "'';
proxy_store on; #指定nginxa将代理返回的文件保存
proxy_store_access user:rw group:rw all:r; #权限
proxy_temp_path /myweb/server/tmp; #缓存文件路径,要和/myweb/server/同一个
}
}
2.2 资源不存在驱动web缓存
这种方式类似404错误驱动缓存,使用location 块if条件判断请求的资源在Nginx服务器上是否存在,如果不存在就访问后端服务器获取数据,回传给客户端,并使用proxy store进行缓存。
server {
listen 8899;
server_name www.myweb.com;
#捕获404错误的重定向
location /{
...
root /myweb/server/;
internal; #该目录不能通过外部链接直接访问
alias /home/html/;
proxy_set_header Accept-Encoding "'';
proxy_store on; #指定nginxa将代理返回的文件保存
proxy_store_access user:rw group:rw all:r; #权限
proxy_temp_path /myweb/server/tmp; #缓存文件路径,要和/myweb/server/同一个硬盘
if (!-f $request_filename) #判断请求资源是否存在
{
proxy_pass https://192.168.1.1; #后端服务器地址
}
}
}
2.3 memcached分布式缓存技术
什么是memcached?
memcached的分布式缓存系统,用于动态web应用,独立任一程序可以作为后台程序独立运行。 memcached是一个使用内存来为访问页面加速的模块
memcached怎么工作?
- memcached服务器包括服务端和客户端,开辟一块内存建立Hash表,将缓存数据通过键/值存储在Hash表
- 当客户端请求到达nginx服务器时,nginx会先通过键值(比如说uri),去访问memcached服务器,当能从memcached服务器Hash表获取到数据时,会直接将数据封装,返回给客户端 。
- 如不能从memcached服务器返回数据给客户端,则继续通过重定向访问后端服务器,获取响应数据返回给客户端,同时也缓存在memcached的Hash表。
memcached的6个指令用到的时候再查
memcached_pass address; 跳转到memcached服务器的地址,可以使用upstream配置服务器组
memcached_connect_timeout time; 连接超时
memcached_read_timeout time;
memcached_send_timeout time;
memcached_buffer_size size;
memcached_next_upstream status;
location / {
set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容
memcached_pass 127.0.0.1:11211;
memcached_connect_timeout 5s;
memcached_read_timeout 5s;
memcached_send_timeout 5s;
memcached_buffer_size 32k;
error_page 404 502 504 = @fallback;
}
location @fallback{
proxy_pass http://upstream;
}
2.4 Proxy Cache 缓存机制
工作流程:
- Nginx接收到被代理服务器返回的响应数据时,一方面Proxy Buffer缓冲机制将数据发送给客户端,另一方面Proxy Cache缓存机制将数据缓存到本地磁盘上
- 下次客户端访问相同的数据时,Nginx服务器直接从硬盘上检索到响应的数据返回给用户,从而减少与被代理服务器交互的时间
设置proxy cache共有12个命令,由于太多这里不一一讲述,用到的时候可以详细查找资料。
2.5 Nginx 与Squid组合
Squid Cache是适用于大访问量的网站的Web 缓存服务器,不过框架比较老了,这里也提一下。
2.6 基于第三方模块ncache的缓存机制
ncache是新浪公司的开源产品,是Nginx服务器的一个HTTP模块的,如今应该也有其他很多类似的模块。这个主要是针对不同企业进行开发的第三方模块。
三、总结
根据自己的项目规模大小、难易程度而采用不同的方案,这是比较好的做法,常用的缓存方案主要是memcached分布式缓存技术和Proxy Cache 缓存机制,我们在学习的时候应当注意这两个方案的实现。