首页 > 在CentOS 6.9 x86_64上开启nginx 1.12.2的proxy_cache缓存配置

在CentOS 6.9 x86_64上开启nginx 1.12.2的proxy_cache缓存配置

本文研究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功能不能和原来添加的模块功能相冲突。下面逐一进行测试。

curl -vo /dev/null 'http://127.0.0.1/'





curl -v http://127.0.0.1/ngx_status





curl -vo /dev/null 'http://127.0.0.1/static/a.gif'



根据配置,累计请求同一请求3次之后,才会缓存主



curl -vo /dev/null 'http://127.0.0.1/purge/static/a.gif'



从Firefox浏览器中访问的结果



再次请求该资源,发现缓存状态是MISS

curl -vo /dev/null 'http://127.0.0.1/static/a.gif'



测试中发现的问题

选项proxy_cache_min_uses表示同一个请求超过多少次才放入缓存,但是我发现,使用ngx_cache_purge模块删除之后,再次发送同一个请求,发现两次就缓存了。个人感觉这是个模块兼容性的bug。



参考文献

[1].http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache

[2].https://github.com/FRiCKLE/ngx_cache_purge

[3].http://phl.iteye.com/blog/2256356

[4].http://blog.csdn.net/czp11210/article/details/28596649

[5].http://www.jackieathome.net/archives/411.html

[6].http://blog.csdn.net/dengjiexian123/article/details/53386586



更多相关:

  • 下面是参考文献[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...