2022
我们一起努力

nginx缓存静态页面(nginx 设置页面缓存)

目录:

  • 1、Nginx缓存设置教程
  • 2、nginx如何配置静态页面
  • 3、nginx缓存(proxy_cache模块)
  • 4、nginx 反代里缓存怎么清理
  • 5、【NGINX入门】3.Nginx的缓存服务器proxy_cache配置

Nginx缓存设置教程

| 这篇文章主要介绍了Nginx缓存设置案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下 |

在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置。在常用的缓存设置里面有两种方式,都是使用add_header来设置:分别为Cache-Control和Pragma。

对于站点中不经常修改的静态内容(如图片,JS,CSS),可以在服务器中设置expires过期时间,控制浏览器缓存,达到有效减小带宽流量,降低服务器压力的目的。

以Nginx服务器为例:

【背景】:Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

【相关资料】

1、Cache-control策略

Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。

http协议头Cache-Control :

值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age

各个消息中的指令含义如下:

Last-Modified/If-Modified-Since

其最终达到的就是等效于设置这三类html缓存技术:

nginx如何配置静态页面

首先nginx安装好之后的缺省配置文件:nginx/conf/nginx.conf

这里定义的root地址是相对于nginx的根路径的;那么当用户通过浏览器访问根地址: ;hostname:port 时,nginx试图返回的页面就是:nginx/html/index.html。

当然这里root也可以写全路径,例如 /home/username/tools/nginx/html,效果是一样的。

这里我们要讨论如何把一个静态页面配置到nginx里面。

假设静态页面内容放在文件夹 /app/testapp/www下面(同时假设/app/testapp/www/index.html也存在),我们如何配置nginx使得 ;hostname:port/testapp 能够访问到这些静态页面内容呢。

结果:404 Not Found

查看nginx日志(nginx/logs/error.log):

原来nginx试图访问的文件路径是: /app/testapp/www/testapp ,这个路径是”root“的内容再拼上location的值组成的;那我们给修改location和root的值:

然后通过地址 ;hostname:port/www 就可以访问了;但是这里location必须用”www“不能用”testapp“,这就非常不可接受了,解决的办法可以是修改静态页面的地址,再加一层testapp路径,例如:"/app/testapp/www/testapp",然后再配置:

这样是可以的。另一个方法是采用alias取代root。

保留今天页面的地址"/app/testapp/www",配置nginx的配置文件:

关于alias和root的区别,请查阅nginx文档或者自行google,这里不再重复贴了。

nginx缓存(proxy_cache模块)

缓存的基本思想是利用客户端访问的时间局限性,将客户端访问过的内容做一个副本,在一定时间内存放到本地,当改数据下次被访问时,不必连接到后端服务器反复去查询数据,而是由本地保存的副本响应数据。

保存在本地的这些副本具有一个过期时间,超过该时间将会更新。判断一个副本数据是否为过期数据的办法有很多,可以使用保留时间来判断,也可以使用数据完整度来判断。

许多Web服务器还具有校验功能,就是当某些副本数据过期以后,先向后端服务器发送校验请求,后端服务器对这些数据进行校验,如果发现原数据和副本没有差别,则将过期副本重新置为可用副本。

以上nginx配置结合使用:

proxy_params文件的配置如下:

访问一次页面,并向 发起一个接口数据请求,查看/cache/nginx目录下的缓存结果:

ngx_cache_purge是nginx的第三方模块,能够帮助我清除nginx中的缓存。

在之前的nginx编译安装中我们是没有把缓存的清除模块ngx_cache_purge编译进去的,如果启动了缓存,没有安装这个模块,在之后的调试中我们尝试去清除缓存时,将会出现异常:

这个异常是在指示我们,找不到该指令的驱动,需要按照相关模块。

ngx_cache_purge只是nginx的第三方模块,并不是某个特殊的软件,所以我们需要对nginx重新进行编译,操作如下:

配置nginx:

再一次启动nginx成功;

接下来进行缓存清除测试,访问: , 访问这个连接将会清除接口: 的缓存数据。

结果如下:

在项目开发中,不可能出现什么都需要缓存的数据,缓存仅仅适合去缓存查询频繁,但是不需要实时更新的数据,这个是它适合的场景,而我们上面的配置,只要是访问api接口目录就会缓存接口的数据,这样对于一些需要实时更新的接口数据来说是不合理的,需要控制好nginx的缓存去缓存什么以及不缓存什么

set 指令为变量设置,proxy_no_cache参数中的值可以设置多个,但是多个值中,只要有一个是不为0的,就会通过缓存响应数据。

该指令用于配置一块公用的内存区域的名称,该区域可以存放缓存的索引数据。这些数据在Nginx服务器启动时由缓存索引重建进程负责建立,在Nginx服务器的整个运行过程中由缓存管理进程负责定时检测过期数据,检索等管理工作。

该指令用于配置Nginx服务器向客户端发送响应数据时,不从缓存中获取的条件。这些条件支持使用Nginx 配置的常用变量。

看一个例子:

其中,Scookie_nocache、Sarg_nocache、Sarg_comment、Shttp_pragma 和Shttp_authorization 都是Nginx配置文件的变量,

该指令用于设置Nginx服务器在内存中为缓存数据建立索引时使用的关键字

如果我们希望缓存数据包含服务器主机名称等关键字,则可以将该指令设置为:

