Nginx06-缓存配置和文件压缩

永久缓存配置

nginx提供proxy_store指令将提供资源的服务器的响应内容缓存到本地,适合缓存网站中几乎不变的内容

server {
    listen 80;
    server_name 192.168.1.1;
    location / {
    root cache;        # 缓存路径 需要手动创建给权限 /usr/local/nginx/cache
    proxy_store on;    # 开启本地缓存
    proxy_store_access user:rw group:rw all:r;
    proxy_temp_path cache_tmp;      # 反向代理时接收的数据的临时存储目录
    proxy_pass http://192.168.1.4;
    }
}

判断缓存目录中的文件是否存在
如果客户端向web缓存服务器发送请求http://192.168.1.1/test/index.html,高亮部分就是request_filename的值
if (!-e $request_filename) {
    proxy_pass http://192.168.1.4
}

临时缓存配置

在http块中添加如下配置:

#代理临时目录
Proxy temp path /usr/local/nginx/proxy temp dir;
#web缓存目录和参数设置
proxy cache path /usr/local/nginx/proxy cache_dir levels=1:2 keys_zone=cache_one:50m
inaetive-1mmax size-500m;
server {
    listen 80;
    server name test.ng.test;
    # 增加两个响应头信息,用于获知访问的服务器地址与缓存是否成功
    add header X-Via $server addr;
    add header X-Cache supstream cache status;
    location / {
        proxy cache cache one;  #设置缓存区城名称
        #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希
        Proxy cache key$host$urisis argssargs;
        #对不同的HTTP状态码设置不同的缓存时间
        proxy cache valid 200 10m;        #200缓存10分钟
        proxy cache valid 304 lm;         #304缓存1分钟
        proxy cache valid 301 302 1h;     #301、302缓存1小时
        proxy cache valid any 1m;         #其他未设置的状态码缓存1分钟
        proxy pass http://192.168.78.128: #设置反向代理

缓存状态值

HIT           缓存命中
MISS          未命中,请求被传送到后端
EXPIRED       缓存已经过期,请求被传送到后端
UPDATING      正在更新缓存,将使用旧的应答
STALE         无法从后端服务器更新缓存时,返回了旧的缓存内容(可通过proxy_cache_use_stale指令配置)
BYPASS        缓存被绕过了(可通过proxy_cache_bypass指令配置)
REVALIDATED   启用 proxy_cache_revalidate指令后,当缓存内容过期时,
              Nginx通过一次If-Modified-Since的请求头去验证缓存内容是否过期,此时会返回该状态

常用缓存配置选项

proxy_cache_bypass
用于配置Nginx向客户端发送响应数据时,不从缓存中获取的条件

proxy_cache_lock
用于设置是否开启缓存的锁功能

proxy_cache_lock_timeout
用于设置缓存的锁功能开启以后锁的超时时间

proxy_no_cache
配置在什么情况下不使用缓存功能

proxy_cache_min_uses
当同一个URL被重复请求达到指定的次数后,才对该URL进行缓存

proxy_cache revalidate
用于当缓存内容过期时,Nginx通过一次If-Modified-Since的请求头去验证缓存内容是否过期0

proxy_cache_use_stale
设置状态,用于内容源Web服务器处于这些状态时,Nginx向客户端响应历史缓存数据

缓存清理配置

安装ngx_cache_purge模块

unzip ngx_cache_purge-master.zip
mv ngx_cache_purge-master /usr/local/ngx_cache_purge
./configure --add-module=/usr/local/ngx_cache_purge

配置缓存功能

指定的缓存区名称要与proxy_cache_path指令中出现的缓存区名称一致。
指定的Key值组成规则,要与proxy_cache_key指令设置的规则相同。
清理缓存的location编写位置,要在server块中所有location之前,防止其他正则location 提前匹配。

location ~ /purge(/.*) {
    allow 192.168.1.1;
    deny  all;
    proxy_cache_purge cache_one $host$1$is_args$args;
}

浏览器本地缓存静态数据

缓存的对象为多媒体文件,因为制作费用比较高,不会频繁更换
修改Nginx配置文件,定义对静态页面的缓存时间

写在对应的server中的location中

server {
    listen       80;
    server_name  localhost;
    location / {
        root   html;
        index  index.html index.htm;
    }
    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
    expires        30d;            //定义客户端缓存时间为30天
    }
}

服务器内存缓存

如果需要处理大量静态文件,可以将文件缓存在内存,下次访问会更快

http全局配置中

http {
    open_file_cache  max=2000  inactive=20s;  //设置服务器最大缓存文件数2000 因为内存有限,关闭20秒内无请求的文件句柄,文件会在缓存中被清掉
    open_file_cache_valid    60s;             //文件句柄的有效时间是60秒,过期后清掉,重新缓存
    open_file_cache_min_uses 5;               //只有访问次数超过5次会被缓存,热点数据才会被放在缓存
    open_file_cache_errors   off;             //缓存失败不记录日志
}

对页面进行压缩处理

减少客户的流量的消耗,服务器端压缩,客户端浏览器自动解压

http全局配置中

http {
    gzip on;                             //开启压缩,在文件中被注释掉了
    gzip_min_length 1000;                //小文件不压缩,小文件越压越大,没的可压
    gzip_comp_level 4;                   //压缩比率(1-9),数字越大,压缩效果越好,时间长,但消耗CPU越大,一般选中间值
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml
}
#文件类型+文件名字,对特定文件压缩,类型参考mime.types,此文件共两列,前一列可以粘贴,后一列是你想要压缩的文件类型
#mime.types在/usr/local/nginx/conf下   左边是格式 右边是拓展名
#多媒体文件不适合压缩,适合用缓存,因为多媒体文件大,压缩与解压缩浪费时间,降低用户的体验度
posted @   立勋  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示