编程技术分享平台

网站首页 > 技术教程 正文

【Nginx基础】Nginx缓存使用案例(nginx做缓存)

xnh888 2024-09-28 03:03:26 技术教程 45 ℃ 0 评论

Nginx缓存是一种将Web页面或资源保存在内存或磁盘中,以便下次请求时可以快速返回缓存内容的机制。Nginx缓存是通过代理服务器对后端Web服务器进行代理,将缓存内容存储在代理服务器的内存或磁盘中,以便后续请求可以快速响应。

Nginx提供了两种缓存方式:proxy缓存和fastcgi缓存。proxy缓存适用于代理后端的HTTP服务器,如Apache、Tomcat等,而fastcgi缓存则适用于代理FastCGI进程的Web应用程序,如PHP、Python等。

以下是使用Nginx proxy缓存的详细步骤:

  1. 在nginx.conf中配置缓存路径和缓存区大小:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;

其中,/var/cache/nginx是缓存路径,levels=1:2表示在缓存路径下创建两级子目录,keys_zone=my_cache:10m表示为缓存分配10MB的共享内存区域,inactive=60m表示缓存时间为60分钟。

  1. 在server配置中启用缓存,并设置缓存的有效期和缓存键值:
proxy_cache my_cache;
proxy_cache_valid 200 60m;
proxy_cache_key "$scheme$request_method$host$request_uri";

其中,proxy_cache my_cache表示启用名为my_cache的缓存,proxy_cache_valid 200 60m表示缓存200响应状态码的内容60分钟,proxy_cache_key "$scheme$request_method$host$request_uri"表示缓存的键值为请求的协议、方法、主机和URI。

  1. 配置代理服务器将请求转发到后端Web服务器:
location / {
    proxy_pass http://backend_server;
    proxy_cache_bypass $http_pragma;
    proxy_cache_revalidate on;
    proxy_cache_min_uses 3;
    proxy_cache_lock on;
    proxy_cache_methods GET HEAD;
    add_header X-Cache $upstream_cache_status;
}

其中,proxy_pass http://backend_server表示将请求转发到名为backend_server的后端Web服务器,proxy_cache_bypass $http_pragma表示忽略HTTP头部的Pragma属性,proxy_cache_revalidate on表示在缓存过期后,向后端服务器请求新的内容进行验证,proxy_cache_min_uses 3表示当缓存内容被访问3次后,才会被缓存,proxy_cache_lock on表示启用缓存锁定,避免多个请求同时更新缓存,proxy_cache_methods GET HEAD表示仅对GET和HEAD请求进行缓存,add_header X-Cache $upstream_cache_status表示向HTTP头部添加缓存状态信息。

除了上述基本配置外,Nginx还提供了许多其他的缓存控制指令和配置项,例如proxy_cache_key_zone、proxy_cache_purge等,可以根据实际需要进行配置。

例如,假设有一个名为example.com的网站,需要缓存其所有页面和静态资源,可以按照以下步骤进行配置:

  1. 在nginx.conf中配置缓存路径和缓存区大小:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
  1. 在server配置中启用缓存,并设置缓存的有效期和缓存键值:
server {
    listen 80;
    server_name example.com;
    
    root /var/www/html;
    
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
        proxy_cache my_cache;
        proxy_cache_valid 200 60m;
        proxy_cache_key "$scheme$request_method$host$request_uri";
    }
    
    location ~ \.(php|html|css|js|png|jpg|gif|svg)$ {
        try_files $uri =404;
        proxy_cache my_cache;
        proxy_cache_valid 200 60m;
        proxy_cache_key "$scheme$request_method$host$request_uri";
    }
    
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

其中,location /表示缓存网站的所有页面,location ~ .(php|html|css|js|png|jpg|gif|svg)$表示缓存网站的所有静态资源,例如HTML、CSS、JavaScript、图片等,location ~ .php$表示使用PHP-FPM处理PHP脚本。在这些location中,都添加了proxy_cache、proxy_cache_valid和proxy_cache_key指令,启用缓存并设置缓存的有效期和键值。

  1. 配置代理服务器将请求转发到后端Web服务器:
location / {
    proxy_pass http://backend_server;
    proxy_cache_bypass $http_pragma;
    proxy_cache_revalidate on;
    proxy_cache_min_uses 3;
    proxy_cache_lock on;
    proxy_cache_methods GET HEAD;
    add_header X-Cache $upstream_cache_status;
}

其中,proxy_pass http://backend_server表示将请求转发到名为backend_server的后端Web服务器,其他指令同上述基本配置。

这样,当有用户请求example.com网站的页面或静态资源时,Nginx会检查缓存中是否存在相应的内容,如果存在,则直接返回缓存内容;如果不存在,则转发请求到后端Web服务器,并将响应内容缓存起来。缓存的有效期为60分钟,在此期间,再次请求相同的页面或资源时,Nginx会直接返回缓存内容,提高了网站的响应速度和用户体验。

需要注意的是,缓存也可能会导致网站内容更新不及时的问题,如果网站内容经常更新,建议将缓存时间设置较短,或使用缓存刷新功能,及时更新缓存内容。

缓存刷新功能可以手动刷新缓存或者在特定条件下自动刷新缓存,以确保缓存内容能够及时更新。在Nginx中,有以下两种方式实现缓存刷新:

  1. 手动刷新缓存

手动刷新缓存的方法是通过发送特定的HTTP请求来刷新缓存。可以使用curl工具发送一个HTTP PURGE请求来刷新缓存,如下所示:

curl -X PURGE http://example.com/path/to/resource

上述命令会发送一个HTTP PURGE请求到http://example.com/path/to/resource,使得Nginx将此URL对应的缓存项从缓存中移除。如果该URL对应的内容在后续的请求中被访问,则会重新生成缓存。

  1. 自动刷新缓存

自动刷新缓存的方法是在特定条件下自动触发缓存刷新。常见的条件包括:

  • 定时刷新:定时更新缓存,确保内容能够及时更新。
  • 监控文件变化:当监控到指定的文件有变化时,自动刷新缓存。
  • 监控数据库变化:当监控到指定的数据库表有变化时,自动刷新缓存。

下面是一个使用定时刷新的例子,假设需要每隔10分钟自动刷新缓存,可以按照以下步骤进行配置:

  1. 安装crontab工具,用于定时执行脚本:
sudo apt-get install cron
  1. 创建一个shell脚本,用于发送HTTP PURGE请求刷新缓存:
#!/bin/bash
curl -X PURGE http://example.com

其中,http://example.com是需要刷新缓存的URL,可以是网站首页或者其他需要缓存的页面或资源。

  1. 将脚本设置为可执行文件:
chmod +x /path/to/script.sh
  1. 创建一个cron任务,定时执行脚本:
crontab -e

然后添加以下内容:

*/10 * * * * /path/to/script.sh

其中,*/10 * * * *表示每隔10分钟执行一次脚本。

这样,每隔10分钟就会自动发送一个HTTP PURGE请求来刷新缓存,确保缓存内容能够及时更新。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表