小橘子大叔

  • proxy_cache_path
  • proxy_cache
  • proxy_cache_key
  • proxy_cache_valid
  • proxy_cache_min_uses
  • proxy_cache_methods
  • Nginx设置资源不缓存
  • 首页
  • nginx
  • Linux
  • docker
  • Kubernetes
  • Prometheus
  • 生活
  • 文章归档
  • 友情链接
  • Instagram
  • TikTok
  • X
欢迎随时联系本人
  • Mail

Nginx缓存集成

  • luxy
  • 2024-03-30
  • 3

       在客户端和服务端进行数据传输的过程中,缓存一直以来是一个重要的概念。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对应的目录。

© 2025 小橘子大叔
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}