本文介绍: Nginx 不仅仅是一个 Web 服务器,它还可以作为一个缓存服务器使用通过 Nginx 缓存可以对一些静态资源或者数据更新频率较低的后端服务缓存,降低静态资源后端服务响应时间,同时也会降低后端负载可以在一定程度上,减少服务器处理请求压力比如对一些图片cssjs做一些缓存,那么在每次刷新浏览器时候,就不会重新请求了,而是从缓存里面读取。这样就可以减轻服务器压力

一、Nginx缓存介绍

Nginx 不仅仅是一个 Web 服务器,它还可以作为一个缓存服务器使用通过 Nginx 缓存可以对一些静态资源或者数据更新频率较低的后端服务缓存,降低静态资源后端服务响应时间,同时也会降低后端负载

nginx配置缓存的优点:
可以在一定程度上,减少服务器处理请求压力比如对一些图片,cssjs做一些缓存,那么在每次刷新浏览器的时候,就不会重新请求了,而是从缓存里面读取。这样就可以减轻服务器的压力。

二、具体操作

语法proxy_cache zone | off ; # zone共享内存名称

默认值proxy_cache off;

上下文:httpserverlocation
proxy_cache_path
设置缓存文件存放路径语法proxy_cache_path path [level=levels] ...可选参数省略,下面会详细列举

默认值:proxy_cache_path off

上下文:http
参数含义:

path 缓存文件存放路径level path目录层级;
keys_zone 设置共享内存inactive 在指定时间内没有访问,缓存会被清理默认10分钟;
proxy_cache_key
设置缓存文件key 。

语法:proxy_cache_key

默认值:proxy_cache_key $scheme$proxy_host$request_uri;

上下文:httpserver、location
proxy_cache_valid
配置什么状态可以被缓存,以及缓存时长。

语法:proxy_cache_valid [code...] time;

上下文:http、server、location

配置示例:proxy_cache_valid 200 304 2m;; # 说明对于状态为200和304的缓存文件的缓存时间是2分钟
proxy_no_cache
定义相应保存到缓存的条件,如果字符串参数的至少一个值不为空且不等于“ 0”,则将不保存响应到缓存。

语法:proxy_no_cache string;

上下文:http、serverlocation

示例:proxy_no_cache $http_pragma    $http_authorization;
proxy_cache_bypass
定义条件,在该条件下将不会从缓存中获取响应语法:proxy_cache_bypass string;

上下文:http、serverlocation

示例:proxy_cache_bypass $http_pragma    $http_authorization;
upstream_cache_status 变量存储了缓存是否命中的信息,会设置在响应信息中,在调试中非常有用。

MISS: 未命中缓存
HIT: 命中缓存
EXPIRED: 缓存过期
STALE: 命中了陈旧缓存
REVALIDDATED: Nginx验证陈旧缓存依然有效
UPDATING: 内容陈旧,但正在更新
BYPASS: X响应从原始服务获取

三、实例1

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
	
#####################################################
●path:强制参数指定缓存文件存放路径。
●levels定义了缓存目录的层级。每层可以用1(最多16种选择,0-f)或2(最多256种选择,00-ff表示,中间用 : 分隔。
proxy_cache_path /data/nginx/cache;  代表所有缓存只有一个目录,比如/data/nginx/cache/d7b6e5978e3f042f52e875005925e51b
proxy_cache_path /data/nginx/cache levels=1:2;  代表缓存是二层目录(有16*256=4096个目录),比如/data/nginx/cache/b/51/d7b6e5978e3f042f52e875005925e51b
●keys_zone:强制参数,定义共享内存区的名称和大小,该共享内存用于保存缓存项目的元数据所有活动的key和缓存数据相关信息),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key。
●inactive删除定时间内未被访问的缓存文件默认10分钟。
●max_size:设置了缓存存储的上限,如果不指定,最大会用掉所有磁盘空间。
●use_temp_path直接临时文件放在缓存目录中。
#####################################################
    
    upstream cache_server{
        server 192.168.80.20:80;
        server 192.168.80.30:80;
    }
    
    server {
        listen 80;
        server_name www.kgc.com;
        location / {
            proxy_cache my_cache;               #指定用于页面缓存的共享内存,zone名称由proxy_cache_path指令定义
            proxy_cache_valid 200 5m;           #为不同的响应状态码设置不同的缓存时间,此为缓存状态码为200的请求,缓存时长为5分钟
            proxy_cache_key $request_uri;       #指定缓存文件key为请求的URI
            add_header Nginx-Cache-Status $upstream_cache_status      #把缓存状态设置为头部信息,响应给客户端
            proxy_pass http://cache_server;     #设置代理转发后端服务器的协议地址
        }
    }
}

#对于一些实时性要求非常高的页面数据来说,就不应该去设置缓存,下面来看看如何配置不缓存的内容。
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
  listen 80;
  server_name cache.lion.club;
  #URI 中后缀为 .txt 或 .text 的设置变量值为 "no cache"
  if ($request_uri ~ .(txt|text)$) {
   set $cache_name "no cache"
  }
  
  location / {
    proxy_no_cache $cache_name;      #判断变量是否有值,如果有值则不进行缓存,如果没有值则进行缓存
    proxy_cache my_cache;            #设置缓存内存
    proxy_cache_valid 200 5m;        #缓存状态为200的请求,缓存时长为5分钟
    proxy_cache_key $request_uri;    #缓存文件的key为请求的URI
    add_header Nginx-Cache-Status $upstream_cache_status    #把缓存状态设置为头部信息,响应给客户端
    proxy_pass http://cache_server;  #代理转发
  }
}

在这里插入图片描述
在这里插入图片描述

原文地址:https://blog.csdn.net/m0_74412260/article/details/131537479

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_50334.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注