百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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, location

Nginx 缓存配置示例:

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、这样就把网址...

取消回复欢迎 发表评论: