Nginx缓存相关配置解析

这篇具有很好参考价值的文章主要介绍了Nginx缓存相关配置解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求,可以有效节省时间。

Nginx缓存机制的作用

  • 缓存能够提升性能,学会Nginx中如何使用缓存很重要。
  • Nginx作为静态资源服务器,静态资源变动频率小,缓存能够加速访问。
  • Nginx离用户最近,启用缓存能更好的提高性能,结合Redis可以组成类似二级缓存。

官方配置文档

缓存放置内容过程:

  1. 当nginx从上游服务器读取响应时,首先将内容写入缓存目录结构之外的临时文件。
  2. 当nginx完成处理请求时,它会重命名临时文件并将其移动到缓存目录。如果用于代理的临时文件目录位于另一个文件系统上,则文件将被复制,因此建议将临时目录和缓存目录保留在同一个文件系统上。当需要显式清除文件时,从缓存目录结构中删除文件也是非常安全的。
  3. nginx有第三方扩展,可以远程控制缓存的内容,并计划在主发行版中集成此功能

配置示例

文件存放地址配置

proxy_cache

proxy_cache:用于定义共享内存区域的名称。可以使用变量。此参数是proxy_cache_path 指令的基础。默认值为off表示禁用缓存,为默认值。

该指令用来开启或关闭缓存,如果是开启则自定使用哪个缓存区来缓存

  • 开启 proxy_cache zone_name;
  • 关闭 proxy_cache off;

配置位置:http、server、location里

proxy_cache_path 指令

proxy_cache_path:定义缓存的存储路径。

配置位置 : 在 http中,server外

语法 :

proxy_cache_path path [levels=a:b:c] keys_zone=zone_name:zone_size [inactive=time] [max_size=sizes]
  • path : 可以是**/usr/local/proxy_cache**,为设置缓存文件的存放地址

  • levels :levels可以将字符串密文与缓存目录进行结合,指定缓存空间对应的目录,最多可以设置三层,每层取值为1或2;
    例如: levels=1:2 ,表示缓存空间有两层目录,一层是1个字母,二层是2个字母
    如果字符串密文为dsciwbdciow87y8hwdh29
    那么levels=1:2最终的存储目录为:/usr/local/proxy_cache/9/h2

  • keys_zone :可以指定缓存区的名称与大小 keys_zone=impar:300m 表示缓存区名称为impar,大小为300m.

  • inactive :指定缓存的数据多久未被访问会被删除的时间;inactive=2d,2d表示2天

  • max_size:设置最大的缓存空间,如果缓存空间存满,会根据LRU算法,删除最近最少使用的数据或覆盖目前缓存时间最长的数据,示例max_size=10g

proxy_cache_valid

该指令用来对不同返回状态码的URL设置不同的缓存时间

语法 :

proxy_cache_valid [code …] time;

配置位置:http、server、location里
示例 :

#不指定响应码,则只对200、301和302进行缓存。
proxy_cache_valid 10m;

#对指定响应码进行缓存。
proxy_cache_valid 200 301 10m;

#对任何响应码进行缓存。
proxy_cache_valid any 10m;

前面我们在配置proxy_cache_path指令时,inactive参数可以指定一定时间内缓存未被访问就会被删除。而proxy_cache_valid指定的是缓存的过期时间,超过该时间缓存将会过期,但是不会被删除。
因此我们在配置的时候,一般inactive的值会大于proxy_cache_valid中的值,否则将会导致缓存还不过期就被删除了。

proxy_cache_valid 404 1m;
proxy_cache_valid 202 302 1m;
proxy_cache_valid any 1m;
  1. 该设置从上到下进行,如果在上面的步骤中被设置(如404,202,302),就不会更改,最后的any只能设置除404,202,302以外的状态。
  2. nginx缓存代理中常有情况:nginx尚未缓存某数据,但是客户端发出请求该数据的信息,nginx往往只能先回复404。但是稍后nginx从服务器请求到了该数据后,客户端再请求该数据那按照原理必然要返回该数据,而不是404。因此,之前请求对应的返回状态码应该有一个“限定有效的时间”。这就需要靠proxy_cache_valid来设置了。

proxy_cache_methods

该指令用户设置哪些http方法可以被缓存

proxy_cache_methods method

method可选方式为GET, HEAD, POST.
默认方式为GET, HEAD。

配置位置:http、server、location里

proxy_cache_key

该指令用来设置web缓存中的key值,nginx会根据key值的MD5进行哈希缓存

配置位置:http、server、location里

proxy_cache_bypass

该指令配置不走缓存响应的条件,如果条件命中,则不走缓存。可与proxy_no_cache配合使用。
如果参数中的值至少有一个值不为空且不为"0",则不走缓存响应。

