缓存方法一:
location /cache/ {
root /web/cache;
if ( !-f $request_filename )
{
proxy_pass http://backend/;
}
proxy_store on;
........//中间是一些proxy的参数设置,可以根据需要添加
proxy_set_header Accept-Encoding '';( 让后端不要返回压缩的内容)
proxy_temp_path /home/tmp
}
缺点:
1不支持带参数的动态链接2 nginx内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就会撑暴整个硬盘空间。为此可以使用一个shell脚本定期清理,同时可以撰写php等动态程序来做实时更新 3只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力 4nginx不会自动选择内存或硬盘作为存储介质,一切由配置决定,当然在当前的操作系统里都会有操作系统级的文件缓存机制,所以存在硬盘上也不需要过分担心大并发读取造成的io性能问题(可以将缓存目录放到/dev/shm)
缓存方法二:
nginx 加memcached模块:
location /mem/ {
if ( $uri ~ "^/mem/([0-9A-Za-z_]*)$" )
{
set $memcached_key "$1";
memcached_pass 192.168.1.2:11211;
}
expires 70;
}(此为网上流传)
缓存方法三:
第三方插件ncache
http://code.google.com/p/ncache/
缓存方法四:
nginx新开发的proxy_cache功能
配置cache空间
proxy_cache_path /path/to/cache levels=1:2 keys_zone=NAME:10m inactive=5m max_size=2m;
location / {
proxy_pass http://www.sudone.com/;
proxy_cache NAME;#使用NAME这个keys_zone
proxy_cache_valid 200 302 1h;#200和302状态码保存1小时
proxy_cache_valid 301 1d;#301状态码保存一天
proxy_cache_valid any 1m;#其它的保存一分钟
}
支持cache的0.7.44到0.7.51这几个版本的稳定性均有问题
控制访问:
以下为字符串匹配操作符
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
if ($http_referer ~* domain.com) {
rewrite ^/ http://domain.com/images/fuck.gif
#return 403;
}
防盗链:
valid_referers none blocked www.123.net www.12.cn ;
if ($invalid_referer) {
rewrite ^/ http://domain.com/403.html;
#return 404;
}
还有一个防盗链的模块:NginxHttpAccessKeyModule有兴趣的朋友可以研究下
另附几个学习nginx 的好地方:
wiki.nginx.org//上面有nginx 的所有指令的大部分解释,对我已经够用了,还有个论坛讨论nginx 的各种问题,可以用来参考
www.nginx.cn //上面有几个nginx 和 apache squid 的架构研究,还有配置文件各种方法,挺全的