Nginx缓存静态文件

article/2025/9/2 20:40:22

nginx的一大功能就是完成静态资源的分离部署,减轻后端服务器的压力,如果给这些静态资源再加一级nginx的缓存,可以进一步提升访问效率。

第一步:添加nginx.conf的http级别的缓存配置

 

##cache##proxy_connect_timeout 500;#跟后端服务器连接的超时时间_发起握手等候响应超时时间proxy_read_timeout 600;#连接成功后_等候后端服务器响应的时间_其实已经进入后端的排队之中等候处理proxy_send_timeout 500;#后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有数据proxy_buffer_size 128k;#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可  proxy_buffers 4 128k;#同上 告诉Nginx保存单个用的几个Buffer最大用多大空间proxy_busy_buffers_size 256k;#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2proxy_temp_file_write_size 128k;#proxy缓存临时文件的大小proxy_temp_path /usr/local/nginx/temp;#用于指定本地目录来缓冲较大的代理请求proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;#设置web缓存区名为cache_one,内存缓存空间大小为12000M,自动清除超过15天没有被访问过的缓存数据,硬盘缓存空间大小200g

 

此处的重点在最后一句,缓存存储路径为:/usr/local/nginx/cache,levels=1:2代表缓存的目录结构为2级目录

如下图,缓存会在/usr/local/nginx/cache目录下生成,包含2级目录,在之下就是缓存文件,测试的时候可以到该目录下查看缓存文件是否生成。

第二步:在访问静态文件的location上添加缓存

#静态数据保存时效
location ~ \.html$ {proxy_pass http://source.qingk.cn;proxy_redirect off;proxy_cache cache_one;#此处的cache_one必须于上一步配置的缓存区域名称相同proxy_cache_valid 200 304 12h;proxy_cache_valid 301 302 1d;proxy_cache_valid any 1m;#不同的请求设置不同的缓存时效proxy_cache_key $uri$is_args$args;#生产缓存文件的key,通过4个string变量结合生成expires 30d;#其余类型的缓存时效为30天proxy_set_header X-Forwarded-Proto $scheme;
}#静态数据保存

 

此处需要注意3点:

1、只有在proxy_pass的时候,才会生成缓存,下一次请求执行到proxy_pass的时候会判断是否有缓存,如果有则直接读缓存,返回给客户端,不会执行proxy_pass;如果没有,则执行proxy_pass,并按照规则生成缓存文件;可以到nginx的cache文件夹下看是否生成了缓存文件。

2、proxy_set_header Host $host 这一句可能导致缓存失败,所以不能配置这一句。我在测试的时候遇到了这个问题,不明原理。

3、proxy_pass使用upstream出差,换成域名或ip则可行。

第三步:在proxy_pass跳转的location中配置静态文件的路径

location ~ .*\.(html)$ {default_type 'text/html';root "/usr/local/openresty/nginx/html";
}

将nginx本地存放静态文件的路径配到root指令处

如果没有这一句:default_type 'text/html',所有的请求都默认是下载文件,而不是访问html页面

到此,静态文件缓存已经配置完成。但是还差很重要的最后一步,缓存生成之后会阻止访问进入后台和nginx本地,如果有更新,则更新内容无法生效,还需要一种手动清除缓存的机制。

第四步:清除缓存

缓存文件是根据proxy_cache_key这个指令生成的,所以找到对应的缓存文件,删除即可

 

location ~ /purge(/.*) {#删除指定缓存区域cache_one的特定缓存文件$1$is_args$argsproxy_cache_purge cache_one $1$is_args$args;#运行本机和10.0.217.0网段的机器访问,拒绝其它所有  allow           127.0.0.1;allow           10.0.217.0/24;deny          all;
}

 

删除缓存用到proxy_cache_purge指令。

至此缓存生成和特定清除机制都已经实现。


http://chatgpt.dhexx.cn/article/76cxuc3x.shtml

相关文章

第一个c语言简单小程序

还有很多不会的地方,以后还要好好学习才行

C语言小程序实现电脑关机

一、需求分析 1.电脑在2分钟后关机&#xff1b; 2.输入 我最棒 则取消电脑关机 3.输入错误时&#xff0c;可以在2分钟内重复输入 二、代码 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() {char arr[10] {0};system("shutd…

【C/C++ 经典小程序(一)】

【1】九九乘法表 输出9*9口诀。共9行9列&#xff0c;i控制行&#xff0c;j控制列。 #include <stdio.h> void main() {int i,j,result;for (i1;i<10;i){ for(j1;j<i;j){resulti*j;printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐&#xff0c;占3位*/}pr…

c语言编写简单实用的小程序,C语言编写一个小程序

用C/C编写一个小程序 #include using namespace std; int main() { int b[6]{1,2,2,3,4,5},i,j,k,l,m,n,p,c,d,*a[6]; for(j0;j<6;j) a[j]&b[j]; for(j0;j<6;j) { a[0]&b[j]; for(k0;k<6;k) { if(kj) continue; a[1]&b[k]; for(l0;l<6;l) { if(lj||lk)…

编写C语言的最简单小程序Hello world和函数使用

编写C语言的最简单小程序Hello world 一、示例一 1、编写demo.c程序 #include<stdio.h> int main() {printf("Hello world!");return 0; } 程序的第一行 #include <stdio.h> 是预处理器指令&#xff0c;告诉 C 编译器在实际编译之前要包含 stdio.h 文…

