nginx内置缓存

jk 1年前 ⋅ 9182 阅读

源于:今日头条(查看原文)

1.添加安装清除缓存模块

使用参数重新配置

./configure --prefix=/app/nginx -user=nobody -group=nobody --with-http_stub_status_module \

--with-http_ssl_module --with-http_realip_module \

--add-module=../nginx_upstream_hash-0.3.1/ \

--add-module=/opt/sxt/ngx_cache_purge-2.3

前面怎么安装的这里参数全部相同,路径什么的也需要相同

Make

不执行make install

然后替换nginx二进制文件:

cp /opt/sxt/soft/tengine/sbin/nginx /app/nginx/sbin/nginx.bak

cp ./objs/nginx /opt/sxt/soft/tengine/sbin/

2.配置缓存

注意缓存的基本上都是静态的东西,动态的插了java代码之类的是缓存不了的

在http的范围里面需要配置的就两个东西:

proxy_temp_path和proxy_cache_path以下是配置意义

当然levels和keys_zone这种东西也是需要配置的

#proxy_temp_path代理临时目录

proxy_temp_path /var/temp/nginx/proxy;

#proxy_cache_path代理缓存目录,和proxy_temp_path必须在同一个分区

#/var/temp/nginx/proxy_cache_dir缓存目录

#levels指定该缓存空间有两层hash目录,第一层目录名是1个字母或数字长度,第二层目录名为2个字母或数字长度

#keys_zone=cache_one:50m缓存区名称为cache_one,在内存中的空间是50M,inactive=1d表示1天清空一次缓存 ,max_size指定磁盘空间大小为500M

proxy_cache_path /var/temp/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=500m;

然后是配置缓存的东西和缓存的条件

这里最重要的是proxy_cache cache_one;(注:这里的proxy_cache一定是前面的keys_zone)和proxy_cache_key $host$uri$is_args$args,以及后面缓存没有的时候的proxy_pass

location ~ /item(/.*){

#指定缓存区域名称

proxy_cache cache_one;

#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希

proxy_cache_key $host$uri$is_args$args;

#请求头中添加请求的主机名

proxy_set_header Host $host;

#请求头中添加真实的客户端ip,通过X-Forwarded-For可获取

proxy_set_header X-Forwarded-For $remote_addr;

#代理访问后端tomcat

#请求item从缓存中找,如果缓存中没有则向tomcat请求

#$1表示取出正则表达式(/.*)所匹配的内容,使用$1的效果例如请求http://ccc.test.com/item/100010.html则请求tomcat服务器 http://ip:port/100010.html

#如果不使用$1则会将/item/...加在tomcat服务地址之后访问,即http://ip:port/item/100010.html

proxy_pass http://tomcat_server_pool$1;

}

然后就是在匹配之前配置一个purge,最重要的匹配的上和proxy_cache_purge cache_one $host$1$is_args$args

location ~ /purge(/.*)

{

#安全设置,指定请求客户端的IP或IP段才可以清除URL缓存,这里为了方便测试设置为all

#allow 127.0.0.1;

allow all;

#指定清空缓存的区域名称cache_one(要和上边proxy_cache_path缓存配置中指定的缓存区域名称一致)

#指定缓存的key规则$host$1$is_args$args,要和下边设置缓存的key一致$host$uri$is_args$args

#注意$host$1$is_args$args中的$1表示当前请求的uri,$host$1$is_args$args=$host$uri$is_args$args

proxy_cache_purge cache_one $host$1$is_args$args;

}


全部评论: 0

    我有话说: