网站首页 > 技术教程 正文
Nginx缓存是一种将Web页面或资源保存在内存或磁盘中,以便下次请求时可以快速返回缓存内容的机制。Nginx缓存是通过代理服务器对后端Web服务器进行代理,将缓存内容存储在代理服务器的内存或磁盘中,以便后续请求可以快速响应。
Nginx提供了两种缓存方式:proxy缓存和fastcgi缓存。proxy缓存适用于代理后端的HTTP服务器,如Apache、Tomcat等,而fastcgi缓存则适用于代理FastCGI进程的Web应用程序,如PHP、Python等。
以下是使用Nginx proxy缓存的详细步骤:
- 在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分钟。
- 在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。
- 配置代理服务器将请求转发到后端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的网站,需要缓存其所有页面和静态资源,可以按照以下步骤进行配置:
- 在nginx.conf中配置缓存路径和缓存区大小:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
- 在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指令,启用缓存并设置缓存的有效期和键值。
- 配置代理服务器将请求转发到后端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中,有以下两种方式实现缓存刷新:
- 手动刷新缓存
手动刷新缓存的方法是通过发送特定的HTTP请求来刷新缓存。可以使用curl工具发送一个HTTP PURGE请求来刷新缓存,如下所示:
curl -X PURGE http://example.com/path/to/resource
上述命令会发送一个HTTP PURGE请求到http://example.com/path/to/resource,使得Nginx将此URL对应的缓存项从缓存中移除。如果该URL对应的内容在后续的请求中被访问,则会重新生成缓存。
- 自动刷新缓存
自动刷新缓存的方法是在特定条件下自动触发缓存刷新。常见的条件包括:
- 定时刷新:定时更新缓存,确保内容能够及时更新。
- 监控文件变化:当监控到指定的文件有变化时,自动刷新缓存。
- 监控数据库变化:当监控到指定的数据库表有变化时,自动刷新缓存。
下面是一个使用定时刷新的例子,假设需要每隔10分钟自动刷新缓存,可以按照以下步骤进行配置:
- 安装crontab工具,用于定时执行脚本:
sudo apt-get install cron
- 创建一个shell脚本,用于发送HTTP PURGE请求刷新缓存:
#!/bin/bash
curl -X PURGE http://example.com
其中,http://example.com是需要刷新缓存的URL,可以是网站首页或者其他需要缓存的页面或资源。
- 将脚本设置为可执行文件:
chmod +x /path/to/script.sh
- 创建一个cron任务,定时执行脚本:
crontab -e
然后添加以下内容:
*/10 * * * * /path/to/script.sh
其中,*/10 * * * *表示每隔10分钟执行一次脚本。
这样,每隔10分钟就会自动发送一个HTTP PURGE请求来刷新缓存,确保缓存内容能够及时更新。
猜你喜欢
- 2024-10-13 Nginx 假死的原因以及解决方法(nginx故障)
- 2024-10-13 Nginx负载均衡出现扩容缩容如何减轻缓存失效的问题?
- 2024-09-28 Nginx 问题以及对应的解决方案(nginx常见问题)
- 2024-09-28 推荐一款nginx+redis+ehcache高并发与高可用缓存架构
- 2024-09-28 「Nginx」实现负载均衡、限流、缓存、黑白名单和灰度发布
- 2024-09-28 在nginx配置文件中设置nginx缓存(nginx怎么配置缓存)
- 2024-09-28 Nginx中浏览器缓存的执行流程(nginx 浏览器缓存)
- 2024-09-28 Nginx 缓存机制详解!非常详细实用
- 2024-09-28 vue项目如何有效解决的浏览器的缓存问题
- 2024-09-28 Nginx 反向代理缓存,看上去很美(nginx反向代理原理及应用)
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)