在客户端和服务端进行数据传输的过程中,缓存一直以来是一个重要的概念。Nginx作为一款强大的web服务器,也提供了缓存功能。当用户通过浏览器访问一个URL时,web缓存服务器会去应用服务器获取要展示给用户的内容,将内容缓存到自己的服务器上,当下一次请求到来时,如果访问的是同一个URL,web缓存服务器就会直接将之前缓存的内容返回给客户端,而不是向应用服务器再次发送请求。web缓存降低了应用服务器、数据库的负载,减少了网络延迟,提高了用户访问的响应速度,增强了用户的体验。
Nginx进行缓存的原理是通过URL及相关组合当成key,再使用MD5算法对Key进行哈希,得到硬盘上对应的哈希目录路径,从而将缓存内容保存在该目录中。
以下是常用配置
proxy_cache_path
该指定用于设置缓存文件的存放路径
proxy_cache_path /usr/local/proxy_cache levels=2:1 keys_zone=itcast:200m inactive=1d max_size=20g;
/usr/local/proxy_cache是缓存路径地址
keys_zone:200m 用来为这个缓存区设置名称和指定大小
levels=1:2 缓存空间有两层目录,第一次是1个字母,第二次是2个字母
举例说明:
itheima[key]通过MD5加密以后的值为
43c8233266edce38c2c9af0694e2107d
levels=1:2 最终的存储路径为/usr/local/proxy_cache/d/07
levels=2:1:2 最终的存储路径
为/usr/local/proxy_cache/7d/0/21
levels=2:2:2 最终的存储路径
为/usr/local/proxy_cache/7d/10/e2
inactive=1d 缓存数据在1天内没有被访问就会被删除
max_size=20g
proxy_cache
该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存
proxy_cache_key
该指令用来设置web缓存的key值,Nginx会根据key值MD5哈希存缓存。
默认值 proxy_cache_key $scheme$proxy_host$request_uri;
$scheme:请求使用的协议,例如 http 或 https。
$proxy_host:在使用 proxy_pass 指令时,$proxy_host 变量包含代理请求(Request Headers)的主机名(或IP地址)和端口号(如果指定)。它反映了请求被代理到的上游服务。
$request_uri:这个变量包含原始请求URI,它由路径和查询字符串组成,但不包括主机名。例如,如果请求的URL是 http://example.com/path?query=123,那么$request_uri 的值就是 /path?query=123。
proxy_cache_valid
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
为200和302的响应URL设置10分钟缓存,为404的响应URL设置1分钟缓存
proxy_cache_valid any 1m;
对所有响应状态码的URL都设置1分钟缓存
proxy_cache_min_uses
该指令用来设置资源被访问多少次后被缓存
<strong>proxy_cache_min_uses</strong> 1 值至少使用1次才对该资源进行缓存
proxy_cache_methods
该指令用户设置缓存哪些HTTP方法
默认缓存HTTP的GET和HEAD方法,不缓存POST方法。
Nginx设置资源不缓存
对于一些不经常发生变化的数据,比如一些动态资源,此时并不需要进行缓存,所以对于这些资源我们在缓存的过程中就需要进
行过滤,不进行缓存。
Nginx也提供了这块的功能设置,需要使用到如下两个指令
proxy_no_cache
该指令是用来定义不将数据进行缓存的条件。
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
$cookie_nocache
指的是当前请求的cookie中键的名称为nocache对应的值
$arg_nocache和$arg_comment
指的是当前请求的参数中属性名为nocache和comment对应的属性值
当然,你也可以选择自定义参数,如添加一个$arg_customize,然后在浏览器地址上输入192.168.239.103/index.html?customize=1,接着修改proxy_no_cache为$cookie_nocache $arg_nocache $arg_comment $arg_customize;
proxy_cache_bypass
该指令是用来设置不从缓存中获取数据的条件。一般情况下建议把proxy_cache_bypass和proxy_no_cache同时进行配置,这样既可以做到当缓存中没有该资源时不对该资源进行缓存,还可以做到如果缓存目录下有该文件时不会从缓存中获取数据。这样能更好的达到数据的及时性。
proxy_cache_bypass $cookie_nocache $arg_nocache
$arg_comment;
注意,一个location块对应一个proxy_cache,如果你在location块中修改了你要访问的数据,为了及时获取到该数据,应及时删除proxy_cache_path对应的目录。