当前位置 主页 > 服务器问题 > nginx问题汇总 >

    详解Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详(11)

    栏目:nginx问题汇总 时间:2018-11-21 16:18

    如果在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.confproxy_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 reloadnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful重新载入 nginx:                      [确定]

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

    t11

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