- 浏览: 567634 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
原文地址:http://bbs.linuxtone.org/thread-7120-1-1.html
nginx缓存cache的几种方式
官方详细参数:http://wiki.nginx.org/NginxHttpProxyModule
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 http://xok.la/;#后端upstream地址,/fetch同时是一个代理
proxy_set_header 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 http://xok.la/;
}
}
可以看到这个配置比404节约了不少代码,它是用!-f来判断请求的文件在文件系统上存不存在,不存在就proxy_pass到后端,返回同样是用proxy_store保存。
两种传统缓存都有着基本一样的优点和缺点:
缺点1:不支持带参数的动态链接,比如read.php?id=1,因为nginx只保存文件名,所以这个链接只在文件系统下保存为read.php,这样用户访问read.php?id=2时会返回不正确的结果。同时不支持http://xok.la/这种形式的首页和二级目录http: //xok.la/download/,因为nginx非常老实,会将这样的请求照链接写入文件系统,而这个链接显然是一个目录,所以保存失败。这些情况都需要写rewrite才能正确保存。
缺点2:nginx内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就会撑暴整个硬盘空间。为此可以使用一个shell脚本定期清理,同时可以撰写php等动态程序来做实时更新。
缺点3:只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力。
缺点4:nginx不会自动选择内存或硬盘作为存储介质,一切由配置决定,当然在当前的操作系统里都会有操作系统级的文件缓存机制,所以存在硬盘上也不需要过分担心大并发读取造成的io性能问题。
nginx 传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。在生产应用中它常常用作和squid的搭档,squid 对于带?的链接往往无法阻挡,而nginx能将其访问拦住,例如:http://xok.la/?和http://xok.la/在squid上会被当做两个链接,所以会造成两次穿透;而nginx只会保存一次,无论链接变成http://xok.la/?1还是http://xok.la/?123,均不能透过nginx缓存,从而有效地保护了后端主机。
nginx会非常老实地将链接形式保存到文件系统中,这样对于一个链接,可以很方便地查阅它在缓存机器上的缓存状态和内容,也可以很方便地和别的文件管理器如rsync等配合使用,它完完全全就是一个文件系统结构。
这两种传统缓存都可以在linux下将文件保存到/dev/shm里,一般我也是这么做的,这样可以利用系统内存来做缓存,利用内存的话,清理过期内容速度就会快得多。使用/dev/shm/时除了要把tmp目录也指向到/dev/shm这个分区外,如果有大量小文件和目录,还要修改一下这个内存分区的 inode数量和最大容量:
mount -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.6.2:11211;
}
expires 70;
}
这个配置会将http://xok.la/mem/abc指明到memcached的abc这个key去取数据。
nginx目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404定向到后端去写入数据。
4、基于第三方插件ncache
ncache是新浪兄弟开发的一个不错的项目,它利用nginx和memcached实现了一部分类似squid缓存的功能,我并没有使用这个插件的经验,可以参考:
http://code.google.com/p/ncache/
5、nginx新开发的proxy_cache功能
从nginx-0.7.44版开始,nginx支持了类似squid较为正规的cache功能,目前还处于开发阶段,支持相当有限,这个缓存是把链接用md5编码hash后保存,所以它可以支持任意链接,同时也支持404/301/302这样的非200状态。
配置:
首先配置一个cache空间:
proxy_cache_path /xok/to/cache levels=1:2 keys_zone=xok1:10m inactive=5m max_size=2m clean_time=1m;
proxy_temp_path参数路径也需要跟上面的proxy_cache_path在一个分区上,否则会报错。
注意这个配置是在server标签外,levels指定该缓存空间有两层hash目录,第一层目录是1个字母,第二层为2个字母,保存的文件名就会类似 /xok/to/cache/e/4a/0f1019b0db2f97d17c2238c0271a74ae;keys_zone为这个空间起个名字,10m指空间大小为10MB;inactive的5m指缓存默认时长5分钟;max_size的2m是指单个文件超过2m的就不缓存;clean_time指定一分钟清理一次缓存。
location / {
proxy_pass http://xok.la/;
proxy_cache xok1;#使用xok1这个keys_zone
proxy_cache_valid 200 302 1h;#200和302状态码保存1小时
proxy_cache_valid 301 1d;#301状态码保存一天
proxy_cache_valid any 1m;#其它的保存一分钟
}
综合起来可以简单优化静态文件:
location ~ .*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv)$
{
proxy_pass http://backend;
expires 6h; #设置浏览器过期时间
proxy_cache xok1;#使用xok1这个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这几个版本的稳定性均有问题,访问有些链接会出现错误,所以这几个版本最好不要在生产环境中使用。 nginx-0.7下目前所知较为稳定的版本是0.7.39。稳定版0.6.36版也是近期更新,如果在配置里没有使用到0.7的一些新标签新功能,也可以使用0.6.36版。
nginx缓存cache的几种方式
官方详细参数:http://wiki.nginx.org/NginxHttpProxyModule
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 http://xok.la/;#后端upstream地址,/fetch同时是一个代理
proxy_set_header 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 http://xok.la/;
}
}
可以看到这个配置比404节约了不少代码,它是用!-f来判断请求的文件在文件系统上存不存在,不存在就proxy_pass到后端,返回同样是用proxy_store保存。
两种传统缓存都有着基本一样的优点和缺点:
缺点1:不支持带参数的动态链接,比如read.php?id=1,因为nginx只保存文件名,所以这个链接只在文件系统下保存为read.php,这样用户访问read.php?id=2时会返回不正确的结果。同时不支持http://xok.la/这种形式的首页和二级目录http: //xok.la/download/,因为nginx非常老实,会将这样的请求照链接写入文件系统,而这个链接显然是一个目录,所以保存失败。这些情况都需要写rewrite才能正确保存。
缺点2:nginx内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就会撑暴整个硬盘空间。为此可以使用一个shell脚本定期清理,同时可以撰写php等动态程序来做实时更新。
缺点3:只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力。
缺点4:nginx不会自动选择内存或硬盘作为存储介质,一切由配置决定,当然在当前的操作系统里都会有操作系统级的文件缓存机制,所以存在硬盘上也不需要过分担心大并发读取造成的io性能问题。
nginx 传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。在生产应用中它常常用作和squid的搭档,squid 对于带?的链接往往无法阻挡,而nginx能将其访问拦住,例如:http://xok.la/?和http://xok.la/在squid上会被当做两个链接,所以会造成两次穿透;而nginx只会保存一次,无论链接变成http://xok.la/?1还是http://xok.la/?123,均不能透过nginx缓存,从而有效地保护了后端主机。
nginx会非常老实地将链接形式保存到文件系统中,这样对于一个链接,可以很方便地查阅它在缓存机器上的缓存状态和内容,也可以很方便地和别的文件管理器如rsync等配合使用,它完完全全就是一个文件系统结构。
这两种传统缓存都可以在linux下将文件保存到/dev/shm里,一般我也是这么做的,这样可以利用系统内存来做缓存,利用内存的话,清理过期内容速度就会快得多。使用/dev/shm/时除了要把tmp目录也指向到/dev/shm这个分区外,如果有大量小文件和目录,还要修改一下这个内存分区的 inode数量和最大容量:
mount -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.6.2:11211;
}
expires 70;
}
这个配置会将http://xok.la/mem/abc指明到memcached的abc这个key去取数据。
nginx目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404定向到后端去写入数据。
4、基于第三方插件ncache
ncache是新浪兄弟开发的一个不错的项目,它利用nginx和memcached实现了一部分类似squid缓存的功能,我并没有使用这个插件的经验,可以参考:
http://code.google.com/p/ncache/
5、nginx新开发的proxy_cache功能
从nginx-0.7.44版开始,nginx支持了类似squid较为正规的cache功能,目前还处于开发阶段,支持相当有限,这个缓存是把链接用md5编码hash后保存,所以它可以支持任意链接,同时也支持404/301/302这样的非200状态。
配置:
首先配置一个cache空间:
proxy_cache_path /xok/to/cache levels=1:2 keys_zone=xok1:10m inactive=5m max_size=2m clean_time=1m;
proxy_temp_path参数路径也需要跟上面的proxy_cache_path在一个分区上,否则会报错。
注意这个配置是在server标签外,levels指定该缓存空间有两层hash目录,第一层目录是1个字母,第二层为2个字母,保存的文件名就会类似 /xok/to/cache/e/4a/0f1019b0db2f97d17c2238c0271a74ae;keys_zone为这个空间起个名字,10m指空间大小为10MB;inactive的5m指缓存默认时长5分钟;max_size的2m是指单个文件超过2m的就不缓存;clean_time指定一分钟清理一次缓存。
location / {
proxy_pass http://xok.la/;
proxy_cache xok1;#使用xok1这个keys_zone
proxy_cache_valid 200 302 1h;#200和302状态码保存1小时
proxy_cache_valid 301 1d;#301状态码保存一天
proxy_cache_valid any 1m;#其它的保存一分钟
}
综合起来可以简单优化静态文件:
location ~ .*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv)$
{
proxy_pass http://backend;
expires 6h; #设置浏览器过期时间
proxy_cache xok1;#使用xok1这个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这几个版本的稳定性均有问题,访问有些链接会出现错误,所以这几个版本最好不要在生产环境中使用。 nginx-0.7下目前所知较为稳定的版本是0.7.39。稳定版0.6.36版也是近期更新,如果在配置里没有使用到0.7的一些新标签新功能,也可以使用0.6.36版。
发表评论
-
Nginx模块fastcgi_cache的几个注意点
2014-09-17 11:01 598原文地址:http://www.cnxct ... -
NGINX的流媒体插件 nginx-rtmp-module
2014-09-15 12:03 648http://www.oschina.net/p/nginx- ... -
nginx 自定义 header
2014-09-15 11:56 795$http_HEADER The value of the H ... -
nginx反向代理proxy_set_header自定义header头无效
2014-09-15 11:52 1364原文地址:http://www.ttlsa.com/nginx ... -
nginx 自定义协议 扩展模块开发
2014-09-15 09:33 995原文地址:http://blog.chin ... -
Nginx模块开发入门
2014-09-14 10:05 636原文地址:http://kb.cnblogs.com/page ... -
nginx log_format 记录自定义header信息
2014-09-12 17:53 2233原文地址:http://notelifes.com/2013/ ... -
在Nginx中记录自定义Header
2014-09-12 17:48 840原文地址:http://gunner.me ... -
nginx log 记录请求的头信息
2014-09-12 14:44 1082记录访问的log,为了在 ... -
nginx官网文档地址
2014-09-10 10:33 571原文地址:http://wiki.nginx.org/Ngin ... -
Nginx配置反向代理时cache缓存的使用方法
2014-09-10 10:32 911原文地址:http://www.server110.com/n ... -
Windows下Nginx+PHP5(FastCgi)安装配置详解
2014-08-25 16:46 858源文地址:http://www.china ... -
nginx 多域名虚拟主机配置 (nginx如何绑定多个域名)
2014-08-25 14:33 396原文地址:http://wenku.baidu.com/lin ... -
实例讲解Nginx下的rewrite规则
2014-06-17 14:44 783一.正则表达式匹配, ... -
使用nginx的proxy_cache做网站缓存
2014-02-25 18:08 811使用nginx的proxy_cache做网站缓存 2012年1 ... -
nginx cache静态化+tmpfs 高性能cdn方案 原创-胡志广
2014-02-25 18:04 852nginx cache静态化+tmpfs 高性能cdn方案 原 ...
相关推荐
【Nginx 静态文件缓存解决方案】 Nginx 是一款高性能的 HTTP 和反向代理服务器,常用于处理静态资源,以减轻后端服务器的压力。为了进一步提高静态资源的访问效率,我们可以利用 Nginx 的缓存功能。下面详细介绍...
ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_cache_purge on|off|<method> [from all|<ip> [.....
proxy_cache机制允许Nginx将从后端服务器获得的静态内容缓存到磁盘上,当相同请求再次发生时,可以直接从磁盘缓存中提供数据,而无需每次都向后端服务器获取。 proxy_cache的基本用法是在Nginx的配置文件中进行设置...
通过这种方式,NGINX可以隐藏后端服务器的细节,提供负载均衡,并且可以实现安全性和性能的提升。 在配置NGINX作为反向代理时,我们需要关注以下几个关键设置: 1. **代理连接超时**(proxy_connect_timeout):这...
总的来说,Nginx Cache Purge是Nginx缓存管理的有力工具,通过它,我们可以更灵活、更高效地控制Web服务的缓存,提供优质的用户体验。在日常运维中,理解并熟练运用Nginx Cache Purge,不仅能够提升网站性能,还能...
ngx_slowfs_cache 是 nginx 模块,允许缓存静态文件(使用 root 指令管理)。 这使得能够为存储在慢文件系统上的文件创建快速缓存。当缓存放置在与原点相同的速度磁盘上时,使用此模块没有意义。配置示例:http { ...
当遇到nginx缓存不生效的情况时,可以采取以下两种解决方案: 方法一:修改源服务器web程序响应的header 需要检查源服务器的web程序,确保其返回的HTTP响应头不包含上述禁止缓存的指令。如果这些指令是不必要的,...
srcache-nginx-module, 基于透明subrequest的任意 Nginx 位置缓存布局 电子邮件名称ngx_srcache - 基于透明subrequest的任意 Nginx 位置缓存布局:这里 MODULE 没有与 Nginx 源一起分发。 我们将看到安装说明( 参见...
在互联网技术领域中,Web缓存是一种提高网站响应速度和减少服务器负载的重要技术手段。Web缓存分为两大类:强缓存和协商缓存。本文重点讲述如何使用Nginx配置协商缓存的过程,以及协商缓存的工作原理,帮助大家在...
proxy_cache_path /nginx/cache/path levels=1:2 keys_zone=cache_test:2048m inactive=7d max_size=10g; ...... location ~ .(gif|jpg|jgep|png)$ { proxy_pass http://upstreams; proxy_ignore_headers X-...
它的高速读写性能和丰富的数据结构使得它成为Nginx缓存的理想选择。 以下是配置这个缓存系统的步骤: 1. 安装Nginx模块: 在Nginx配置过程中,需要添加srcache_nginx模块以及与Redis通信的模块(如redis-nginx-...
nginx-缓存控制没有缓存清除模块的 Nginx 缓存控制插件部分代码是基于其他 Nginx Cache Plugins 的代码,但这是设计为简单、轻量级的实现== 具体.... == Mark Jaquith 提出了使用强制动态页面加载的标头的基本设计,...
“nginx系列(十)nginx缓存代理proxy_cache和CDN实现的原理”这个标题揭示了本文将探讨的主题,主要集中在两个关键点上:一是Nginx的缓存代理机制proxy_cache,二是如何利用Nginx实现内容分发网络(CDN)的功能。...
nginx配置文件nginx.conf ,主要标记了nginx 的负载配置upstream,静态资源缓存,是否开启压缩
清理Nginx缓存文件的方法主要是通过删除缓存目录下的文件来实现。在使用Nginx作为缓存服务器时,相关缓存文件通常保存在proxy_temp_path指令指定的目录下。可以通过删除这个目录下的文件来手动清理缓存,或者使用...
实战nginx.pdf。主要内容包括:第1章 Nginx简介;第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;...第9章Nginx 的web缓存服务与新浪网的开源NCACHE模块;第10章Nginx 在国内知名网站中的应用案例..........