购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.5 Nginx缓存

使用Nginx代理缓存可以减少后端服务端压力,提升网站性能,减小并发延时。Nginx设置缓存的代码如代码清单4-13所示。

代码清单4-13 Nginx设置缓存
upstream zachary.sh.cn{
    server 192.168.10.1:8081;
    server 192.168.10.2:8082;
}
proxy_cache_path /cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m
use_temp_path=off;
server {
    listen 80;
    server_name zachary.sh.cn;
    index index.html;
    location / {
        proxy_pass http:// zachary.sh.cn;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_cache cache;
        proxy_cache_valid 200 304 6h;
        proxy_cache_valid any 6m;
        proxy_cache_key $uri$request_body;
        proxy_cache_methods GET POST;
        add_header Nginx-Cache "$upstream_cache_status";
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

在代码清单4-13中,proxy_cache_path /cache用于设置Nginx缓存资源的存放地址。各参数说明如下。

1)levels:按照两层目录分层。

2)key_zone:在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),Nginx可以快速判断一个请求是否命中缓存,1MB可以存储8000个key,10MB可以存储80000个key。

3)max_size:最大缓存空间,如果不指定,会使用所有硬盘空间,当达到配额后,会删除最少使用的缓存文件。

4)inactive:未被访问文件在缓存中的保留时间。如果文件60分钟未被访问,则不论状态是否为expired,缓存控制程序都会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是使缓存过期,但不会删除缓存文件,inactive是删除指定时间内未被访问的缓存文件。

5)use_temp_path:如果为off,则Nginx会将缓存文件直接写入指定的缓存文件中,而不是使用temp_path存储。official建议为off,因为这可以避免文件在不同文件系统中被不必要拷贝。

6)proxy_cache:用于启用proxy缓存,并指定key_zone。另外,如果proxy_cache为off,则表示关闭缓存。

7)proxy_cache_valid:状态码200|304的过期时间为6h,其余状态码6分钟过期。

8)proxy_cache_key:缓存的key,一般为URL+请求参数。

9)proxy_cache_methods:支持缓存的请求方式。

10)add_header:增加头信息,观察客户端responce是否命中。

11)proxy_next_upstream:出现502~504或其他错误,会跳过此台服务器访问下一台服务器。

其中,$upstream_cache_status的可能值如下。

清除Nginx缓存的方法如下:

安装ngx_cache_purge,如代码清单4-14所示。

代码清单4-14 安装ngx_cache_purge
wget http:// labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=../ngx_cache_purge-2.3
make
make install

查看Nginx插件进程,如代码清单4-15所示。

代码清单4-15 查看Nginx插件进程
ps -ef|grep nginx
nginx:master process /usr/local/nginx/sbin/nginx
nginx:worker process
nginx:cache manager process      // 插件进程
nginx:cache loader process       // 插件进程

此时可以通过URL路线来清除缓存。 uv9Qf3alaD8cQ+6ItOFBQRANKI5X5fIifIWmmBtfk+KHoWWIOHxrDFc6y8iHKjS3

点击中间区域
呼出菜单
上一章
目录
下一章
×