浏览器缓存
配置浏览器缓存可以加速静态资源的访问,浏览器对用户访问的资源进⾏存储,下次访问,不⽤再去向服务器寻求资料,直接本地显示,加速访问体验,节省⽹络资源,提⾼效率。Nginx通过
expires
指令配置缓存,可以控制
HTTP
响应中的
Expires
和
Cache-Control的头部信息,⽤来控制页⾯缓存例如HTML
⻚⾯经常引⽤
JavaScript
以及图⽚等⽂件,这些⽂件很少被修改,可以设置浏览器对该类资源在本地缓存定期的时间。添加缓存之前响应信息
常用的指令
proxy_cache_path
该指定用于设置缓存文件的存放路径
语法
语法 | proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time][max_size=size]; |
默认值 | |
位置 | http |
参数
levels | 指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2 |
keys_zone | 用来为这个缓存区设置名称和指定大小 |
inactive | 指定缓存的数据多次时间未被访问就将被删除 |
max_size | 设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源 |
levels详解
levels=1:2 缓存空间有两层目录,第一次是1个字母,第二次是2个字母
举例说明:
itheima[key]通过MD5加密以后的值为 43c8233266edce38c2c9af0694e2107d
levels=1:2 最终的存储路径为/usr/local/proxy_cache/d/07
levels=2:1:2 最终的存储路径为/usr/local/proxy_cache/7d/0/21
levels=2:2:2 最终的存储路径为??/usr/local/proxy_cache/7d/10/e2
用法
http{
proxy_cache_path /usr/local/proxy_cache keys_zone=itcast:200m levels=1:2:1 inactive=1d max_size=20g;
}
proxy_cache
该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存。
语法
语法 | proxy_cache zone_name|off; |
默认值 | proxy_cache off; |
位置 | http、server、location |
参数
zone_name | 指定使用缓存区的名称 |
用法
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
sever{
....
location / {
proxy_pass http://backend-server;
proxy_cache my_cache;
}
}
}
proxy_cache_key
该指令用来设置web缓存的key值,Nginx会根据key值MD5哈希存缓存。
语法
语法 | proxy_cache_key key; |
默认值 | proxy_cache_key $scheme$proxy_host$request_uri; |
位置 | http、server、location |
参数详解
proxy_cache_key
的值为 $scheme$proxy_host$request_uri;
。这意味着缓存键将由请求的协议 ($scheme
)、代理主机 ($proxy_host
) 和请求的 URI ($request_uri
) 组成。例如,对于以下两个请求:
http://example.com/path/to/resource
https://example.com/another/path
Nginx 将根据这两个请求的协议、主机和 URI 生成不同的缓存键,确保它们被分别缓存在缓存区域中。
proxy_cache_valid
该指令用来对不同返回状态码的URL设置不同的缓存时间。
语法
语法 | proxy_cache_valid [code ...] time; |
默认值 | |
位置 | http、server、location |
用法
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
为200和302的响应URL设置10分钟缓存,为404的响应URL设置1分钟缓存
proxy_cache_valid any 1m;
对所有响应状态码的URL都设置1分钟缓存
proxy_cache_min_uses
该指令用来设置资源被访问多少次后被缓存
语法
语法 | proxy_cache_min_uses number; |
默认值 | proxy_cache_min_uses 1; |
位置 | http、server、location |
proxy_cache_methods
该指令用户设置缓存哪些HTTP方法
语法
语法 | proxy_cache_methods GET|HEAD|POST; |
默认值 | proxy_cache_methods GET HEAD; |
位置 | http、server、location |
参数详解
proxy_cache_methods GET HEAD; 默认缓存HTTP的GET和HEAD方法,不缓存POST方法。
缓存清除
rm -rf /usr/local/proxy_cache/......
静态资源缓存设置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
# gzip on;
server {
listen 80;
server_name localhost;
#默认编码
charset utf-8;
# access_log logs/host.access.log main;
location / {
#定义虚拟主机的资源目录,无论win或linux都要写成正斜杠
root C:/Users/zhang/Desktop/new;
#定义首页文件的名字
index index.html index.htm;
}
# . 表示匹配任意字符,* 表示匹配前面的字符 0 次或多次,\. 表示匹配字符 .,() 表示使用括号内的内容进行分组,| 表示或的关系,$ 表示匹配字符串结尾。
# 配置缓存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root C:/Users/zhang/Desktop/new;
expires 30d;
}
# 配置缓存
location ~ .*\.(js|css)?$ {
root C:/Users/zhang/Desktop/new;
expires 1h;
}
}
}