最近线上的系统采用NGINX代理服务器========>web应用服务器,访问很慢,于是乎就想想做个缓存文件都放在缓存中这样,在访问服务器的时候不就阔以减少对后台的访问了吗,同时还能降低服务器的压力,键值一举两得,废话说完了,准备开干:
NGINX缓存方式有两种:一种是永久性的缓存;
这种缓存若不手动删除,该缓存文件会一直生效,因此,永久缓存只是用于缓存网站中几乎不会更改的内容;
二临时缓存;
这种缓存是根据请求连接进行哈希后,根据具体配置生成缓存文件目录,保存响应的数据,这个缓存的内容是可以删除的哦,具体时间自己可以设置;
准备工作:
两台服务器:一台NGINX缓存服务器,地址:172.16.10.52 一台作为web内容服务器,地址:172.16.10.17
第一种永久性缓存
在NGINX缓存服务器,添加代码
代码如下
location / {
if (!-e $request_filename) {
proxy_pass http://172.16.10.17;
}
root /opt/chachan/store;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path cache_tmp;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
}
解释:
if(!-e $request_filename)中的内容是半段缓存目录中的文件,目录或符号链接是否存在,不存在则直接从后台web内容服务器调取;
root 行指定缓存文件的保存目录
proxy_store on 开启本地缓存
proxy_store_access 设置缓存的读写规则
proxy_temp_path 设置反向代理接受的数据临时存储文件的目录,配置生效时候会自动创建
这样保存退出重启下NGINX,永久缓存完成了,是不是很简单
从图中可以看到缓存文件已经生成了,主要是一些HTML和jpg文件;
感兴趣的童鞋可以自己搭建一个;
临时缓存配置
临时缓存需要配置两块区域分别是<http区>和<server区域>
NGINX缓存服务器的http区域
同样的先复制代码:
proxy_temp_path /usr/local/nginx/proxy_temp_dir;
proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=800m;
解释:proxy_temp_path 代理临时目录
proxy_cache_path 缓存目录和参数设置
第一个路径表示自定义的缓存文件保存目录
level 参数边表示缓存目录下的层次目录结构
key_zone指定缓存区名称和大小
inactive 清空在指定时间内未被访问的内容
NGINX缓存服务器的server块代码:
server {
listen 80;
server_name default_server;
#index index.htm index.html index.php;
#root /chanchan.site/webroot;
location ~ /purge(/.*) {
proxy_cache_purge cache_one $1$is_args$args;
allow 127.0.0.1;
allow 172.16.10.0/24;
deny all;
}
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
location / {
proxy_cache cache_one;
proxy_cache_key $uri$is_args$args;
proxy_cache_valid 200 12h;
proxy_cache_valid 304 12h;
proxy_cache_valid 301 302 1d;
proxy_cache_valid any 1m;
proxy_pass http://172.16.10.17;
expires 30d;
}
}
解释:location /段
proxy_cache 缓存区名称
proxy_cache_key 设置hash的key值组成规则
proxy_cache_valid 对不同的HTTP状态码设置不同的缓存时间 (d 天 m 分钟 h 小时)
proxy_pass 后面为做处理的都被转到代理服务器上面
add_header 在响应头中添加两个标识,用来测试
如图到这一步骤,临时缓存已经搭建完毕;
细心的童鞋已经发现我贴出的代码还含有purge,purge这个模块又是干啥的捏?
比如,当有时候我们的内容服务器要更新网页的图片什么的,为啥我上传到web内容服务器后访问还是原来的页面,完全没生效捏,答案肯定是有缓存了,如果是每次我都要登录服务器手动删除太繁琐了
如果服务器托管在数据中心,又是设置了不允许远程登录是不是很蛋疼呢,每次都要跑过去删除缓存在跑回来;
purge模块的作用:用于清除指定url的缓存
解释:
proxy_cache_purge 清理的缓存模块
allow 允许指定的机器访问;
deny 拒绝访问;
配置完成后 重启NGINX使之生效;
测试:
开始清理缓存:
有的童靴可能在浏览器中看到的还是之前的图片,要记得在第二部清理完缓存数据后在把浏览器的缓存也清理一下哦,这样就出来了!