当前位置: 首页 > 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;完全达到了原生应用…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...