首页 > 运维 > nginx > 正文

nginx页面缓存怎么配置

WBOY
发布: 2023-05-30 19:13:30
转载
3013 人浏览过

nginx之页面缓存

1.指令说明

proxy_cache_path

语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size]; 

默认值:none 

使用字段:http 

指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中,并且使用代理url的哈希值作为关键字与文件名。levels参数指定缓存的子目录数,例如:

proxy_cache_path /data/nginx/cache levels=1:2  keys_zone=one:10m;
登录后复制

文件名类似于:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
登录后复制

levels指定目录结构,可以使用任意的1位或2位数字作为目录结构,如 x, x:x,或x:x:x 例如: “2”, “2:2”, “1:1:2“,但是最多只能是三级目录。

所有活动的key和元数据存储在共享的内存池中,这个区域用keys_zone参数指定。one指的是共享池的名称,10m指的是共享池的大小。

注意每一个定义的内存池必须是不重复的路径,例如:

proxy_cache_path /data/nginx/cache/one  levels=1   keys_zone=one:10m;
proxy_cache_path /data/nginx/cache/two  levels=2:2  keys_zone=two:100m;
proxy_cache_path /data/nginx/cache/three levels=1:1:2 keys_zone=three:1000m;
登录后复制

如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。一个名为cache manager的进程控制磁盘的缓存大小,它被用来删除不活动的缓存和控制缓存大小,这些都在max_size参数中定义,当目前缓存的值超出max_size指定的值之后,超过其大小后最少使用数据(lru替换算法)将被删除。内存池的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,如freebsd/i386下为64字节,freebsd/amd64下为128字节。

proxy_cache

语法:proxy_cache zone_name;

默认值:none

使用字段:http, server, location

设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。

在0.7.48后,缓存遵循后端的”expires”, “cache-control: no-cache”, “cache-control: max-age=xxx”头部字段,0.7.66版本以后,”cache-control:“private”和”no-store”头同样被遵循。nginx在缓存过程中不会处理”vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0”头,或者proxy_cache_key包含用户指定的数据如$cookie_xxx,使用cookie的值作为proxy_cache_key的一部分可以防止缓存私有数据,所以可以在不同的location中分别指定proxy_cache_key的值以便分开私有数据和公有数据。

缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。

proxy_cache_valid

语法:proxy_cache_valid reply_code [reply_code …] time;

默认值:none

使用字段:http, server, location

为不同的应答设置不同的缓存时间,例如:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404   1m;
登录后复制

为应答代码为200和302的设置缓存时间为10分钟,404代码缓存1分钟。

如果只定义时间:

proxy_cache_valid 5m;
登录后复制

那么只对代码为200, 301和302的应答进行缓存。

同样可以使用any参数任何应答。

proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
登录后复制

2.定义一个简单nginx缓存服务器

[root@nginx ~]# vim /etc/nginx/nginx.conf
proxy_cache_path /data/nginx/cache/webserver levels=1:2 keys_zone=webserver:20m max_size=1g;
  server {
    listen    80;
    server_name localhost;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    location / {
        proxy_pass   http://webservers;
        proxy_set_header x-real-ip $remote_addr;
        proxy_cache webserver;
        proxy_cache_valid 200 10m;
    }
}
登录后复制

3.新建缓存目录

[root@nginx ~]# mkdir -pv /data/nginx/cache/webserver
登录后复制

4.重新加载一下配置文件

[root@nginx webserver]# service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新载入 nginx:                      [确定]
登录后复制

5.下面我们来测试一下(谷歌浏览器)

nginx页面缓存怎么配置

注,大家用谷歌浏览器测试的时候,可以按f12调用开发工具,选择network选项,我们可以看到,response headers,在这里我们可以看到,我们请求的是否是缓存,但现在还看不到,下面我们来配置一下,再来测试。

6. 缓存变量说明

$server_addr

服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。

$upstream_cache_status

0.8.3版本中其值可能为:

  • miss 未命中

  • expired - expired。请求被传送到后端。

  • updating - expired。因为proxy/fastcgi_cache_use_stale正处于更新中,所以将使用旧版本的响应。

  • stale - expired。当使用proxy/fastcgi_cache_use_stale时,后端会接收到过期的响应。

  • hit 命中

[root@nginx ~]# vim /etc/nginx/nginx.conf
proxy_cache_path /data/nginx/cache/webserver levels=1:2 keys_zone=webserver:20m max_size=1g;
  server {
    listen    80;
    server_name localhost;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    #增加两头部
    add_header x-via $server_addr;
    add_header x-cache $upstream_cache_status;
    location / {
        proxy_pass   http://webservers;
        proxy_set_header x-real-ip $remote_addr;
        proxy_cache webserver;
        proxy_cache_valid 200 10m;
    }
}
登录后复制

7.重新加载一下配置文件

[root@nginx ~]# service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新载入 nginx:                      [确定]
登录后复制

8.测试一下

nginx页面缓存怎么配置

注,从图中我们可以看到,我们访问的服务器是192.168.18.208,缓存命中。大家可以看到是不是很直观啊。下面我们看一下缓存目录。

9.查看一下缓存目录

[root@nginx ~]# cd /data/nginx/cache/webserver/f/63/
[root@nginx 63]# ls
681ad4c77694b65d61c9985553a2763f
登录后复制

注,缓存目录里确实有缓存文件。

以上是nginx页面缓存怎么配置的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:yisu.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板