当前位置:首页 » 文件管理 » nginx清理缓存

nginx清理缓存

发布时间: 2022-02-14 09:12:42

① nginx 缓存怎么都在tmp

nginx缓存cache的5种方案
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 /html/;
proxy_store会将文件保存到这目录下
proxy_passhttp://www.jb51.net/;#后端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_passhttp://www.jb51.net/;
}
}

可以看到这个配置比404节约了不少代码,它是用!-f来判断请求的文件在文件系统上存不存在,不存在就proxy_pass到后端,返回同样是用proxy_store保存。
两种传统缓存都有着基本一样的优点和缺点:
缺点1:不支持带参数的动态链接,比如read.php?id=1,因为nginx只保存文件名,所以这个链接只在文件系统下保存为
read.php,这样用户访问read.php?id=2时会返回不正确的结果。同时不支持http://www.jb51.net/这种形式的首页和
二级目录http://www.jb51.net/download/,因为nginx非常老实,会将这样的请求照链接写入文件系统,而这个链接显然是一
个目录,所以保存失败。这些情况都需要写rewrite才能正确保存。
缺点2:nginx内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就会撑暴整个硬盘空间。为此可以使用一个shell脚本定期清理,同时可以撰写php等动态程序来做实时更新。
缺点3:只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力。
缺点4:nginx不会自动选择内存或硬盘作为存储介质,一切由配置决定,当然在当前的操作系统里都会有操作系统级的文件缓存机制,所以存在硬盘上也不需要过分担心大并发读取造成的io性能问题。
nginx传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。在生产应用中它常常用作和squid的搭档,squid对
于带?的链接往往无法阻挡,而nginx能将其访问拦住,例如:http://jb51.net/?和http://jb51.net/在squid上会
被当做两个链接,所以会造成两次穿透;而nginx只会保存一次,无论链接变成http://jb51.net/?1还是http://jb51.net
/?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.1.2:11211;
}
expires 70;
}

这个配置会将http://jb51.net/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 /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/;keys_zone为这个空间起个名
字,10m指空间大小为10MB;inactive的5m指缓存默认时长5分钟;max_size的2m是指单个文件超过2m的就不缓
存;clean_time指定一分钟清理一次缓存。

location / {
proxy_passhttp://www.jb51.net/;
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;#其它的保存一分钟
}

ps:支持cache的0.7.44到0.7.51这几个版本的稳定性均有问题,访问有些链接会出现错误,所以这几个版本最好不要在生产环境中
使用。nginx-0.7下目前所知较为稳定的版本是0.7.39。稳定版0.6.36版也是近期更新,如果在配置里没有使用到0.7的一些新标签新功
能,也可以使用0.6.36版。

Nginx缓存的内存占用问题的一般解决方法
1、前些日子某服务被刷,每分钟达到上几百万请求;当时采用了nginx cache来解决的;但是因为某服务不能缓存太久,当时设置了5s,那么带来的问题就是产生大量小文件,而且很快就删除了。

2、通过

free -m

会发现used是27G;但是通过top查看进程占的内存并没有那么多

那内存去哪了?

3、通过查阅资料会发现(cat /proc/meminfo)
Slab: 22464312 kB
SReclaimable: 16474128 kB (这些是内核保持的但是可以释放的inode和dentry的缓存)
SUnreclaim: 5990184 kB

4、这些内存为什么会不自动清理呢?
某机房机器系统版本:Linux 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(正常,没出现内存快到100%的情况)
某机房机器系统版本:Linux 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux (不释放)

5、通过设置如下参数来设置内存阀值

sysctl -w vm.extra_free_kbytes=6436787
sysctl -w vm.vfs_cache_pressure=10000

② nginx缓存目录temp可以删除吗

可以删除,它只是存放一些静态缓存数据,用户访问的时候,如果有就直接从缓存里取,没有的话直接访问代码。你删除之后,从新reload一次nginx就可以了。

③ nginx 缓存JS一小时,请问如何更新缓存

nginx 缓存 JS一小时,如下
location ~ .*\.(js|css)?$ {
expires 1h;
}

OK,这是没有问题的,我要临时刷新缓存,大不了加个后缀即可,例如:abc.js?v=123

④ nginx 重启后缓存会重新更新吗

​如果你用的是IE浏览器(就是有个e图标的),
就关闭浏览器。然后右键点击IE图标-属性,
点击第二行中间的“删除文件”就可以清理临时的文件了。
如果你用的是其他浏览器,
通常会在浏览器窗口右上角的“工具”菜单“清理上网记录”
(文字会有一点不同是正常的,不同的浏览器用不同的名字)
就可以清理了,不过如果是Firefox不太推荐用这个。
你也可以试试这个,把这行文字复制到记事本那里去。

⑤ 如何清理Nginx缓存

试试腾讯电脑管家2合1杀毒版,提供了更加丰富的安全管理辅助功能,改进了最重视的系统清理与电脑加速功能,此功能既可提高电脑性能,又能节省您的时间。
垃圾清理:点击清理后会自动扫描可清理的文件,显示可清理的文件大小,并以小字滚动查找到的垃圾文件。切换到传统界面中则可查看垃圾文件类型(上网垃圾、常用软件垃圾、使用痕迹等),可手动点选清理项。

⑥ nginx缓存清理

你找nginx配置中的expire参数,这个是设定缓存时间的,如果你不需要缓存,可以去掉该参数,或者是设置成-1,如下图所示:

⑦ nginx 反向代理怎么清楚网站缓存

你查看下缓存配置路径,直接删除缓存文件即可

⑧ nginx做缓存加速网站,如何清空网站缓存怎样删除缓存

我一般比你多配置这两个字段:
proxy_temp_path /home/temp_dir;
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
默认存放位置我没有细研究,删除缓存可以直接删除 /home/cache里面的所有内容即可删除所有缓存。还有如下配置可以实现有针对性的删除相应缓存文件:
#用于清除缓存,假设一个URL为http://192.168.1.1/test.txt,通过访问http://192.168.1.1/purge/test.txt就可以清除该URL的缓存。
location ~ /purge(/.*)
{
#设置只允许指定的IP或IP段才可以清除URL缓存。
#allow 127.0.0.1;
allow all;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}

热点内容
嵌入式linux开发环境搭建 发布:2024-10-25 16:26:51 浏览:325
奥迪a4l乞丐版什么配置 发布:2024-10-25 16:20:33 浏览:411
python读取txt文件数据 发布:2024-10-25 16:07:36 浏览:23
获取局域网服务器的真实ip 发布:2024-10-25 16:01:36 浏览:28
多线程程序java 发布:2024-10-25 15:58:32 浏览:228
安卓最大的图片是哪个 发布:2024-10-25 15:55:06 浏览:467
云服务器登录小号 发布:2024-10-25 15:41:34 浏览:402
在类的定义中访问权限 发布:2024-10-25 15:26:00 浏览:132
伦理离线缓存 发布:2024-10-25 15:25:56 浏览:429
帝豪中配配置怎么样 发布:2024-10-25 15:14:37 浏览:71