Nginx 备忘录 - 08. 缓冲区与缓存
off999 2025-01-05 19:30 27 浏览 0 评论
一、代理缓冲区
当我们增加了 Nginx 代理层时,请求流程为:客户端 → Nginx → 服务端,在这个过程中存在两个连接:客户端 → Nginx(外网)、Nginx → 服务端(内网),由于这两个连接所处的网路环境不同,他们的连接速度也是不一致的。
而 Nginx 代理缓冲区的用途就是来解决两个连接之间速度不匹配造成的问题,有了缓冲后,Nginx 代理可暂存后端的响应,然后按需供给数据给客户端。
# 启用或禁用服务端的响应缓冲
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
# 设置从服务端读取第一部分响应所使用的缓冲区大小。
# 这部分通常包含了一个小的响应头。
# 该参数始终都是生效的,
# 并不受 proxy_buffering 的影响。
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
# 设置从服务端读取响应所使用的缓冲区个数和大小
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
# 设置当还未从服务端读取到完整响应时,
# 允许给客户端发送响应的缓冲区大小(进入 busy 状态)。
# 缓冲区进入 busy 状态后将无法从服务端读取响应并写入。
Syntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k;
Context: http, server, location
# 设置磁盘临时文件的位置
Syntax: proxy_temp_path path [level1 [level2 [level3]]];
Default: proxy_temp_path proxy_temp;
Context: http, server, location
# 设置磁盘临时文件的最大空间
Syntax: proxy_max_temp_file_size size;
Default: proxy_max_temp_file_size 1024m;
Context: http, server, location
# 设置每次写入磁盘临时文件的大小。
Syntax: proxy_temp_file_write_size size;
Default: proxy_temp_file_write_size 8k|16k;
Context: http, server, location当开启代理缓冲区时,nginx 会尽快的从服务端读取响应并缓存在内存分配的缓冲区中。代理缓冲区的大小由 proxy_buffer_size 和 proxy_buffers 参数指定。
当响应大小超出内存缓冲区时,一部分响应体可以保存在磁盘临时文件中。磁盘临时文件的大小由 proxy_max_temp_file_size 和 proxy_temp_file_write_size 参数指定。
所有的缓冲区参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的缓冲区。
http {
# ... ...
server {
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
proxy_busy_buffers_size 16k;
proxy_max_temp_file_size 1024m;
proxy_temp_file_write_size 16k;
# ... ...
}
}二、服务端缓存
当我们要构建一个高性能的 Web 应用时,服务端缓存扮演着关键的角色。Nginx 的 proxy_cache 模块提供了强大且灵活的缓存功能,对于优化网站性能,减轻服务端的负担,提高响应速度具有显著的效果。
# 设置缓存的路径和其他参数,缓存数据存储在文件中。
Syntax: proxy_cache_path path [levels=levels]
[use_temp_path=on|off] keys_zone=name:size
[inactive=time] [max_size=size]
[min_free=size] [manager_files=number]
[manager_sleep=time] [manager_threshold=time]
[loader_files=number] [loader_sleep=time]
[loader_threshold=time] [purger=on|off]
[purger_files=number] [purger_sleep=time]
[purger_threshold=time];
Default: —
Context: http- path:缓存文件目录。缓存文件名是 proxy_cache_key 的 MD5 值,如:/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
- levels:缓存文件目录的层次结构,如 levels=1:2,表示有两级子目录,第一个目录名取 md5 值的倒数第一个值,第二个目录名取 md5 值的倒数第 2 和 3 个值;层次结构最多 3 层,每层目录名长度为 1 或 2。
- keys_zone:定义共享内存区的名称和大小。所有 key 和有关数据的信息都存储在共享内存区域中。1MB 的区域可以存储大约 8000 个 key。
- inactive:在该参数指定的时间内未访问的缓存数据将从缓存中删除。默认10分钟。
- max_size:缓存区最大尺寸。当超过大小或没有足够的可用空间时,它会删除最近使用最少的数据。
# 开启或关闭代理缓存功能,并指定共享内存区域。
# 共享内存区域在 proxy_cache_path 中定义。
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
# 定义缓存的键,用于区分不同的缓存项。
Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
# 设置对于哪些 HTTP Method 开启缓存。
Syntax: proxy_cache_methods GET | HEAD | POST ...;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
# 定义不同 HTTP 响应码的缓存有效期。
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
# 设置资源被请求多少次后被缓存
Syntax: proxy_cache_min_uses number;
Default: proxy_cache_min_uses 1;
Context: http, server, location
# 哪些情况下可以使用过时的缓存响应
# 即指定服务端特定异常时使用缓存返回给客户端
Syntax: proxy_cache_use_stale error | timeout
| invalid_header | updating | http_500
| http_502 | http_503 | http_504
| http_403 | http_404 | http_429 | off ...;
Default: proxy_cache_use_stale off;
Context: http, server, location
# 定义响应不会保存到缓存的条件
Syntax: proxy_no_cache string ...;
Default: —
Context: http, server, location
# 定义不从缓存中获取响应的条件
Syntax: proxy_cache_bypass string ...;
Default: —
Context: http, server, locationNginx 缓存配置示例:
http{
proxy_cache_path /opt/nginx/cache
levels=1:2
keys_zone=liwy_cache:10m
inactive=1d
max_size=10g;
upstream liwy_server {
server 192.168.2.13:8081;
server 192.168.2.13:8082;
}
server {
listen 80;
server_name www.liwy-nginx.com;
location / {
proxy_cache liwy_cache;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_min_uses 3;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
# 响应头中添加缓存是否命中的状态,便于调试
add_header X-Proxy-Cache $upstream_cache_status;
proxy_pass http://liwy_server;
}
}
}相关推荐
- 香蕉加速器(香蕉加速器怎么样)
-
OPPO系统自带的游戏加速器是HyperBoost据OPPO介绍,HyperBoost是OPPO花了三年时间自主研发的一项技术,由系统引擎、应用引擎和游戏引擎三部分组成,能够实现全场景系统,提升...
- 小说下载txt电子书免费全本下载
-
因为违规了。久久小说网的许多小说,都没有作者的授权而且他的名声太大了,被人给投诉然后违规追究了,就关闭了这个网站。所以平时看小说的时候,尽量到正版的网站去看,一些大网站,或者是一些小网站都可以去瞅一瞅...
- 无需wifi的手机游戏(无需wifi的手机游戏大全)
-
1最好玩的游戏不一定需要依赖wifi。2原因在于现在的游戏越来越注重玩家的体验和游戏性,不少游戏已经把单机玩法和多人联机完美融合在一起,让单机游戏也同样具有了和多人游戏一样的可玩性。此外,不少游戏...
- 手写输入法查字(手写输入法查字怎么设置)
-
您好,查字手写输入是指利用电子设备或者智能手机等设备,通过手写输入汉字进行文字输入的方式。用户可以直接用手指或者专用的手写笔在设备的屏幕上书写汉字,设备会将手写的字迹识别成文字并进行输入。这种输入方式...
- office哪个版本最好用(office哪个版本好一点)
-
Office办公软件由微软公司开发,截至目前为止,最新版本为Microsoft365(Office365)。然而,“最好用”的版本取决于您的具体需求、预算和个人偏好。以下是一些不同版本及其特点的概...
- 大智慧炒股软件免费版(大智慧炒股软件手机版下载安装)
-
你是不是点到里面的收费行情了,有Level-2行情数据的肯定要收费的这几种都可以提供一般的股票行情、交易功能。特点方面,同花顺不怎么好上手,普及程度不高。大智慧经典版可以查询主力资金。钱龙旗舰版是界面...
- 短信验证码(短信验证码平台app)
-
短信验证码可以通过以下步骤来获取和使用:明确结论:获取短信验证码需要先输入手机号码,并且会在短信中收到验证码。解释原因:短信验证码是一种验证身份的方式,用于确认用户提供的手机号是否有效,以及确保用户是...
- 下载一个微信2(下载一个微信号)
-
首先打开手机里面的应用商店下载安装一个微信APP,然后分别用你的2个手机号注册微信或已经注册的登陆微信就可以了,这里你可以一个微信APP上分别切换不同微信号登陆使用,不过这个有点不方便使用,接下来的办...
- 视频格式转换器安卓版(视频格式转换器手机软件)
-
没有。可以利用电脑来转换。所需工具:格式工厂步骤:打开格式工厂,第一个界面就是视频转换的了!会看到可以转换成有很多种格式的!那就选择需要转换的格式。选择转换成MP4格式,添加完成之后直接点击“点击开始...
- 12306购票最简单方法(登录12306购票)
-
要使用铁路12306进行买票需选择出发地点以及目的地,勾选车票类型后,选择查询车票,最后提交订单方可买票,具体操作步骤如下:轻点右侧地址位置选择目的地轻点右侧地址位置选择目的地,回到铁路12306首页...
- 下载手机卫士(下载手机卫士官方版)
-
360手机卫士苹果版来自奇虎360推出的一款iPhone手机管理软件,360手机卫士苹果版推为iOS用户提供专业、完善和高效的移动设备管理服务,360手机卫士手机版可以实现流量监控、电池管家、隐私空间...
- 免费破解软件下载网站(免费破解版软件)
-
可以用腾讯手机管家的小火箭,它的功能很好用。安装完成以后,手机屏幕上就有那个加速圈--小火箭。使用小火箭加速平均提升手机速度35%。按住小火箭移到最下方,释放升空,即可轻松清理多余后台进程,释放手机内...
- 应用管家下载(应用市场官方正版下载安装)
-
1、在手机桌面找到腾讯手机管家,点击打开。2、找到右上角的头像,点击进入个人界面。3、点击右上角的齿轮图标,点击进入设置界面。4、找到安全检测,点击进去。5、找到屏幕下方的恶意网址拦截6、这样就把网址...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
16949认证费用是多少(16949审核员太难考了)
-
linux软件(linux软件图标)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
