Nginx实现清除缓存内容

 更新时间:2024年08月07日 10:51:28   作者:Hi无涯教程  
NGINX可以从缓存中删除旧的和过期的缓存文件,本文主要介绍了Nginx实现清除缓存内容,具有一定的参考价值,感兴趣的可以了解一下

NGINX可以从缓存中删除旧的和过期的缓存文件。删除过期的缓存内容是强制性的,以防止同时提供新旧版本的网页。收到包含自定义HTTP标头或HTTP PURGE方法的特殊"purge"请求后,将清除缓存。

配置缓存清除

让我们设置一个配置,该配置用于识别使用HTTP PURGE方法的请求并删除匹配的URL。

1.在http {}上下文中,添加一个新变量,例如$purge_method,该变量取决于$request_method变量:

http {
    ...
    map $request_method $purge_method {
        PURGE 1;
        default 0;
    }
}

2.在配置缓存的location{}块中,添加proxy_cache_purge指令以指定用于缓存清除请求的条件。在我们的示例中,它是在上面的步骤中配置的$ purge_method:

server {
    listen      80;
    server_name www.example.com;

    location/{
        proxy_pass  https://localhost:8002;
        proxy_cache mycache;

        proxy_cache_purge $purge_method;
    }
}

发送清除命令

当proxy_cache_purge指令的配置完成时,我们需要发送一个特殊的cache-purge请求来清除缓存。我们可以使用一系列工具发出清除请求,包括以下示例中的curl命令:

$ curl -X PURGE -D - "https://www.example.com/*"
HTTP/1.1 204 No Content
Server: nginx/1.15.0
Date: Sat, 19 May 2018 16:33:04 GMT
Connection: keep-alive

在上面的示例中,将清除具有由星号通配符指定的公共URL部分的资源。但是,此类高速缓存条目不会完全从高速缓存中删除:它们会一直保留在磁盘上,直到因不活动而被删除,或者被高速缓存清除程序(已将proxy_cache_path的purger参数启用)删除,或者被客户端尝试访问它们。

限制清除命令访问

我们建议您限制允许发送缓存清除请求的IP地址数量:

geo $purge_allowed {
   default         0;  # deny from other
   10.0.0.1        1;  # allow from localhost
   192.168.0.0/24  1;  # allow from 10.0.0.0/24
}

map $request_method $purge_method {
   PURGE   $purge_allowed;
   default 0;
}

在上面的示例中,NGINX检查请求中是否使用了PURGE方法,如果是,则分析客户端IP地址。如果IP地址已列入白名单,则$ purge_method设置为$ purge_allowed:1允许清除,0拒绝清除。

完全删除文件

要完全删除与星号(*)匹配的缓存文件,该过程将永久性地遍历所有缓存条目,并删除与通配符匹配的条目。在http{}上下文中将purger参数包括到proxy_cache_path指令中:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;

缓存清除配置示例

http {
    ...
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;

    map $request_method $purge_method {
        PURGE 1;
        default 0;
    }

    server {
        listen      80;
        server_name www.example.com;

        location/{
            proxy_pass        https://localhost:8002;
            proxy_cache       mycache;
            proxy_cache_purge $purge_method;
        }
    }

    geo $purge_allowed {
       default         0;
       10.0.0.1        1;
       192.168.0.0/24  1;
    }

    map $request_method $purge_method {
       PURGE   $purge_allowed;
       default 0;
    }
}

Byte-Range缓存

有时,初始高速缓存填充操作会花费很长时间,尤其是对于大型文件。例如,当视频文件开始下载以满足部分文件的初始请求时,后续请求必须等待整个文件被下载并放入缓存中。

在Nginx中,可以缓存这样的范围请求,并使用"Cache Slice"模块逐渐填充缓存,该模块将文件分成较小的"slices"。每个范围请求都选择覆盖所请求范围的特定切片,如果仍未缓存该范围,则将其放入缓存。这些切片的所有其他请求都从缓存中获取数据。