C语言小程序:通讯录(文件版)

在静态版本的通讯录里面实现了通讯录的基本逻辑&#xff0c;但是空间大小是固定的&#xff0c;这样子就会显得很不灵活&#xff0c;会有浪费空间和空间不足的问题&#xff0c;所以在动态版本的通讯里面我们通过动态内存开辟使用malloc函数给通讯录动态的开辟一块空间&#xff0…

C语言有趣的小程序

最近闲着没事写了一个C语言小程序,就当作是玩玩。 本小程序的各个功能都是通过dos命令来实现的。 运行结果如下图: 该小程序有以下几个功能: 1、启动计算器 2、新建记事本 3、打开画图板 4、定时关机(15s、30s、60s) 5、显示系统时间或修改 6、重启计算机 小程序源代码…

C语言小程序:通讯录(静态版)

哈喽各位老铁们&#xff0c;今天给大家带来一期通讯录的静态版本的实现&#xff0c;何为静态版本后面会做解释&#xff0c;话不多说&#xff0c;直接开始&#xff01; 关于通讯录&#xff0c;其实也就是类似于我们手机上的通讯录一样&#xff0c;有着各种各样的功能&#xff0c…

C语言小程序分享

本文为大一时所写的文章&#xff08;2017/4/23&#xff09;&#xff0c;文笔还很生疏&#xff0c;在很多问题上认识不深&#xff0c;算是在学校的微信公众号上的一个编程探究模块上的投稿&#xff0c;本人当时也参与了本模块的维护和管理。补档。 上个周末的一个下午&#xff0…

C语言小程序-学生成绩统计系统

C语言小程序-学生成绩统计系统 参考了 另一位博主的代码(https://blog.csdn.net/qq_36503589/article/details/53106983) 我后来写的成绩排序版本链接&#xff1a;https://blog.csdn.net/qq_43617268/article/details/103491760 功能介绍&#xff1a;本程序可以输入50人以内的…

C语言10个经典小程序——小白必备!

网上有很多的人说编程有多么多么无聊。。。。So Boring ! 。。。其实小编想说:不要管别人怎么说,别人说什么,做你自己喜欢做的事就好。坚持下来,你会发现编程的乐趣的。。。。当然,如果你觉得学习编程语言很痛苦,坚持了一段时间后无果,南无果断放弃未必不是一个好的选择…

C语言小程序:如何用代码“画”出一个爱心

利用ASCII编码第三个字符&#xff0c;作为基础&#xff0c;然后利用三个多重循环画出一个爱心出来。要使用控制台改变运行框大小和文字的颜色&#xff0c;黑白的爱心不免有些诡异。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> #inclu…

我的第一个c语言小程序

标题&#xff1a;判断题答题小程序 Author: plc6666 软工专业 工科男 格言&#xff1a;总有人间一两风&#xff0c;填我十万八千梦。 文章目录 标题&#xff1a;判断题答题小程序 一.程序的由来二.程序的状况1.程序实现了颜色转换的功能2.程序能随机抽20题&#xff0c;不重复3.…

C语言10个经典小程序

【程序1】 题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; 1.程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去       掉不满足条件的排列。 2.程序源…

用 C语言的写出几个小程序

系列文章目录 前言 1、第一章&#xff1a;求出一个整型数组中的最大值 2、第二章&#xff1a;打印出100~999之间所有的水仙花数 3、第三章&#xff1a;输入一个数&#xff0c;打印出n行杨辉三角 4、第四章&#xff1a;小只因跳楼梯问题 5、第五章&#xff1a;创建一个含是…

C语言小程序

1、猜数字游戏 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h>//猜数字游戏 int main() {int guess 0;//生成随机数//0~99 --> 1~100int ret rand() % 100 1;//生成随机数的函数printf("请猜数字 …

服务器登录原理,单点登陆(单点登录原理)

单点登录简介 SSO&CAS是什么 单点登录适合什么场景 单点登录的三种实现方式 CAS的几个重要知识点 CAS的实现过程 单点登录简介 单点登录(SingleSignOn&#xff0c;SSO)&#xff0c;就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后&#xff0c;即可获得…

单点登陆 SSO

参考文章 同域下的单点登录 &#xff08;sso.a.com、app1.a.com、app2.a.com&#xff09; 统一通过sso.a.com 登录&#xff0c;但有以下两个问题&#xff1a; 1、Cookie是不能跨域的&#xff0c;我们Cookie的domain属性是sso.a.com&#xff0c;在给app1.a.com和app2.a.com发送…

五、微服务版单点登陆系统(SSO)

微服务版单点登陆系统(SSO)实践 文章目录 微服务版单点登陆系统(SSO)实践一、单点登陆系统简介1. 背景分析2. 单点登陆系统概述3. 单点登陆系统解决方案设计 二、单点登陆系统初步设计1. 服务设计2. 工程结构设计 三、系统基础服务工程设计及实现1. 业务描述2. 表结构设计3. 工…

单点登陆(SSO)

一、背景 在企业发展初期&#xff0c;企业使用的系统很少&#xff0c;通常一个或者两个&#xff0c;每个系统都有自己的登录模块&#xff0c;运营人员每天用自己的账号登录&#xff0c;很方便。但随着企业的发展&#xff0c;用到的系统随之增多&#xff0c;运营人员在操作不同的…