nginx配置本地缓存用于提高响应效率

nginx缓存应用的两个条件,一种是上游资源的变化频率比较低,二是前端对上游变化的实时性要求不高,此时就可以考虑使用nginx本地缓存来处理前端请求,避免每次都重复的从上游读取相同的内容,造成上游资源的重复消耗,从而提高前端的响应效率。

1. 定义缓存

在nginx配置文件的http模块配置:

复制代码
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=auth_cache:128m inactive=1h max_size=256m use_temp_path=off;

这里包括缓存路径,目录层次以及缓存名称,缓存大小,有效期等。

2. 配置响应缓存

到需要使用缓存的location配置:

复制代码
location /test {
            #internal;
            proxy_cache auth_cache;
            proxy_cache_valid 200 10m;
            proxy_cache_valid 403 10m;
            # proxy_cache_key $host$request_uri;

            proxy_cache_key $host$http_x_original_uri;
            proxy_cache_lock on;
            proxy_cache_lock_age 5s;
            
            add_header Cache-status $upstream_cache_status;
        }

配置内容包括:

使用的缓存,针对不同的状态码配置不同的有效期,缓存的key,以及缓冲状态配置到响应中。

proxy_cache_key "schemerequest_methodhostrequest_uri"

proxy_cache_key "hosturiis_argsargs";

3. 缓存文件内容查看

找到并打开缓存文件内容:

/tmp/nginx/cache/2/54/4ef025157cc1bc58ccb3a365e0725542

复制代码
^E^@^@^@^@^@^@^@¹Púf^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ÿÿÿÿÿÿÿÿaNúf^@^@^@^@"åW^N^@^@Ô^A0^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
KEY: 192.168.4.125/Microsoft-Server-ActiveSync?User=test001@otp.com
HTTP/1.1 403 ^M
Content-Length: 0^M
Date: Mon, 30 Sep 2024 07:08:17 GMT^M
Connection: close^M

4. 缓存工作有关指令

如果不配置proxy_buffering,NGINX是不能生产缓存的,所以我们先来分析buffering的工作原理。

buffer工作原理

首先第一个概念是所有的这些proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。

proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。

无论proxy_buffering是否开启,proxy_buffer_size都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。

在proxy_buffering 开启的情况下,NGINX将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF)。此时NGINX开始向客户端传输数据,会同时传输这一整串buffer们。同时如果响应的内容很大的话,NGINX会接收并把他们写入到临时文件里去。大小由proxy_max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的。

5. 相关指令说明

Syntax:proxy_buffering on | off;

Default:proxy_buffering on;

Context:http, server, location

启用或禁用使用缓冲区来存储代理服务器的响应。默认打开,如果proxy_buffering关闭,则NGINX不会生成缓存文件。启用后,NGINX会尽快从代理服务器收到响应,并将其保存到由指令proxy_buffer_size和proxy_buffers指令设置的缓冲区中 。如果缓冲区不能容纳整个响应,则可以将一部分响应保存到磁盘上的临时文件中。临时文件大小由 proxy_max_temp_file_size和proxy_temp_file_write_size 指令配置。指令proxy_temp_file_write_size定义的是一次访问能写入的临时文件的大小,默认是proxy_buffer_size和proxy_buffers中设置的缓冲区大小的2倍,Linux下一般是8k。指令proxy_max_temp_file_size指定当响应内容大于proxy_buffers指定的缓冲区时, 写入硬盘的临时文件的大小. 如果超过了这个值, NGINX将与Proxy服务器同步的传递内容, 而不再缓冲到硬盘. 设置为0时, 则直接关闭硬盘缓冲。

禁用后,收到响应后到就立即同步传递到客户端。NGINX不会尝试从代理服务器读取整个响应。一次可以从服务器接收的最大数据大小由proxy_buffer_size指令设置。

可以通过在" X-Accel-Buffering"响应头字段中传递" yes"或" no" 来启用或禁用缓冲。也可以使用proxy_ignore_headers指令禁用此功能 。

相关推荐
无锡银洲自动化17 分钟前
烟气监测取样频繁堵管?防堵取样器解决工业运维通病
运维·产品运营
樂禮19 分钟前
Windows-Arch Linux 键鼠共享 & 剪贴板同步配置
linux·运维·windows
敲上瘾29 分钟前
Linux系统调用mmap文件映射与malloc简单模拟实现指南
linux·服务器·c语言·缓存
APItesterCris31 分钟前
电商口碑自动化监控方案:30 分钟搭建商品评论实时采集 + 情感分析系统(完整可运行代码)
大数据·运维·数据仓库·自动化
wdfk_prog10 小时前
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理
c语言·缓存·面试·职场和发展·架构
AOwhisky12 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
一勺菠萝丶14 小时前
生产环境平滑升级实战-Nginx维护页数据库迁移与安全回滚
数据库·nginx·安全
9523615 小时前
Redis - 应用
数据库·redis·分布式·缓存
摇滚侠16 小时前
Linux 零基础教程 09、11、77
linux·运维·服务器
Lottie202616 小时前
电商自动化提质增效:API接口落地的核心价值与实战用法
运维·自动化