Nginx模块配置教程:Nginx缓存配置教程

2020年11月23日14:52:46 发表评论 1,126

常见的缓存类型有服务端缓存(Redis、Memcached)、代理缓存(Nginx)、客户端缓存(浏览器),它们的作用都是用于减少后端服务器的压力。在Nginx中要开启缓存的话,除了可以使用expires选项开启客户端缓存,还支持代理缓存,要开启代理缓存功能的话所使用到的模块是ngx_http_proxy_module,其包含了proxy_cache功能,常用配置项有以下几个项:

1、proxy_cache  zone | off ; :调用已经定义好的缓存,如果off则关闭缓存;zone代表已经配置好的缓存名字,这个由proxy_cache_path在http、server、location标签中定义

2、proxy_cache_valid time;  :缓存过期时间,code为http状态码,可以针对不同状态码进行缓存

3、proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time] ;  :定义缓存以及缓存配置,只能定义在http标签中

4、proxy_cache_key string;:缓存维度,也就是需要缓存的内容

5、proxy_cache_lock:如果有多个相同的请求同时传递给Nginx,将这些请求进行合并

Nginx缓存配置示例
user nginx;  #运行Nginx的用户
worker_processes  1;
error_log  logs/error.log warn;
pid  /var/run/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;
sendfile        on;
tcp_nopush      on;
#tcp_nodeley    off;
keepalive_timeout  65;
gzip  on;
include /etc/nginx/conf.d/*.conf;

upstream linuxe {
server  192.168.100.110;
server  192.168.100.120;
}
#下面语句是关键,分别定义了缓存存放的目录;缓存目录为2层,目录命名规则为第一层1个字符,第二层2个字符;缓存空间的名字为linuxe,并且开辟空间为10m,每1m可存放8000个key;缓存目录最大有10g,超出的进行淘汰;60分钟没被使用的缓存文件认为是非活跃文件而被清理
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=linuxe_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen       80;
server_name  linuxe.cn;
location {
proxy_cache linuxe_cache;  #调用了linuxe_cache这个缓存区
proxy_pass http://linuxe;
proxy_cache_valid 200 304 12h;  #将200和304的状态码将缓存12个小时
proxy_cache_valid any 10m;  #其他状态码缓存10分钟
proxy_cache_key $host$uri$is_args$args;
}
}

上述设置成功后可以访问页面进行测试,正常情况下即使有做负载均衡但经过缓存后访问的页面是同一个,这个可以通过放置不同的页面进行测试
Nginx缓存清理与过滤
1、要清理缓存的话可以通过rm命令删除缓存目录或者使用第三方扩展模块ngx_cache_purge,该模块装上后,只需要访问指定的路径就可以删除对应的缓存
http://www.linuxe.cn/purge/index.php  #清理index.php页面的缓存
2、使用proxy_no_cache选项可以指定某URL不被缓存,如:
server {
listen    80;
server_name    linuxe.cn;
if ( $request_uri ~ ^/(login|password|test) ){
set $cookie_nocache 1;  #将访问路径进行正则匹配,如果匹配上了给cookic_nocache这个变量设值为1
}
location / {
proxy_no_cache $cookie_nocache;  #这里no_cache的条件就是变量是否为1,为1则不缓存
}
}

 

    发表评论

    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: