本文研究nginx提供的缓存功能,下面是实操记录。
这篇博文基于前面文章的基础上搭建,至始至终都是root用户操作
http://blog.csdn.net/tao_627/article/details/78953800
缓存清除功能需要借助第三方模块ngx_cache_purge,其链接如下
https://github.com/FRiCKLE/ngx_cache_purge
下载其源码并安装进nginx中去
cd /usr/local/src
git clone https://github.com/FRiCKLE/ngx_cache_purge.git
编译
cd nginx-1.12.2
./configure --with-http_ssl_module
--with-pcre=/usr/local/src/pcre-8.41
--with-zlib=/usr/local/src/zlib-1.2.11
--with-openssl=/usr/local/src/openssl-1.1.0g
--with-http_stub_status_module
--add-module=/usr/local/src/ngx_cache_purge
make
make install
配置
在nginx.conf中添加如下配置块
proxy_cache_path /usr/local/nginx/cache1 levels=1:2 keys_zone=cache1:100m inactive=1d max_size=2g;add_header X-Cache $upstream_cache_status;location ^~ /static/ {proxy_cache cache1;proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 304 301 302 10m;proxy_cache_methods GET; proxy_cache_min_uses 3;proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;proxy_pass http://127.0.0.1:18080;expires 30d;access_log logs/cache.log main;
}
在相同的server块中,使用单独的location来配置缓存清除功能
location ~ /purge(/.*) {allow 127.0.0.1;deny all;proxy_cache_purge cache1 $host$1$is_args$args;access_log logs/cache.log main;
}
完整的nginx.conf配置如下:
user root;
worker_processes 1; 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;access_log logs/access.log main;sendfile on;keepalive_timeout 65;proxy_cache_path /usr/local/nginx/cache1 levels=1:2 keys_zone=cache1:100m inactive=1d max_size=2g;server {listen 80;server_name localhost;#access_log logs/host.access.log main;add_header X-Cache $upstream_cache_status;location ^~ /static/ {proxy_cache cache1;proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 304 301 302 10m;proxy_cache_methods GET;proxy_cache_min_uses 3;proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;proxy_pass http://127.0.0.1:18080;expires 30d;access_log logs/cache.log main;-}location ~ /purge(/.*) {proxy_cache_purge cache1 $host$1$is_args$args;allow 127.0.0.1;deny all;access_log logs/cache.log main;}location /ngx_status {stub_status;access_log off;allow 127.0.0.1;deny all;}location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}server {listen 18080;server_name localhost;location ^~ /static/ {root html;expires 10d;}location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
检测并使配置生效
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
下面是/usr/local/nginx下面的目录结构截图
ps auxf | grep nginx | grep -v grep
注意此时发现已经多了一个cache manager进程。
测试
要求现在的nginx cache功能不能和原来添加的模块功能相冲突。下面逐一进行测试。根据配置,累计请求同一请求3次之后,才会缓存主
从Firefox浏览器中访问的结果
再次请求该资源,发现缓存状态是MISS
curl -vo /dev/null 'http://127.0.0.1/static/a.gif'
测试中发现的问题
选项proxy_cache_min_uses表示同一个请求超过多少次才放入缓存,但是我发现,使用ngx_cache_purge模块删除之后,再次发送同一个请求,发现两次就缓存了。个人感觉这是个模块兼容性的bug。
下面是参考文献[1]的翻译 简介 ATS既可以用作HTTP代理,也可以用作HTTP缓存,ATS能够缓存任何字节流,虽然它当前只支持HTTP协议传输的字节流,当这样的流缓存时,会带一个HTTP协议头部,会命名为缓存中的一个对象object。每个对象通过一个名为cache key的全局唯一值识别。 该文档的目的是描述ATS缓...
对Squid使用的几点总结 1.cache_dir 在Linux环境下用aufs类型的cache_dir比较稳定,速度也比较快。cache_dir所在文件系统如果用noatime选项来mount,可以避 免访问cache文件时经常要更新access time的操作。 一般cache容量和被加速内容的比值...
策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换。对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户。 基本的UML类图如下: 用户使用Stratey的实例能够快速得在不同的Cache算法之间灵活切换(直接使用对应的Cache实例来设置到Strategy之中即可。),...
环境 ceph版本:12.2.1 部署模式:ec 2+1 osd: 3个 且资源池已经有数据 执行命令:ceph daemon osd.0 flush_store_cache 进行刷缓存。即将dump_mempools内存池管理的bluestore cache中的无用数据进行释放 主要参数: bluestore_cache_tr...
最近用Yii2.0框架做了个小项目,虽然项目本身业务逻辑不复杂,但是由于本身业务逻辑的特殊性,在上午9点到12点之间系统访问量会突然上升(浏览量和用户上传文件量)。导致系统单纯的部署在Apache下,支撑不了这么多的并发数;单独部署Nginx又由于用户频繁的提交数据,出现大量的502错误。然后又由于各方面的原因,就想通过Nginx...
软件包如下:nginx-1.10.0.tar.gznginx-http-concat-master.zipngx_cache_purge-2.3.tar.gzopenssl-1.0.2h.tar.gzpcre-8.39.tar.gzzlib-1.2.8.tar.gz ngin部署方法:上面的安装包都存放在/apps/svr/soft目...
知识点: server的语法: upstream语法: upstream中192.168.100.1不是ip只是个标识,只要和下面的proxy_pass 对应即可。 基于IP的虚拟主机: listen和server_name中多加上端口也没问题 listen可以监听在虚拟ip上面 代码: ups...
编译Apache时要进行的设置./configure --enable-mods-shared="all proxy"1>修改 httpd.conf 文件中:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_p...
ng g s services/http app.module.ts ... @NgModule({declarations: [...],imports: [...HttpClientModule,//这个很重紧要,没有就会报错],providers: [],bootstrap: [AppComponent] }) expor...
set-misc-nginx-module模块是标准的HttpRewriteModule指令的扩展,提供更多的功能,如URI转义与非转义、JSON引述、Hexadecimal/MD5/SHA1/Base32/Base64编码与解码、随机数等等。在后面的应用中,都将会接触使用到这个模块的。该模块是由章亦春先生开发的,他开发的其他模块应用...
该源码包是MySQL-python-1.2.4b4.tar.gz 从2013-06-28以来一直没有更新,注意该网站可以区分访问的终端类型是Windows还是Linux之类的,从而返回的源码包格式不一样。 在CentOS上的安装方法是 http://www.cnblogs.com/jackluo/p/3559978.html...
ATS默认提供了对Referer头的http request的防盗链功能,主要应用于图片,对视频等会使用级别更高的防盗链功能,比如事先约定好key,采用md5或HMAC-Sha1算法加密等。 在remap.config中按如下格式设置: map_with_referer client-URL origin-server-URL re...
测试大文件下载 curl -I "http://resource.tsk.erya100.com/TS/flv/TS180/5836/9.flv?t=1430796561727" 单条转发模式in per remap mode 在remap.config中添加一条 map http://resource.tsk.e...