Nginx 缓存系统 proxy_cache工作原理解析

 更新时间:2024年12月12日 10:42:54   作者:学堂在线  
Nginx 的 proxy_cache 模块允许 Nginx 作为反向代理服务器时缓存后端服务器的响应,本文给大家介绍Nginx 缓存系统 proxy_cache的工作原理,感兴趣的朋友跟随小编一起看看吧

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

Nginx 的 proxy_cache 模块是 Nginx 代理功能的一部分,它允许 Nginx 缓存来自后端服务器的响应,以便在后续的请求中可以直接从缓存中提供内容,而无需再次向后端服务器请求。这种机制可以显著提高静态内容的响应速度,减轻后端服务器的负载,并提高网站的可扩展性。

功能特点

减少后端负载:通过缓存静态内容,减少对后端服务器的请求,降低负载。
提高响应速度:缓存的内容可以快速响应后续相同的请求,提高用户体验。
灵活的缓存策略:可以根据不同的 HTTP 响应状态码设置不同的缓存有效期。
缓存控制:提供了丰富的指令来控制哪些请求可以被缓存,哪些请求应该绕过缓存。

proxy_cache工作原理

Nginx 的 proxy_cache 模块允许 Nginx 作为反向代理服务器时缓存后端服务器的响应。以下是 proxy_cache 模块的工作原理:

  • 请求到达:客户端向 Nginx 发送请求。
  • 缓存查找:Nginx 首先检查请求是否命中缓存。这是通过查找共享内存中的缓存键(由 proxy_cache_key 定义)来完成的。
  • 缓存命中:如果请求命中缓存,Nginx 直接从缓存中读取响应并返回给客户端。
  • 缓存未命中:如果请求未命中缓存,Nginx 将请求转发到后端服务器。
  • 后端响应:后端服务器处理请求并返回响应给 Nginx。
  • 缓存存储:Nginx 将后端服务器的响应存储在本地文件系统中,同时在共享内存中更新缓存键和元数据。
  • 返回响应:Nginx 将后端服务器的响应返回给客户端,并根据 proxy_cache_valid 指令设置的规则决定缓存时间。

示意图

+--------+     +---------+     +-----------+     +----------+
| 客户端  | --> |   Nginx  | --> | 后端服务器 | --> |   Nginx   |
|         |--> |  (查找缓存) |     |           | <-- |  (返回    |
|         |    |  (缓存命中) |     |           |     |  响应)   |
|         |    |  (缓存未命中) |     |           |     +----------+
+---+----+    +---------+     +-----+---+---+
    |                |              |
    |                |              | (缓存存储)
    |                |              |
    +----------------+--------------+

配置文件示例

# 定义 http 块,Nginx 的主要配置都在这个块内
http {
    # 设置缓存路径及其参数
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=7d use_temp_path=off;
    # levels 定义缓存目录的层级,1:2 表示两层
    # keys_zone 定义缓存键和大小,my_cache:10m 表示名称为 my_cache,大小为 10MB
    # max_size 控制缓存区域的最大磁盘空间,这里设置为 10GB
    # inactive 定义缓存数据在指定时间内未被访问则自动清除的时间,这里设置为 7 天
    # use_temp_path 设置为 off,表示缓存文件直接写到 cache 中而不使用 temp_path,避免文件拷贝导致影响性能
    # 定义 server 块,用于监听 80 端口并处理对 example.com 的请求
    server {
        # 监听 80 端口
        listen 80;
        # 设置服务器名,这里为 example.com
        server_name example.com;
        # 定义 location 块,用于处理根路径下的请求
        location / {
            # 将请求代理到后端服务器,这里为 http://backend
            proxy_pass http://backend;
            # 启用缓存,并指定缓存区域为 my_cache
            proxy_cache my_cache;
            # 设置缓存键,这里包括请求方法、主机和请求 URI
            proxy_cache_key "$request_method$host$request_uri";
            # 设置不同 HTTP 状态码的缓存有效期,200 和 302 状态码的响应缓存 10 分钟
            proxy_cache_valid 200 302 10m;
            # 设置 404 状态码的响应缓存 1 分钟
            proxy_cache_valid 404 1m;
            # 定义条件跳过缓存,如果请求中包含 no_cache 参数或特定的 HTTP 头,则不使用缓存
            proxy_cache_bypass $cookie_no_cache $arg_no_cache$http_pragma$http_authorization;
            # 定义条件不缓存响应,如果请求中包含 no_cache 参数或特定的 HTTP 头,则不缓存响应
            proxy_no_cache $cookie_no_cache $arg_no_cache$http_pragma$http_authorization;
        }
    }
}