# 以$arg开头的参数表示url中的对应的参数。
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;

proxy_no_cache

该指令配置不缓存响应的条件,如果条件命中,则不缓存。可与proxy_cache_bypass配合使用。

配置位置:http、server、location里

语法:proxy_no_cache string …;

如果参数中的值至少有一个值不为空且不为"0",则不缓存响应。

# 以$arg开头的参数表示url中的对应的参数。
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;

proxy_cache_min_uses

该指令设置某个请求达到指定次数后,才对其进行缓存。

配置位置:http、server、location里

语法:

proxy_cache_min_uses number;

默认值:proxy_cache_min_uses 1;

add_header 可选项

当前选项不是必须的,只是方便在测试的时候查看是否命中缓存

add_header nginx-cache $upstream_cache_status;

可添加的头示例 :

  1. add_header Access-Control-Allow-Methods
    明确了客户端所要访问的资源允许使用的方法或方法列表,可以是"GET,OPTIONS,POST,HEAD,PUT,DELETE"

  2. add_header Accept-Ranges
    此字段的值表示可用于定义范围的单位,可以是"bytes"

  3. add_header Access-Control-Allow-Origin "*"
    表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求。

  4. add_header Access-Control-Allow-Headers
    可支持的请求首部名字。请求头会列出所有支持的首部列表,用逗号隔开。
    示例:

  5. add_header Access-Control-Allow-Headers "*"
    注意以下这些特定的首部是一直允许的:Accept, Accept-Language, Content-Language, Content-Type,这些被称作simple headers,无需特意声明它们。

使用示例

使用内置$upstream_cache_status变量可以查看缓存命中状态。状态值分别为MISS、BYPASS、EXPIRED、STALE、UPDATING、REVALIDATED、HIT。

在响应中添加Nginx-Cache头,显示缓存命中状态.

配置服务端前置Nginx :

http {
	# 缓存在10分钟之内未被访问即删除
	proxy_cache_path /home/stone/proxy_cache levels=1:2 keys_zone=my_cache:10M inactive=10m max_size=10G;
	server {
		listen       80;
		server_name  localhost;

        location /cache {
            proxy_cache my_cache;
            proxy_cache_key $uri$is_args$args;
            # 缓存的有效期会10s
            proxy_cache_valid any 10s;
            proxy_cache_min_uses 1;
            # 添加缓存命中状态,$upstream_cache_status
            add_header Nginx-Cache $upstream_cache_status;
            proxy_pass http://127.0.0.1:81;
        }
	}

	server {
		listen       81;
		server_name  localhost;

        location /cache {
            root html;
        }
	}

}

同时在html文件夹下创建cache文件,并放入test.html文件。

访问http://127.0.0.1:80/cache/test.html

第一次访问:缓存状态为MISS,即未命中。

Nginx缓存相关配置解析,nginx,缓存,spring

第二次访问:缓存状态为HIT,即已命中缓存。

Nginx缓存相关配置解析,nginx,缓存,spring

查看缓存文件夹,已经按照levels参数指定的规则生成目录结构,并缓存文件。

第三次访问:缓存状态为EXPIRED,缓存已过期,因为我们设置的10s过期。

Nginx缓存相关配置解析,nginx,缓存,spring

缓存手动删除

如果服务端的文件发生变化,那么也需要将文件同步到Nginx的缓存中去,因此我们需要对缓存进行删除。

  • 删除对应缓存目录:这种方式看上去简单粗暴,但是想要删除指定的缓存,则犹如大海捞针。

    • rm -rf /home/stone/proxy_cache
  • ngx_cache_purge:第三方模块,通过请求删除指定的缓存文件。

ngx_cache_purge :

可以借助第三方模块ngx_cache_purge来实现对指定缓存的删除。

下载地址

语法:

proxy_cache_purge keys_zone key;
  • keys_zone:该参数为proxy_cache指令指定的值。
  • key:该参数为proxy_cache_key指定的值。

配置位置:location里

示例 :

server {
	listen       80;
	server_name  localhost;

	location /cache {
		proxy_cache my_cache;
		# 设置proxy_cache_key
		proxy_cache_key $uri$is_args$args;
		proxy_cache_valid 200 302 10s;
		# 添加缓存命中状态
		add_header Nginx-Cache $upstream_cache_status;
		proxy_pass http://127.0.0.1:81;
	}

	# 删除指定缓存
	location ~/purge(/.*) {
		proxy_cache_purge my_cache $1$is_args$args;
	}
}

原博客

案例博客原文

