06 . Nginx静态资源缓存 您所在的位置:网站首页 nginx资源缓存 06 . Nginx静态资源缓存

06 . Nginx静态资源缓存

2024-05-21 11:20| 来源: 网络整理| 查看: 265

Nginx静态资源

Nginx可以处理静态资源

非Web服务器可以运行处理而生成的文件,即服务器只需要从硬盘或者缓存中读取然后直接给客户端响应即可。

常见的静态资源

代码语言:javascript复制# 浏览器渲染: html文件,样式表CSS,JS脚本——浏览器需要读取样式格式和脚本,然后去渲染的. # 图片文件: GIF、PNG、JPEG # 视频文件: MP4、FLV、AVI、MPEG # 其它文件: ISO、PDF、TXT、EXE

Nginx作为网站服务器,如何高效的处理静态资源,就需要让nginx速度变快,可以从以下几个方面考虑:

代码语言:javascript复制1.文件读取:nginx如何从硬盘上读取文件,然后交给socket 2.文件压缩 3.proxy缓存 4.浏览器缓存 php php——> php java jsp——> tomcat python wsgi——> wsgi静态缓存

缓存就是为了加快访问速度的,避免nginx和后端服务器进行交互,因为一交互就涉及到网络带宽,磁盘进行IO操作查找数据,回复数据也需要网络带宽,web查找数据还需要消耗cpu内存,nginx和后端服务器通讯,本地需要消耗cpu,内存,没有交互能省很多资源.proxy若无缓存就是miss,若有缓存就是hit命中.

缓存类型

数据库缓存: memcache,redisproxy网页缓存: client访问静态资源,代理有缓存就无需向后端web请求资源.客户端缓存即浏览器缓存: 根据Etag和Last-Modified来判断缓存的有效性.Nginx反向代理缓存数据由两部分组成,第一部分叫缓存的元数据,包括缓存数据的名称,大小,有效期等,这一部分是存放在内存中的,需要在内存中开启一段空间,专门用于保存缓存的元数据。另外一部分就是缓存数据的本身,真正缓存下来的数据,这一部分的数据是存放在硬盘上的,需要设置缓存数据的存放路径.

综上: 设置Nginx的反向代理缓存主要设置两部分内容:

代码语言:javascript复制# 一、在内存里面开启一段空间用来缓存元数据. # 二、在磁盘中指定目录用来缓存真正缓存下来的数据.定义缓存空间指令:代码语言:javascript复制proxy_cache_path: # 不能定义在server{}中. Example: - proxy_cache_path /nginx/cache/first levels=2:1:2 keys_zone=first:20m max_size=1G

参数详解:

整个配置的作用就是在nginx服务器本地开辟了一段用来存储缓存数据的内存空间+磁盘空间keys_zone=name:size # 定义存储键的区域(定义共享的名称)keys_zone: # 在内存里面开辟一块区域,first是为开启的区域起的名字20m: # 开启的内存大小为20m,用来保存元数据./nginx/cache/first: # 一个目录名,重启nginx服务会在磁盘上自动产生,里面目录用来存放真正的缓存数据.max_size: # 指定/nginx/cache/first中的1G空间用于存储数据,可根据自己的需求调整.level 2:1:2 #nginx生成缓存数据在指定的目录下生成三级子目录,真正的缓存数据在最后一级目录存放,第一级,第二级和第三级子目录的名称分别是2个字符,1个字符和2个字符,且每一级子目录的名称最多2个字符,目录名称是随机生成的,这样配置的好处是: 缓存数据比较多的时候,分类存放,nginx查找速度快一点.代理服务器缓存过期代码语言:javascript复制proxy_cache_valid 200 302 10m; # 返回值为200和302缓存10min; proxy_cache_valid 404 1m; # 返回值404缓存1min缓存维度代码语言:javascript复制# Syntax: proxy_cache_key string; # Default: proxy_cache_key $scheme$proxy_host$request_uri; # nginx内部变量scheme是协议名,proxy_host 是缓存服务器主机名,$request_uri是请求的路径,将他们作为整体hash成一个key,缓存到目录. # Context: http,server,locationNginx缓存配置示例

