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指令禁用此功能 。

相关推荐
AI浩6 小时前
【Labelme数据操作】LabelMe标注批量复制工具 - 完整教程
运维·服务器·前端
sunxunyong7 小时前
doris运维命令
java·运维·数据库
Guheyunyi7 小时前
智慧消防管理系统如何重塑安全未来
大数据·运维·服务器·人工智能·安全
忍冬行者8 小时前
清理三主三从redis集群的过期key和键值超过10M的key
数据库·redis·缓存
TimberWill8 小时前
使用Redis队列优化内存队列
数据库·redis·缓存
雾削木10 小时前
k230 Pyhton三角形识别
运维·服务器·网络·stm32·智能路由器
大连好光景12 小时前
Python打日志
运维·python·运维开发
二哈喇子!12 小时前
openFuyao 容器平台快速入门:Nginx 应用部署全流程实操
运维·nginx·openfuyao
齐鲁大虾12 小时前
国产 Linux 系统核心优缺点与适用场景
linux·运维·服务器
雨大王51212 小时前
工业生产执行系统(MES)在汽车制造行业的应用案例
运维·人工智能