您的位置:

nginx缓存配置详解

一、nginx缓存基础

在高并发、大数据量的情况下,让网站的访问速度变快是各大网站运营商必须面对的问题。而Nginx正是为了解决这个问题而生。Nginx提供了一套缓存模块,用于存储静态页面或动静分离的页面,加速访问并减轻服务器的负担。

二、nginx缓存与浏览器缓存

在缓存系统中,nginx缓存和浏览器缓存是两个不同的缓存。Nginx缓存是由服务器端负责缓存网页,浏览器缓存则由客户端负责存储缓存。

Nginx缓存和浏览器缓存在一定程度上是可以互相衔接的,如果某些静态资源在Nginx缓存里已经存在,如果设置了浏览器缓存功能,那么之后在浏览器里访问这个静态资源的时候就直接使用缓存,减轻服务器的负担。

三、nginx配置不缓存

如果不希望Nginx缓存某些请求,可以使用“proxy_cache_bypass”指令。这个指令允许你自定义字段,如果请求的URL匹配该字段,缓存将被忽略。

location / {
    proxy_cache_bypass $http_pragma;
    proxy_cache_bypass $http_authorization;
}

四、nginx缓存清理的方法

当网站内容发生改变时,需要清理缓存以保证用户能看到最新的页面。清除Nginx缓存的方式有两种:

  • 删除指定URL的缓存
  • 删除全部缓存

删除指定URL的缓存可以使用“proxy_cache_path”指令,将路径后面加上需要删除的URL即可。

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
location / {
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 60m;
}
location /purge_cache {
    proxy_cache_bypass 1;
    proxy_cache_revalidate on;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    add_header Content-Type 'text/html; charset=utf-8';
    echo "Purged.";
}

删除全部缓存可以使用Nginx的缓存清除命令

nginx -s reload
nginx -s stop

五、nginx怎么配置缓存

缓存是通过location指令指定的,下面是一个基本的配置示例:

proxy_cache_path /data/nginx/cache keys_zone=cache:10m;
server {
  listen 80;
  server_name localhost;
  location / {
    proxy_cache cache;
    proxy_pass $scheme://localhost:8000;
    proxy_cache_min_uses 2;
    proxy_cache_lock on;
    proxy_cache_valid 200 10m;
  }
}

以上配置将使用“/data/nginx/cache”来缓存,将其命名为“cache”,缓存期限为10分钟,如果一段时间内URL没有被访问,则会被锁定。此外,只有被访问2次或更多次的页面才会被缓存。

六、nginx缓存配置详解

以上是一个基本的nginx缓存配置示例,但是对于不同的网站来说,缓存策略不尽相同,下面将对nginx的缓存配置进行详细讲解:

  • 设置缓存路径与缓存键值
  • proxy_cache_path用于指定缓存的存放路径以及缓存键值。缓存键值由$http_host, $request_uri, $scheme等变量组成,这样可以保证缓存键值唯一。

        proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
        
  • 设置缓存的存活时间
  • proxy_cache_valid用于设置缓存的存活时间,可以设置多个HTTP状态码及其对应的时间。如果某个状态码没有定义时间,则使用默认的时间。

        proxy_cache_valid 200 60m;
        proxy_cache_valid 404 1m;
        proxy_cache_valid 500 10s;
        
  • 不缓存指定的HTTP状态码
  • proxy_cache_bypass用于定义一个控制缓存的变量,当值为1时,不缓存某些http状态码。

        proxy_cache_bypass $http_pragma;
        proxy_cache_bypass $http_authorization;
        
  • 强制刷新缓存
  • proxy_cache_revalidate用于在下一次请求时强制刷新缓存。

        proxy_cache_revalidate on;
        
  • 缓存死亡时删除缓存
  • 当缓存过期或不再使用时,应该将其删除,以释放服务器上的磁盘空间。这可以通过在Nginx中设置缓存活动时长来实现。

        proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
        

七、nginx缓存功能的作用

Nginx缓存功能的主要作用是减轻服务器的负担,快速响应静态页面和动静分离的页面,加快网站的访问速度,并提高用户的体验。同时还可以减少带宽费用、降低服务器负载,提升系统的稳定性以及保障网站的安全性。