Nginx反向代理缓存 + CND+PHP缓存

来源:互联网 发布:mac dock栏设置 编辑:程序博客网 时间:2024/05/18 22:41

一.缓存的概念


1. Buffer,Cache的区别:

buffer: 一般用于写操作,写缓冲。cache:  一般用于读操作,读缓存。它们都是解决速度不一致的问题,都设计到IO操作。

2.Cache的重点关注点:

1.存放位置(多级cache):    客户端(浏览器缓存)    内存(本地或者远程服务器)    硬盘(本地或者远程服务器)       2.过期时间: TTL 3.强制失效4.Cache的命中率(重点): 一个完全没有命中率的cache没有意义。

二.浏览器缓存


1.缓存协商的定义:

浏览器和web服务器进行缓存的对话。

2.浏览器缓存的几种方式:

Last-Modified: 文件最后修改时间Etag: MD5Expires: 过期时间    Nginx设置方法:        location ~ .*\.(js|css){            expires 1h; #1小时过期        }        (如果在过期前发现js错了,需要改名或者加时间123.js变成123.js?201610)Cache-Control: 解决客户端时间不对的问题

3.浏览器几种刷新方式的区别:

在地址栏敲击Enter键: 只要没有过期的直接使用缓存,所有缓存机制都生效。F5或者刷新按钮: Expires不受影响,其他缓存机制都失效。Ctrl+F5:   强制刷新,所有缓存机制都失效,相当于第一次访问网页。

二.CDN相关


1.CDN主要解决以下问题:

不同运营商的互联问题,BGP又贵。用户和服务器之间网络传输距离长的问题。现有服务器带宽有限。提高用户的响应速度和成功率。

2.CDN的核心技术:

1.内容调度 - 智能dns(根据你的localDNS的Ip来判断)2.监测系统 - 监测各个节点的链路状态和健康状态3.内容分发 - 预缓存4.过期刷新 - 缓存刷新5.数据存储 - 文件的存储6.用户配置中心 - saltstack ansible7.计费系统8.数据可视化 - 日志分析,日志下载9.防攻击 - WAF

二.Nginx反向代理缓存配置


1.配置nginx反向代理缓存:

vim /usr/local/nginx/conf/proxy.conf

#cdnproxy_temp_path  /data/cdn_cache/proxy_temp_dir; #缓存的临时目录proxy_cache_path /data/cdn_cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d  max_size=1g;   #缓存的目录,缓存级别1:2,缓存名称cache_one,内存缓存大小50M,自动清除1天没访问的文件,硬盘缓存大小1G.proxy_connect_timeout 5;proxy_send_timeout 60;proxy_read_timeout 5;proxy_buffer_size 16k;proxy_buffers 4 64k;proxy_busy_buffers_size 128k;proxy_temp_file_write_size 128k;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404;  #后端服务器出现500,502等异常后,可以分配到下一台服务器程序继续处理,提高平台访问成功率。

vim /usr/local/nginx/conf/vhost/bbs.conf

                location ~ .*.(gif|jpg|png|bmp)$ {                        proxy_pass http://image;                        #Use Proxy Cache                        proxy_cache cache_one;  #匹配上面的缓存配置                        proxy_cache_key  "$host$request_uri";                        add_header Cache "$upstream_cache_status";  #增加header头                        proxy_cache_valid 200 304 301 302 8h;                        proxy_cache_valid 404 1m;                        proxy_cache_valid any 2d;                }

mkdir -p /data/cdn_cache/proxy_cache_dir/
mkdir -p /data/cdn_cache/proxy_temp_dir

2.如何根据URL来删除缓存文件:

先查看缓存文件的头部信息:
head /data/cdn_cache/proxy_cache_dir/c/7c/9857f1ea1acafc1697b2121f36f7f7cc

KEY: bbs.wmj.com/b.gif   #这个是Key值,根据上面定义格式来生成的"$host$request_uri"HTTP/1.1 200 OKDate: Wed, 05 Jul 2017 07:59:18 GMTServer: Apache/2.2.15 (CentOS)Last-Modified: Wed, 05 Jul 2017 04:15:35 GMTETag: "2009e8-26ec-5538a40711f72"Accept-Ranges: bytesContent-Length: 9964Connection: close

缓存文件名就是根据KEY值的MD5计算而来。

echo -n "bbs.wmj.com/b.gif" |md5sum9857f1ea1acafc1697b2121f36f7f7cc  -

文件路径”c/7c”分别是md5的最后一位和倒数2-3位来生成。
通过这个来定义“levels=1:2”

3.删除nginx缓存文件的脚本:

#!/bin/bash########################################################说明:#  1.本脚本用于清除nginx缓存文件#  2.查看你的nginx是根据什么作为key来hash的,我的设置是 proxy_cache_key $host$request_uri;#  因此nginx会根据$host$request_uri作为key进行hash,因此可以模拟nginx对一个key进行再#  hash找到相应的文件路径,删除(具体可随意找个缓存文件 more 一下看看)#  3.缓存设置 proxy_cache_path /data/cdn_cache/proxy_cache_dir/ levels=1:2 keys_zone=cache_one:6000m inactive=15d max_size=200g;#  根据相应的配置,请做相应修改测试#  4.uri格式请按照同级目录下rm_apk_list.txt中填写#####################################################while read -r linedo  md5uri=`echo -n $line | md5sum | awk '{ print $1 }'`  filepath=`echo "$md5uri" | awk '{print "/data/cdn_cache/proxy_cache_dir/"substr($0,length($0),1)"/"substr($0,length($0)-2,2)"/"$0}'`  rm -rf $filepathdone 

/root/rm_apk.sh < rm_apk_list.txt #脚本执行命令

三.PHP的缓存机制


1.安装php的opcache:

参考资料:http://php.net/manual/zh/book.opcache.php

安装的时候: –enable-opcache
php.ini

zend_extension=opache.soopcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60opcache.fast_shutdown=1opcache.enable_cli=1

2.动态内容静态化

3.PHP本地缓存:

php-yac
原创粉丝点击