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

相关推荐
凌风的跨境分享4 分钟前
Temu店群运维提效:定时策略自动化任务全场景实操指南
大数据·运维·前端·人工智能·架构·自动化
Zenova EdgeOS9 分钟前
Linux iotop:工业边缘 I/O 高级分析实战
linux·运维·服务器
Black蜡笔小新9 分钟前
运维提效!视频汇聚平台EasyCVR视频质量诊断,掉线花屏自动预警
运维·安全·音视频
又見山11 分钟前
Codex 实战:用 AI 写运维脚本
运维·人工智能
Elastic 中国社区官方博客13 分钟前
Elasticsearch 向量数据库:几分钟内完成部署,以经济高效的方式扩展至数千亿规模
大数据·运维·数据库·elasticsearch·搜索引擎·ai·全文检索
赵民勇1 小时前
resolvectl命令详解
linux·运维
新时代牛马1 小时前
Linux 日志管理:journald、rsyslog 与 logrotate
linux·运维·服务器
あ-1 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台
运维·网络·devops
sbjdhjd1 小时前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
资深电气设计1 小时前
技术解析:ABB变频器ACH580/ACS180在CDU循环泵系统的应用技术框架
linux·运维·服务器