当前位置: 首页 > news >正文

使用nginx的proxy_cache实现静态资源的缓存

nginx的版本

./nginx -v
nginx version: nginx/1.9.15

需求

要求nginx缓存静态资源,如jscss、图片等,避免对静态资源的访问直接穿透到后端的j2ee应用侧,提高后端j2ee应用的运行效率。

配置方法

针对jscss、图片文件

  • 分别增加缓存路径的指令,比如对于图片,增加如下的指令:

      proxy_cache_path proxy_cache_image levels=1:2 keys_zone=cache_image:100m;
    
  • 分别增加路径转发配置的指令,比如对于图片,增加如下的指令:

      location ~ \.(gif|jpg|jpeg|png)$ {proxy_cache cache_image;proxy_cache_key $uri$is_args$args;proxy_cache_valid 200 206 14d;proxy_pass http://127.0.0.1:18080;}
    
  • 增加如下指令,在HTTP响应消息的头部中增加资源请求命中的标识。

      add_header X-Cache $upstream_cache_status; # $upstream_cache_status表示资源缓存的状态,可选值有HIT MISS EXPIRED三种状态
    

    使用浏览器调试面板中的网络视图,查看浏览器收到的响应消息的头部,如下所示

      Connection:keep-aliveContent-Encoding:gzipContent-Type:text/cssDate:Sat, 07 Jan 2017 12:00:37 GMTETag:W/"5576-1457782914000"Last-Modified:Sat, 12 Mar 2016 11:41:54 GMTServer:nginxTransfer-Encoding:chunkedVary:Accept-EncodingX-Cache:HIT   # 表明缓存命中
    

完整的样例配置

worker_processes  1;error_log  logs/error.log;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;server_tokens off;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;sendfile        on;tcp_nopush     on;keepalive_timeout  65;gzip  on;gzip_vary               on;gzip_min_length         1024;gzip_buffers            128 32k;gzip_comp_level         6;gzip_http_version       1.1;gzip_proxied            expired no-cache no-store private auth;gzip_types              text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;charset utf-8;proxy_cache_path proxy_cache_image levels=1:2 keys_zone=cache_image:100m;proxy_cache_path proxy_cache_js levels=1:2 keys_zone=cache_js:100m;proxy_cache_path proxy_cache_css levels=1:2 keys_zone=cache_css:100m;server {listen 8080;server_name  192.168.0.107;location ~ \.js {proxy_cache cache_js;proxy_cache_key $uri$is_args$args;proxy_cache_valid 200 206 14d;proxy_pass http://127.0.0.1:18080;}location ~ \.css {proxy_cache cache_css;proxy_cache_key $uri$is_args$args;proxy_cache_valid 200 206 14d;proxy_pass http://127.0.0.1:18080;}location ~ \.(gif|jpg|jpeg|png)$ {proxy_cache cache_image;proxy_cache_key $uri$is_args$args;proxy_cache_valid 200 206 14d;proxy_pass http://127.0.0.1:18080;}location ~ / {index  index.jsp;proxy_pass http://127.0.0.1:18080;proxy_set_header        referer           '';include proxy.conf;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location ~ /\. {deny all;access_log off;log_not_found off;}}}

对proxy_cache_key参数的简单说明

上述样例中,使用到了如下指令

proxy_cache_key $uri$is_args$args;
  • $uri,请求中的当前URI,例如/foo/bar.html
  • $is_args,如果$args设置,值为"?“,否则为”"。
  • $args,这个变量等于GET请求中的参数。例如foo=123&bar=blahblah

使用上述参数,可以有效完成对如下资源样式的区分

<link href="tomcat.css?ver=123" rel="stylesheet" type="text/css" />
<link href="tomcat1.css" rel="stylesheet" type="text/css" />

参考资料

  • 转 利用Proxy Cache使Nginx对静态资源进行缓存
  • nginx 的proxy_cache才是王道
  • 解决nginx反向代理缓存不起作用的问题
  • nginx内置预定义变量
  • nginx location匹配规则
  • Module ngx_http_proxy_module

相关文章:

使用nginx的proxy_cache实现静态资源的缓存

nginx的版本 ./nginx -v nginx version: nginx/1.9.15需求 要求nginx缓存静态资源&#xff0c;如js、css、图片等&#xff0c;避免对静态资源的访问直接穿透到后端的j2ee应用侧&#xff0c;提高后端j2ee应用的运行效率。 配置方法 针对js、css、图片文件 分别增加缓存路径的…...

【Golang】Perl 正则表达式语法的支持示例

背景 在 Golang 中&#xff0c;标准库的正则表达式包 regexp 是基于 RE2 语法的&#xff0c;并不直接支持 Perl 正则表达式的全部功能。虽然 Golang 的标准库并不直接提供对 Perl 正则表达式的支持&#xff0c;但是您可以使用第三方库来实现与 Perl 兼容的正则表达式功能。 一…...

手写一个std::function

前言 在《std::function从实践到原理》中我们分析了std::function的实现原理&#xff0c;但这只是纸上谈兵。要想理解为什么这么实现&#xff0c;最好的办法还是想想要是自己手写一个要怎么实现。本文不想直接呈现最终版本&#xff0c;因为那样读者看不到某段代码是为了什么才…...

04--MySQL函数的使用

1、SQL函数的使用 当我们学习编程语言的时候&#xff0c;经常会遇到函数。函数的好处是&#xff0c;它可以把我们经常使用的代码封装起来&#xff0c;需要的时候直接调用即可。这样既提高了编写代码的效率&#xff0c;又提高了可维护性。在SQL中函数主要要对数据进行处理&…...

imgaug库指南(28):从入门到精通的【图像增强】之旅(万字长文)

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…...

精确掌控并发:漏桶算法在分布式环境下并发流量控制的设计与实现

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;16&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;3&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 本篇重点讲清楚漏桶原理&#xff0c;在支付系统的应用场景&#x…...

【Redis】Redis面试热点

Redis 集群有哪些方案&#xff1f; 主从复制&#xff1a;解决了高并发问题 哨兵模式&#xff1a;解决了高并发&#xff0c;高可用问题 分片集群&#xff1a;解决了海量数据存储&#xff0c;高并发写的问题 主从复制 图示&#xff1a; 主从复制&#xff1a;单节点 Redis 并发…...

构建中国人自己的私人GPT-有道GPT

创作不易&#xff0c;请大家多鼓励支持。 在现实生活中&#xff0c;很多人的资料是不愿意公布在互联网上的&#xff0c;但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢&#xff1f;于是我们构建自己或公司的私人GPT变得非常重要。 先看效果 一、…...

data = self._data_queue.get(timeout=timeout)

目录 解决方法 freeze_support 解决方法 opencv 升级 方法3 OMP_NUM_THREADS&#xff1a; 报错&#xff1a; data self._data_queue.get(timeouttimeout) 解决方法 freeze_support data self._data_queue.get(timeouttimeout)RuntimeError: DataLoader worker (pid(s)…...

推挽输出、开漏输出、上拉输入、下拉输入、浮空输入。

一、推挽输出 推挽输出的内部电路大概如上图中黄色部分&#xff0c;输出控制内有反相器&#xff0c;由一个P-MOS和一个N-MOS组合而成&#xff0c;同一时间只有一个管子能够进行导通。 当写入1时&#xff0c;经过反向器后为0&#xff0c;P-MOS导通&#xff0c;N-MOS截至&#xf…...

【Java JVM】栈帧

执行引擎是 Java 虚拟机核心的组成部分之一。 在《Java虚拟机规范》中制定了 Java 虚拟机字节码执行引擎的概念模型, 这个概念模型成为各大发行商的 Java 虚拟机执行引擎的统一外观 (Facade)。 不同的虚拟机的实现中, 通常会有 解释执行 (通过解释器执行)编译执行 (通过即时编…...

【Emgu CV教程】5.4、几何变换之图像翻转

今天讲解的两个函数&#xff0c;可以实现以下样式的翻转。 水平翻转&#xff1a;将图像沿Y轴(图像最左侧垂直边缘)翻转的操作。原始图像中位于左侧的内容将移动到目标图像的右侧&#xff0c;原始图像中位于右侧的内容将移动到目标图像的左侧。垂直翻转&#xff1a;将图像沿X轴…...

2024年AMC8历年真题练一练和答案详解(10),以及全真模拟题

六分成长继续为您分享AMC8历年真题&#xff0c;最后两天通过高质量的真题来体会快速思考、做对题目的策略。 题目从575道在线题库&#xff08;来自于往年真题&#xff09;中抽取5道题&#xff0c;每道题目均会标记出自年份和当年度的序号&#xff0c;并附上详细解析。【使用六…...

echarts业务中常用属性设置记录

1.legend计算占比 //在data中定义两个字段 total:0, znum:0 //计算上面两个值 this.data.forEach(val > this.total parseInt(val.value)); for (let i 0; i < nv.length; i) {if (i ! nv.length - 1) {this.znum this.znum Number(parseFloat((nv[i].value / this.t…...

Ubuntu 22.04 安装prometheus

服务器监控和报警软件有很多&#xff0c;为什么我们会选择Prometheus而不是其他软件呢&#xff1f; 因为它有以下优点&#xff1a; 自带简易web监控页面&#xff0c;用户可以很方便地查看监控数据和使用仪表盘。能实时收集数据并根据自定义警报规则推送告警&#xff1b;具有丰…...

Django的模板语言

文章目录 模板语法变量标签过滤器注释 组件引擎模板上下文加载器上下文处理器 模板引擎的支持配置用法引擎内置后端 模板 作为一个网络框架&#xff0c;Django 需要一种方便的方式来动态生成 HTML。最常见的方法是依靠模板。一个模板包含了所需 HTML 输出的静态部分&#xff0…...

为什么安卓逆向手机要root

安卓逆向工程是指对安卓应用程序进行研究和分析&#xff0c;以了解其内部工作原理、提取资源、修改应用行为、发现漏洞等。在某些情况下&#xff0c;为了进行逆向分析&#xff0c;需要对手机进行Root。 以下是一些安卓逆向中可能需要Root的原因&#xff1a; 获得完全访问权限…...

整合junit与热部署

整合junit <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.7.0</version></dependency> 测试类上添加SpringBootTest 如&#xff1a; 注意测试类的…...

C++面试宝典第21题:字符串解码

题目 给定一个经过编码的字符串,返回其解码后的字符串。具体的编码规则为:k[encoded_string],表示方括号内部的encoded_string正好重复k次。注意:k保证为正整数;encoded_string只包含大小写字母,不包含空格和数字;方括号确定是匹配的,且可以嵌套。 示例: 编码字符串为…...

WXUI 基于uni-app x开发的高性能混合UI库

uni-app x 是什么&#xff1f; uni-app x&#xff0c;是下一代 uni-app&#xff0c;是一个跨平台应用开发引擎。 uni-app x 没有使用js和webview&#xff0c;它基于 uts 语言。在App端&#xff0c;uts在iOS编译为swift、在Android编译为kotlin&#xff0c;完全达到了原生应用…...

libiec61850:电力自动化通信协议栈的技术架构与实践应用

libiec61850&#xff1a;电力自动化通信协议栈的技术架构与实践应用 【免费下载链接】libiec61850 Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850 libiec61850 …...

物理学巅峰成就巡礼:从牛顿到量子,探索宇宙与微观世界的革命性突破

1. 项目概述&#xff1a;一次对物理学巅峰成就的巡礼2019年&#xff0c;诺贝尔物理学奖授予了三位天体物理学家——詹姆斯皮布尔斯、米歇尔马约尔和迪迪埃奎洛兹&#xff0c;以表彰他们在物理宇宙学理论以及系外行星发现领域的开创性贡献。这个奖项像一束聚光灯&#xff0c;将公…...

HarmonyOS 6学习:水平仪气泡移动方向错误的完整分析与修复方案

从"反向移动"到"精准指向"&#xff1a;一次完整的传感器应用开发经历在HarmonyOS 6应用开发中&#xff0c;我最近负责开发一个建筑工具应用&#xff0c;其中包含一个水平仪功能。这个功能对建筑工人和DIY爱好者来说非常实用——通过手机传感器检测设备倾斜…...

抖音下载神器:3步轻松搞定无水印批量下载完整教程

抖音下载神器&#xff1a;3步轻松搞定无水印批量下载完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...

SystemVerilog驱动强度解析:从三态总线到功耗分析的核心技术

1. 项目概述&#xff1a;为什么需要关注驱动强度&#xff1f;在数字电路设计和验证领域&#xff0c;SystemVerilog 作为一门强大的硬件描述与验证语言&#xff0c;其细节往往决定了仿真的精度和设计的可靠性。很多工程师&#xff0c;尤其是刚接触 RTL 设计或转向更复杂验证场景…...

用 TLA+ 形式化验证 Harness 的并发安全性

从零到一:用TLA+形式化验证Harness CI/CD平台的并发操作安全性 副标题:解决分布式环境下流水线执行、资源抢占、状态一致性的核心痛点 摘要/引言 如果你是云原生团队的开发或运维工程师,大概率遇到过这样的场景:两个生产部署流水线同时触发,同时抢占同一个K8s集群的环境…...

GPT-4的1.8万亿参数与2%稀疏激活原理揭秘

1. 项目概述&#xff1a;参数规模与稀疏激活的真相拆解“GPT-4 Has 1.8 Trillion Parameters. It Uses 2% of Them Per Token.”——这句话过去两年在技术社区反复刷屏&#xff0c;常被当作AI算力爆炸的佐证&#xff0c;也常被误读为“模型只用了一丁点参数&#xff0c;所以还有…...

从能算到秒杀:单词拆分与「能否拼出来」的判定艺术

如果说 完全平方数​ 是在算「最少几个数」&#xff0c;零钱兑换​ 是在算「最少几枚硬币」&#xff0c;那 139. 单词拆分​ 就是在考你&#xff1a;一个字符串&#xff0c;到底能不能被“拼”出来&#xff1f;这也是我第一次意识到&#xff1a;很多 DP 题&#xff0c;其实是在…...

精准监测,畅行无阻——DX-SZ3200系列在交通领域的应用

在铁路、高速及各类交通系统中&#xff0c;信号监测与管理的精准性和实时性至关重要。DX-SZ3200系列数字化射频实时频谱侦测接收机模块&#xff0c;凭借其卓越的性能和广泛的应用场景&#xff0c;成为了交通领域信号监测的得力助手。DX-SZ3200系列模块集成了先进的数字化射频接…...

【论文阅读】ManiFlow: A General Robot Manipulation Policy via Consistency Flow Training

快速了解部分 基础信息&#xff08;英文&#xff09;&#xff1a; 1.题目: ManiFlow: A General Robot Manipulation Policy via Consistency Flow Training 2.时间: 2025.09 3.机构: University of Washington, UC San Diego, Nvidia, Allen Institute for AI 4.3个关键词: Fl…...