定义缓存存放路径为/web/cache,缓存级别为2级,即location后面匹配到的缓存两级目录,多了不缓存 缓存的内容最多使用1G空间; 并定义键值区域名称为first,名字占的空间大小为20m,60分钟之内没有人用就删掉

代码语言:javascript复制proxy_cache_path /web/cache levels=1:2 keys_zone=first:20m max_size=1g inactive=60m; # 定义一段缓存空间之后,想要启用缓存功能,需要在某一个locaiton里面写下面两行 proxy_cache first; first就是上面定义的指定缓存元数据的区域空间名称 proxy_cache_valid 200 304 1m; 表示nginx只缓存状态码为200和304的响应数据,且数据在缓存时,有效期为1min proxy_cache_valid any 10m;其他的缓存10分钟 proxy_cache_key $host$uri$is_args$args; 使用什么做key,可以不定义,系统自动定义名字 # 在httpd响应报文中添加额外项X-cache,用于查看缓存是否命中,可加可不加的 add_header x-cache "$upstream_cache_status by $server_addr"; # 添加一个头部名称为x-cache,头部里面的内容是:nginx内部的两个变量: $upstream_cache_status: 用于记录缓存是否命中的状态 (HIT, MISS, EXPIRED) $server_addr 服务器地址

在浏览器中F12-------->网络-------->查看HTTP响应报文 X-cache:HIT by 192.168.122.153信息,表示缓存命中 miss by 192.168.122.153信息,表示首次访问 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; 收到50x代号,向上游服务器重新请求一次

具体操作

修改如下两个配置文件

代码语言:javascript复制vim /etc/nginx/nginx.conf upstream websrv { server 47.92.24.137 weight=1 max_fails=2 fail_timeout=2; server 49.233.69.195 weight=1 max_fails=2 fail_timeout=2; server 127.0.0.1:8080 backup; } proxy_cache_path /web/cache levels=1:2 keys_zone=first:20m max_size=1g; add_header x-cache "$upstream_cache_status by $server_addr"; access_log /var/log/nginx/access.log main; vim /etc/nginx/conf.d/default.conf location / { root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://websrv/; proxy_cache first; proxy_cache_valid 200 304 12h; #proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; proxy_set_header X-Real-IP $remote_addr; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } mkdir /web/cache -p # 缓存的path,文件夹需要创建,否则报语法错误 # 重新加载配置文件使其生效 systemctl restart nginx elinks --dump 39.108.140.0 # welcome to nginx elinks --dump 39.108.140.0 # welcome to nginx elinks --dump 39.108.140.0 # welcome to nginx # 负载均衡没有生效,因为有缓存了 curl -I 39.108.140.0 # HTTP/1.1 200 OK # Server: nginx/1.16.1 # Date: Fri, 01 Nov 2019 14:52:19 GMT # Content-Type: text/html # Content-Length: 17 # Connection: keep-alive # Last-Modified: Sat, 19 Oct 2019 13:24:08 GMT # ETag: "5dab0e78-11" # Nginx-Cache: HIT # HTI为有缓存的意思 # Accept-Ranges: bytes

接下来我们将缓存删掉

代码语言:javascript复制rm -rf /web/cache/* curl -I 39.108.140.0 HTTP/1.1 200 OK Server: nginx/1.16.1 Date: Fri, 01 Nov 2019 14:52:49 GMT Content-Type: text/html Content-Length: 8 Connection: keep-alive Last-Modified: Fri, 01 Nov 2019 10:51:39 GMT ETag: "5dbc0e3b-8" Nginx-Cache: MISS # MISS表示没有缓存了


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有