该指令用于设置是否开启缓存的锁功能。在缓存中,某些数据项可以同时被多个请求返回的响应数据填充。开启该功能后,Nginx服务器同时只能有一个请求填充缓存中的某一数据项,这相当于给该数据项上锁,不允许其他请求操作。其他的请求如果也想填充该项,必须等待该数据项的锁被释放。这个等待时间由 proxy_cache_lock_timeout 指令配置。

该指令用于设置缓存的锁功能开启以后锁的超时时间。具体细节参见proxy_cache_lock 指令的相关内容

其中,time为设置的时间,默认为5s。

该指令用于设置客户端请求发送的次数,当客户端向被代理服务器发送相同请求达到该指令设定的次数后,Nginx服务器才对该请求的响应数据做缓存。合理设置该值可以有效地降低硬盘上缓存数据的数量,并提高缓存的命中率。

其中,number为设置的次数。默认设置为1。

该指令用于设置Nginx服务器存储缓存数据的路径以及和缓存索引相关的内容

该指令设置比较复杂,一般需要设置前面三个指令的情形比较多,后面的几个变量与Nginx服务器缓存索引重建进程及管理进程的性能相关,一般情况下保持默认设置就可以了。我们来看几个简单的配置实例:

如果Nginx在访问被代理服务器过程中出现被代理的服务器无法访问或者访问错误等现象时,Nginx服务器可以使用历史缓存响应客户端的请求,这些数据不一定和被代理服务器上最新的数据相一致,但对于更新频率不高的后端服务器来说,Nginx服务器的该功能在一定程度上能够为客户端提供不间断访问。该指令用来设置一些状态,当后端被代理的服务器处于这些状态时,Nginx服务器启用该功能。

该指令可以支持的状态如语法结构中所示。

该指令可以针对不同的HTTP响应状态设置不同的缓存时间,

该指令同于配置在什么情况下不使用cache功能

该指令配置是否在本地磁盘缓存来自被代理服务器的响应数据。这是Nginx服务器提供的另一种缓存数据的方法,但是该功能相对 Proxy Cache简单一些,它不提供缓存过期更新、内存索引建立等功能,不占用内存空间,对静态数据的效果比较好。

Proxy Store方法多使用在被代理服务器端发生错误的情况下,用来缓存被代理服务器的响应数据。

该指令用于设置用户或用户组对Proxy Store缓存的数据的访问权限,

有关Proxy Store方法的使用,我们通过官方给出的实例加深理解,在该实例中笔者通过注释对配置做了说明:

nginx 反代里缓存怎么清理

最简单的反代+全缓存脚本:

#新建2个目录,放置缓存文件:

mkdir -p /home/cache/path

mkdir /home/cache/temp

修改/usr/local/nginx/conf/nginx.conf的http层,添加以下代码:

client_body_buffer_size 512k;

proxy_connect_timeout 5;

proxy_read_timeout 60;

proxy_send_timeout 5;

proxy_buffer_size 16k;

proxy_buffers 4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

proxy_temp_path /home/cache/temp;

proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:10m inactive=7d max_size=30g;

#500m是内存占用,7d是7天无访问删除,30g是缓存占具硬盘空间

#limit_zone crawler $binary_remote_addr 10m; #这段是用于限制单ip连接数的,如果频繁出现后端负载过大可以尝试去掉#。

扩展资料:

nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。也就是说,可以把网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

假设前端nginx(为127.0.0.1:8080)仅仅包含一个静态页面index.html;后 台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和 test.php(里面测试代码为print "server1";),另一台根目录仅仅放置一个test.php(里面测试代码为print "server2";)。

参考资料来源:百度百科-反向代理负载平衡

【NGINX入门】3.Nginx的缓存服务器proxy_cache配置

本文介绍NGINX缓存机制,配置和参数说明。

如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力。因为静态文件(比如css,js, 图片)中,很多都是不经常更新的。nginx使用proxy_cache将用户的请求缓存到本地一个目录。下一个相同请求可以直接调取缓存文件,就不用去请求服务器了。毕竟,IO密集型服务的处理是nginx的强项。

Nginx的缓存加速功能是由proxy_cache(用于反向代理和静态缓存)和fastcgi_cache(PHP动态缓存)两个功能模块完成。

Nginx缓存特点:

先上个例子:

因为我是在一台服务器上做试验,所以用了两个端口 80 和 90 进行模拟两台服务器之间的交互。

接下来讲一下配置项:

这里我设置了 图片 、 css 、 js 静态资源进行缓存。

当用户输入 域名时,解析得到 ip:port 的访问地址。 port 默认为80。所以页面请求会被当前server截取到,进行请求处理。

当解析到上述文件名结尾的静态资源,会到缓存区获取静态资源。

如果获取到对应资源,则直接返回数据。

如果获取不到,则将请求转发给 proxy_pass 指向的地址进行处理。

这里直接处理 90 端口接受到的请求,到服务器本地目录 /mnt/blog 下抓取资源进行响应。

细心的读者应该发现,我在第二段例子里,留了个彩蛋 add_header wall "hey!guys!give me a star." 。

add_header 是用于在报头设置自定义的信息。

所以,如果缓存有效的话,那么静态资源返回的报头,一定会带上这个信息。

(1)Nginx系列教程(3)nginx缓存服务器上的静态文件

(2)proxy_cache

nginx 反向代理之 proxy_cache

(3)Nginx使用upstream负载均衡和proxy_cache缓存实现反向代理

赞(0)
文章名称:《nginx缓存静态页面(nginx 设置页面缓存)》
文章链接:https://www.fzvps.com/157226.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!