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下 左边是格式 右边是拓展名
#多媒体文件不适合压缩,适合用缓存,因为多媒体文件大,压缩与解压缩浪费时间,降低用户的体验度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)