案例学习原文文章来源地址https://www.toymoban.com/news/detail-832899.html

到了这里,关于Nginx缓存相关配置解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx配置前端不缓存

    修改nginx配置文件,直接在loacation模块下加入如下参数: 容器default.conf信息: 该方法修改完之后,并不能立刻清理客户端当前的缓存,因为客户端当前的html页面还没有缓存 “不缓存配置”,就是当前的\\\"no-cache, no-store\\\"配置,改配置还没有缓存到客户端的浏览器中,有点绕,但

    2024年02月12日
    浏览(48)
  • nginx配置浏览器缓存(强缓存、协商缓存、无缓存)

    下载地址:点击下载nginx 根据系统选择要下载的安装包,这里最好选择稳定版(stable version)。 下载好后解压该zip,将解压后的文件夹放在自己喜欢的目录下,我是放在J盘(自己分的磁盘)下。 进入J:nginx-1.22.0目录,目录结构: 注:project目录是我自己创建的,用于存放打包

    2024年02月09日
    浏览(35)
  • 配置Nginx的缓存以提高性能

    简介 在本教学文章中,我们将学习如何配置Nginx的缓存,以提高性能并减少后端服务器的负载。缓存是一种常用的技术,通过在Nginx中缓存静态内容,可以减少对后端服务器的请求,提高响应速度和吞吐量。本教程将介绍如何配置Nginx的缓存,并提供一个具体的示例。 前提条

    2024年02月13日
    浏览(36)
  • 强缓存与协商缓存、缓存失效的问题、缓存nginx配置、缓存存在哪里

    前端缓存,这是一个老生常谈的话题,也常被作为前端面试的一个知识点。今天我们来总结一下。 分类:前端缓存分为强缓存和协商缓存两种。 强缓存主要使用 Expires、Cache-Control 两个头字段,两者同时存在 Cache-Control 优先级更高。当命中强缓存的时候,客户端不会再求,直

    2024年01月25日
    浏览(46)
  • nginx 配置相关详解

    目录 Nginx的优点 Nginx简介 Nginx的优点 可以高并发连接 内存消耗少 成本低廉 配置文件非常易懂 稳定性高 内置有健康的检查功能 支持Rewrite重写 支持热部署 Nginx与Apache的对比 Nginx多进程工作原理跟设计 Nginx是如何实现高性能的 事件驱动模型 多进程机制 内存池 Nginx的安装配置

    2024年02月04日
    浏览(45)
  • nginx代理websocket相关配置

    map $http_upgrade $connection_upgrade {         default upgrade;         \\\'\\\' close; } # 转发ws location ^~ /ws {        # 后台准备的websocket地址端口        proxy_pass http://localhost:9092;        # 其他参数都一样        proxy_read_timeout 300s;        proxy_send_timeout 300s;        proxy_set_header  Host $

    2024年02月13日
    浏览(39)
  • Nginx 常用的基础配置(前端相关方面)

    目录 基础配置 隐藏 Nginx 版本信息 禁止ip直接访问80端口 启动 web 服务 (vue 项目为例) PC端和移动端使用不同的项目文件映射 一个web服务,配置多个项目 (location 匹配路由区别) 配置负载均衡 SSL 配置 HTTPS         最近很多朋友问到Nginx配置前端 web 服务,所以特地写了这篇文

    2024年01月21日
    浏览(32)
  • 【Nginx基础篇】nginx的基本配置解析和应用场景

    目录 一、最小配置 二、虚拟主机 原始的配置文件 将注释删除后最简版 worker_processes worker_processes 1 ; 默认为 1 ,表示开启一个业务进程 worker_connections worker_connections 1024 ; 单个业务进程可接受连接数 include mime.types; include mime.types ; 引入 http mime 类型 default_type application/octet-str

    2024年02月04日
    浏览(42)
  • Nginx配置解析

    location / 是 Nginx 的一个匹配规则,用于匹配所有请求路径。 proxy_pass 指令则用于将匹配到的请求转发给指定的后端服务器。下面是关于 location / 和 proxy_pass 的详细介绍: location / : 在 Nginx 的配置文件中, location / 是一个匹配规则,匹配所有请求路径,在这种情况下,所有的

    2024年02月15日
    浏览(23)
  • 解析Nginx配置文件conf中的常用块

    Nginx是一个高性能的HTTP和反向代理服务器,它的配置文件主要由多个块组成。 本文将介绍Nginx配置文件中的常用块及其功能 。 events块 events块用于设置Nginx的工作模式和连接数相关的参数。 http块 http块用于配置Nginx处理HTTP请求的相关参数。 server块 server块用于配置一个虚拟主

    2024年01月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包