2014-04-01 12:06:01
来 源
IT技术网
Nginx
本文介绍关于Nginx服务器的cache缓存,希望对于初学Nginx服务器相关的朋友有帮助,更多Nginx安装、配置、报错处理等资源请本站内搜索。。
有关nginx的缓存功能cache的介绍,供大家学习参考。

1、传统缓存之一(404)

这个办法是把nginx的404错误定向到后端,然后用proxy_store把后端返回的页面保存。

配置:

 

location / {

root /home/html/;#主目录

expires 1d;#网页的过期时间

error_page 404 =200 /fetch$request_uri;#404定向到/fetch目录下

}

location /fetch/ {#404定向到这里

internal;#指明这个目录不能在外部直接访问到

expires 1d;#网页的过期时间

alias /home/html/;#虚拟目录文件系统地址要和locaion /一致,proxy_store会将文件保存到这目录下

proxy_pass Accept-Encoding '';#让后端不要返回压缩(gzip或deflate)的内容,保存压缩后的内容会引发乱子。

proxy_store on;#指定nginx将代理返回的文件保存

proxy_temp_path /home/tmp;#临时目录,这个目录要和/home/html在同一个硬盘分区内

}

 

使用的时候还有要注意是nginx要有权限往/home/tmp和/home/html下有写入文件的权限,在linux下nginx一般会配置成nobody用户运行,这样这两个目录就要chown nobody,设成nobody用户专用,当然也可以chmod 777,不过所有有经验的系统管理员都会建议不要随便使用777。

2、传统缓存之二(!-e)

原理和404跳转基本一致,但更简洁一些:

 

location / {

root /home/html/;

proxy_store on;

proxy_set_header Accept-Encoding '';

proxy_temp_path /home/tmp;

if ( !-f $request_filename )

{

proxy_pass ?id=1

,因为nginx只保存文件名,所以这个链接只在文件系统下保存为read.php,这样用户访问read.php?id=2时会返回不正确的结果。同时不支持-o size=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm

上面的命令在一台有3G内存的机器上使用,因为/dev/shm默认最大内存是系统内存的一半就是1500M,这条命令将其调大成2500M,同时shm系统inode数量默认情况下可能是不够用的,但有趣的是它可以随意调节,这里调节为480000保守了点,但也基本够用了。

3、基于memcached的缓存

nginx对memcached有所支持,但是功能并不是特别之强,性能上还是非常之优秀。

 

location /mem/ {

if ( $uri ~ "^/mem/([0-9A-Za-z_]*)$" )

{

set $memcached_key "$1";

memcached_pass 192.168.1.2:11211;

}

expires 70;

}

 

这个配置会将/path/to/cache levels=1:2 keys_zone=NAME:10m inactive=5m max_size=2m clean_time=1m;

注意这个配置是在server标签外,levels指定该缓存空间有两层hash目录,第一层目录是1个字母,第二层为2个字母,保存的文件名就会类似/path/to/cache/c/29/b7f54b2df7773722d382f4809d65029c;keys_zone为这个空间起个名字,10m指空间大小为10MB;inactive的5m指缓存默认时长5分钟;max_size的2m是指单个文件超过2m的就不缓存;clean_time指定一分钟清理一次缓存。

 

location / {

proxy_pass NAME;#使用NAME这个keys_zone

proxy_cache_valid 200 302 1h;#200和302状态码保存1小时

proxy_cache_valid 301 1d;#301状态码保存一天

proxy_cache_valid any 1m;#其它的保存一分钟

}

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。