开启缓存可以提高网站性能,减轻频繁访问数据,而给数据库带来的压力
合理的缓存,还会减轻程序运算时,对CPU带来的压力
http缓存设置——浏览器访问Nginx,浏览器会Cache
nginx代理层缓存——Nginx 访问后端,Nginx 自己Cache
1.http缓存设置
Nginx提供了
expires
、etag
、if-modified-since
指令来实现浏览器缓存控制expires让用户访问一次后,将数据缓存在用户的浏览器中
expires的配置
upstream nodejs {
server 127.0.0.1:3002;
}
server {
listen 3001;
server_name 127.0.0.1;
location / {
proxy_pass http://nodejs;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6].";
expires 3m;
}
}
开启缓存后第一次请求
以后再请求
2.nginx代理层缓存
Nginx实现缓存是通过代理缓存pxory_cache
常用的设置选项有
(1)proxy_cache_path
定义一个完整的缓存空间,指定缓存数据的磁盘路径、索引存放的内存空间以及一些其他参数,如缓存删除策略
eg:
proxy_cache_path /data/cache levels=1:2 keys_zone=nodejs:10m max_size=1G inactive=10m;
说明:
levels:设置如何将缓存文件保存到文件系统
如果未定义,则将缓存文件直接保存在定义的路径中。
如果定义为1:2
,则根据缓存文件的md5哈希将其保存在缓存路径的子目录中。
keys_zone:用来为这个缓存区起名,并设置大小
如上指定名为nodejs,供proxy_cache引用;10m就是内存空间的大小;
max_size:指定最大缓存数据磁盘空间的大小
inactive:在inactive指定的时间内,未被访问的缓存数据将从缓存中删除
默认值为10分钟
注:
只能定义在http块上下文中
(2)proxy_cache
用来引用上面proxy_cache_path定义的缓存空间, 现时打开缓存功能
(3)proxy_cache_valid
设置不同响应代码的缓存时间
eg:
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; proxy_cache_path data/cache levels=1:2 keys_zone=nginx:50M max_size=2G inactive=2h; proxy_cache_key $host$request_uri; upstream nodejs { server 127.0.0.1:3002; } server { listen 3001; server_name 127.0.0.1; proxy_cache nginx; proxy_cache_valid 301 302 20m; proxy_cache_valid any 2m; location / { proxy_pass http://nodejs; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; #gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/json application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary off; gzip_disable "MSIE [1-6]."; #缓存设置 proxy_ignore_headers Set-Cookie Cache-Control; proxy_hide_header Cache-Control; proxy_hide_header Set-Cookie; proxy_set_header Host $proxy_host:$proxy_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header X-Via $server_addr; add_header X-Upstream $upstream_addr; add_header Nginx-Cache $upstream_cache_status; } } }
http://127.0.0.1:3001/upload/layui.css
刷新再访问
说明:
$upstream_cache_status变量用来显示缓存的状态
MISS 未命中,请求被传送到后端
HIT 缓存命中
EXPIRED 缓存已经过期请求被传送到后端
UPDATING 正在更新缓存,将使用旧的应答
STALE 后端将得到过期的应答