NGINX 的缓存可以是 静态 的,也可以是 动态的,具体取决于配置和缓存的内容类型:
1. 静态缓存
NGINX 可以缓存静态文件,如 HTML、CSS、JavaScript、图片和视频等。对于这些内容,缓存的目标是加快加载速度,减少服务器的负载,因为静态文件通常是固定的,不经常更改。缓存这些内容可以大大提高性能和用户体验。
配置示例:
nginx
location /static/ {
root /var/www/static;
expires 30d;
}
这个配置会将静态文件缓存 30 天。
2. 动态缓存
NGINX 也可以缓存动态内容,如从后端服务器生成的 HTML 页面、API 响应等。这种缓存适合用于加速动态生成的内容,如数据库查询结果或后端 API 响应。通过缓存动态内容,NGINX 可以在请求量高峰时减少后端服务器的压力。
动态缓存的配置:
nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:10m inactive=60m;
location / {
proxy_pass http://backend;
proxy_cache cache_zone;
proxy_cache_valid 200 10m;
}
这个配置会将后端服务器的动态响应缓存 10 分钟。
在 Nginx 中,proxy_cache
用于实现反向代理缓存,可以显著提高性能并减少后端服务器的负载。以下是关于 proxy_cache
的使用方法:
2.1、开启缓存功能
- 在 Nginx 的配置文件(通常是
nginx.conf
)中,找到要配置缓存的服务器块(server
)或位置块(location
)。 - 添加以下配置来开启缓存功能:
nginx
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache_path
指定缓存的存储路径。例如,/path/to/cache
是缓存文件存储的目录。levels=1:2
设置缓存目录的层级结构。keys_zone=my_cache:10m
定义一个名为my_cache
的缓存区,大小为 10MB。这个缓存区用于存储缓存的元数据。max_size=10g
设置缓存的最大总大小为 10GB。inactive=60m
表示如果一个缓存项在 60 分钟内没有被访问,就会被视为过期并可以被删除。use_temp_path=off
指示 Nginx 不要使用临时目录来存储缓存文件,这可以提高性能。
2.2、在服务器或位置块中应用缓存
- 在服务器块或位置块中,添加以下配置来启用缓存:
nginx
location / {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
proxy_pass
指定后端服务器的地址。proxy_cache my_cache
使用之前定义的名为my_cache
的缓存区。proxy_cache_valid
设置不同 HTTP 状态码的缓存有效期。在这个例子中,状态码为 200 和 302 的响应缓存 10 分钟,状态码为 404 的响应缓存 1 分钟。
2.3、缓存控制
- 可以通过添加
proxy_no_cache
和proxy_cache_bypass
指令来进一步控制缓存行为:
nginx
location / {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_no_cache $arg_nocache;
proxy_cache_bypass $arg_bypass;
}
proxy_no_cache
可以根据一个变量的值决定是否不缓存响应。例如,如果$arg_nocache
变量的值为非空字符串,则不缓存响应。proxy_cache_bypass
可以根据一个变量的值决定是否绕过缓存直接从后端服务器获取响应。例如,如果$arg_bypass
变量的值为非空字符串,则绕过缓存。
通过以上配置,Nginx 会将对指定位置的请求进行缓存,并根据配置的规则管理缓存的有效期和行为。需要注意的是,缓存的设置需要根据具体的应用场景进行调整,以达到最佳的性能和缓存效果。
3、总结:
- 静态缓存:缓存不变的静态文件。
- 动态缓存:缓存后端服务器生成的动态内容。
通过配置不同的缓存策略,NGINX 可以处理两种类型的缓存,从而提高网站的性能和响应速度。