启用byte-range缓存:

  • 首先,确保使用缓存切片模块编译了NGINX。
  • 使用slice指令定义切片的大小:
location/{
    slice  1m;
}
  • 选择切片的大小,以使切片下载更快。如果大小太小,则内存使用可能会过多,并且会打开大量文件描述符。如果大小很大,则处理请求可能会导致延迟。将$slice_range变量添加到缓存键:
proxy_cache_key $uri$is_args$args$slice_range;
  • 启用具有206状态代码的响应缓存:
proxy_cache_valid 200 206 1h;
  • 通过在Range标头字段中设置变量(即$ slice_range),将范围请求传递到代理服务器:
proxy_set_header  Range $slice_range;

这里是完整的配置:

location/{
    slice             1m;
    proxy_cache       cache;
    proxy_cache_key   $uri$is_args$args$slice_range;
    proxy_set_header  Range $slice_range;
    proxy_cache_valid 200 206 1h;
    proxy_pass        http://localhost:8000;
}

请注意,如果启用了切片缓存,则不得更改初始文件。

组合配置示例

http {
    ...
    proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 
                     loader_files=200 max_size=200m;

    server {
        listen 8080;
        proxy_cache mycache;

        location/{
            proxy_pass http://backend1;
        }

        location /some/path {
            proxy_pass http://backend2;
            proxy_cache_valid any 1m;
            proxy_cache_min_uses 3;
            proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
        }
    }
}

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

相关文章

  • 详解Nginx 虚拟主机配置的三种方式(基于端口)

    详解Nginx 虚拟主机配置的三种方式(基于端口)

    Nginx配置虚拟主机支持3种方式主要有基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置。本篇文章主要介绍了基于端口的实现,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Nginx中root与alias区别讲解

    Nginx中root与alias区别讲解

    这篇文章主要介绍了Nginx中root与alias区别 ,通过两个小例子来学习root和alias的区别,对Nginx中root与alias区别感兴趣的朋友跟随小编一起看看吧
    2022-08-08
  • nginx location指令(匹配顺序匹配冲突)实战示例详解

    nginx location指令(匹配顺序匹配冲突)实战示例详解

    这篇文章主要介绍了nginx location指令(实战示例匹配顺序匹配冲突)详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Nginx Rewrite模块应用的几种场景

    Nginx Rewrite模块应用的几种场景

    这篇文章主要介绍了Nginx Rewrite模块应用的几种场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • nginx反向代理踩坑实战记录(容器方式)

    nginx反向代理踩坑实战记录(容器方式)

    Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,下面这篇文章主要给大家介绍了关于nginx反向代理踩坑(容器方式)的相关资料,需要的朋友可以参考下
    2022-04-04
  • nginx配置history模式的使用小结

    nginx配置history模式的使用小结

    本文详细介绍了在Nginx服务器中配置history模式的方法,具体通过使用try_files指令来实现,这种配置方式主要适用于单页应用,可以确保无论访问什么URL,服务器总是返回同一个HTML文件,然后由前端路由来处理不同的页面显示
    2024-10-10
  • nginx中http-sysguard模块

    nginx中http-sysguard模块

    本文主要介绍了nginx中http-sysguard模块,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • nginx添加http_ssl_module并且配置域名指定端口的操作方法

    nginx添加http_ssl_module并且配置域名指定端口的操作方法

    这篇文章主要介绍了nginx添加http_ssl_module并且配置域名指定端口的操作方法,文末附带linux下防火墙和开放端口,需要的朋友可以参考下
    2023-11-11
  • 详解Nginx 13: Permission denied 解决方案

    详解Nginx 13: Permission denied 解决方案

    这篇文章主要介绍了详解Nginx 13: Permission denied 解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • nginx刷新页面出现404解决方案(亲测有效)

    nginx刷新页面出现404解决方案(亲测有效)

    本文主要介绍了nginx刷新页面出现404解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论