这段配置注释详细解释了 Nginx 配置文件中的每个指令和它们的参数,以便更好地理解配置文件的作用和行为。

参数详尽说明

  • proxy_cache_path:定义缓存文件存储路径和参数。
    • levels:定义缓存目录的层级。
    • keys_zone:定义共享内存中用于缓存键的区域。
    • max_size:定义缓存的最大磁盘空间。
    • inactive:定义缓存数据在指定时间内未被访问则自动清除的时间。
    • use_temp_path:定义是否使用临时路径。
  • proxy_cache:启用缓存并指定缓存区域。
  • proxy_cache_key:定义缓存的键,用于识别缓存数据。
  • proxy_cache_valid:为不同的响应状态码设置缓存时间。

proxy_cache_bypassproxy_no_cache:定义条件跳过缓存和避免缓存特定响应。

性能优化方案

  • 缓存策略优化:合理配置 proxy_cache_valid 指令,为不同的响应状态码设置不同的缓存时间。
  • 缓存空间管理:通过 proxy_cache_path 指令合理设置缓存空间的大小和有效期。
  • 缓存键优化:使用 proxy_cache_key 指令定制缓存键,减少缓存冲突,提高缓存命中率。
  • 缓存锁定:通过 proxy_cache_lockproxy_cache_lock_timeout 指令,控制同时对同一缓存项的请求,减少对后端的并发请求。
  • 使用 CDN:结合 CDN 使用 Nginx 缓存,可以将静态资源缓存到离用户更近的节点。
  • 监控和调整:定期监控缓存命中率和响应时间,根据实际情况调整缓存配置。

总结

通过以上配置和优化方案,可以有效地管理 Nginx 的缓存行为,提高网站的性能,同时保证敏感或动态数据的实时性和安全性。

到此这篇关于Nginx 缓存系统 proxy_cache详解的文章就介绍到这了,更多相关Nginx 缓存系统 proxy_cache内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx proxy、rewrite、alias配置过程

    Nginx proxy、rewrite、alias配置过程

    这篇文章主要介绍了Nginx proxy、rewrite、alias配置过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Debian系统下为PHP程序配置Nginx服务器的基本教程

    Debian系统下为PHP程序配置Nginx服务器的基本教程

    这篇文章主要介绍了Debian系统下为PHP程序配置Nginx服务器的基本教程,这里使用到了FastCGI和php-fpm,需要的朋友可以参考下
    2015-12-12
  • Nginx配置Prometheus监控的实现

    Nginx配置Prometheus监控的实现

    本文主要介绍了Nginx配置Prometheus监控的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 一文了解nginx中的signal处理机制

    一文了解nginx中的signal处理机制

    nginx利用信号处理机制,可以捕获和处理各种信号,本文主要介绍了nginx中的signal处理机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • 详解Nginx 动态 DNS 反向代理的几种写法

    详解Nginx 动态 DNS 反向代理的几种写法

    这篇文章主要介绍了详解Nginx 动态 DNS 反向代理的几种写法,详细的介绍了Nginx 动态 DNS 反向代理的4种方法,非常具有实用价值,需要的朋友可以参考下
    2018-05-05
  • Nginx上配置Basic Authorization登录认服务证的教程

    Nginx上配置Basic Authorization登录认服务证的教程

    现在我们所使用的包括社交网络API等开放平台授权获得用户的用户名和密码一般有两种认证方式,一种是Basic Auth,一种是OAuth,这里我们就来看一下Nginx上配置Basic Authorization登录认服务证的教程
    2016-06-06
  • Nginx学习笔记之事件驱动框架处理流程

    Nginx学习笔记之事件驱动框架处理流程

    Nginx对请求的处理是通过事件触发的,模块作为事件消费者,只能被事件收集、分发器调用。在Nginx中,接收到一个请求时,不会产生一个单独的进程来处理该请求,而是由事件收集、分发器(进程)调用某个模块,由模块处理请求,处理完后再返回到事件收集、分发器
    2014-07-07
  • nginx的error_page配置选项详解

    nginx的error_page配置选项详解

    这篇文章主要介绍了nginx的error_page配置选项,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-10-10
  • 为nginx配置好看的错误提示页面

    为nginx配置好看的错误提示页面

    文章介绍了如何更换nginx默认的错误页面,作者首先提到了一些可借鉴的设计样本,并给出了一些可直接使用的模板链接,文章详细描述了在Windows和Linux系统上如何替换错误页面,包括修改nginx配置文件,如果更改后没有生效,作者也提供了解决方法
    2025-10-10
  • nginx负载均衡配置,宕机自动切换方式

    nginx负载均衡配置,宕机自动切换方式

    这篇文章主要介绍了nginx负载均衡配置,宕机自动切换方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论