Nginx 静态压缩/缓存
为什么80%的码农都做不了架构师?>>>
对静态压缩的一些配置信息
# 这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,# 建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。open_file_cache max=204800 inactive=20s;# open_file_cache 指令中的inactive 参数时间内文件的最少使用次数,# 如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个# 文件在inactive 时间内一次没被使用,它将被移除。open_file_cache_min_uses 1;# 这个是指多长时间检查一次缓存的有效信息open_file_cache_valid 30s;# 默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不# 少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对text/html进行压缩 ,# 如果要对html之外的内容进行压缩传输,我们需要手动来设置。gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml;//手动设置
实验如下:当没有设置压缩类型时的情况,只会对text/html类型的文件进行压缩。
配置文件nginx.conf
http {server {listen 80;gzip on;location /welcome{default_type text/html;content_by_lua 'ngx.say("<p>welcome,here!</p>")';}location /index.html{root /usr/local/work/yidaren.top/html; }location /{proxy_pass http://127.0.0.1/index.html;}location ~*\.js$ { root /usr/local/work/yidaren.top;}}
}
请求welcome和js对比():
配置反向缓存文件,专门给动态生成页面配置的数据:
1 proxy_cache语法:proxy_cache zone_name;
默认值:None
使用字段:http, server, location
设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。
在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”以及其他等。然而,目前nginx会忽略一些缓存控制指令,如:”private”和”no-store”,同样,nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0″头,或者proxy_cache_key包含用户指定的数据如$http_cookie_xxx,在proxy_cache_key中使用一部分cookie的值可以防止缓存私有数据,所以可以分别指定location以便分开私有数据和公有数据。
缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。2 proxy_cache_key语法:proxy_cache_key line;
默认值:$scheme$proxy_host$request_uri;
使用字段:http, server, location
指令指定了包含在缓存中的缓存关键字。proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_key "$scheme$host$request_uri";3 proxy_cache_path语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
默认值:None
使用字段:http
指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5 码。levels参数指定缓存的子目录数,例如:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
文件名类似于:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
所有活动的key和元数据存储在共享的内存区域中,这个区域用keys_zone参数指定,如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。
cache manager进程控制磁盘的缓存大小,在max_size参数中定义,超过其大小后最少使用数据将被删除。
区域的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节,当区域满了以后key将按照LRU(最近最少使用算法)进行处理。
proxy_cache_path和proxy_temp_path应该使用在相同的文件系统上。4 proxy_cache_methods语法:proxy_cache_methods [GET HEAD POST];
默认值:proxy_cache_methods GET HEAD;
使用字段:http, server, location
GET/HEAD用来装饰语句,即你无法禁用GET/HEAD即使你只使用下列语句设置:proxy_cache_methods POST;5 proxy_cache_min_uses语法:proxy_cache_min_uses the_number;
默认值:proxy_cache_min_uses 1;
使用字段:http, server, location
多少次的查询后应答将被缓存,默认1。6 proxy_cache_valid语法:proxy_cache_valid reply_code [reply_code ...] time;
默认值:None
使用字段:http, server, location
为不同的应答设置不同的缓存时间,例如:proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_valid 5m;proxy_cache_valid 200 302 10m;proxy_cache_valid 301 1h;proxy_cache_valid any 1m;7 proxy_cache_use_stale为了防止缓存失效(在多个线程同时更新本地缓存时),你可以指定’updating’参数,它将保证只有一个线程去更新缓存,并且在这个线程更新缓存的过程中其他的线程只会响应当前缓存中的过期版本。代码及configure配置:
在ngx_http_proxy_module.c里面定义了每个指令的钩子(即callback),它们在读取配置文件时会被调用。在configure的时候只需要把“HTTP_CACHE”设置为YES(可以找到auto/options里面HTTP_CACHE那行)。“proxy_cache_purge”指令需要下载nginx add-ons里面的“Cache Purge”模块,并在configure的时候用"--add-module="来加载代码。
配置文件如下:
http {proxy_cache_path /usr/local/work/cache levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=60muse_temp_path=off;server {listen 80;gzip on;location /welcome{default_type text/html;content_by_lua 'ngx.say("<p>welcome,here!</p>")';}location /index.html{root /usr/local/work/yidaren.top/html; }location /{proxy_pass http://127.0.0.1/index.html;}location ~*\.js$ {proxy_cache my_cache;proxy_cache_key $host$uri;proxy_cache_valid 200 304 30m; root /usr/local/work/yidaren.top;}}
}
验证如下:
网页加载效果如下:
如何验证,我们可以进入我设置cache的页面使用 ll命令就可以查看结果
[root@iZm5eg3u73g9nvjmiwu3opZ caches]# ll
总用量 8
drwx------ 3 nobody nobody 4096 10月 20 22:56 3
drwx------ 3 nobody root 4096 10月 20 22:56 temp
证明对反向代理的数据进行了缓存,这种技术对于反向代理是动态生成数据的情况下有和强大的效果,例如php,当然lua应该也是可以的。
如果你要清除某一个url的缓存文件,就比较悲催了。但也不是不能做到。因为nginx生成url文件的时候,存放的目录以及生成的哈希文件名都是固定的,你也可以使用proxy_cache_key来指定生成的key的字段内容。
如果你掌握它的生成规则,你就可以写一个管理器来快速清空单个url缓存。最烂的方法也可以把缓存目录清空,接着访问你要需要单独清空的url,然后再到缓存目录里看看生成的缓存目录与文件名,再你需要单独清空这个url的缓存时直接把文件干掉就好。
本身的静态文件:
open_file_cache max=102400 inactive=20s;
参考好文章:http://www.qttc.net/201307355.html
:http://xuewb.com/ngx/static_file.html
:http://www.cnblogs.com/dudu/p/4597351.html
纸上得来终觉浅,觉知此事要躬行
转载于:https://my.oschina.net/QAAQ/blog/761482
Nginx 静态压缩/缓存相关推荐
- Nginx 静态资源缓存配置
示例 # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|m ...
- nginx静态文件缓存
nginx的一大功能就是完成静态资源的分离部署,减轻后端服务器的压力,如果给这些静态资源再加一级nginx的缓存,可以进一步提升访问效率. 第一步:添加nginx.conf的http级别的缓存配置 # ...
- nginx静态资源缓存与压缩
一.静态资源缓存 参考文章 (1)apache设置max-age或expires 这里需要修改.htaccess文件. <IfModule mod_headers.c><FilesM ...
- nginx静态资源缓存和gzip压缩
其实这章主要就是优化访问时间和减少宽带问题 优化访问时间,一般css,js,woff还有图片都是静态文件,是一般都不用更改得,如果每次请求都要走tomcat,都是要耗时一些的,那么可以第一次访问的时候 ...
- 性能优化:nginx静态压缩,网页速度倍级提升
随着项目的不断优化迭代,加入了许多高大上且卷的功能,是相当炫酷了. 比方说:Antv 的L7.G2.G6.Echart,集众多优秀的组件于一身(它们真的很大,非常大),固然越走越沉重,是时候减负了! ...
- nginx 静态文件缓存
目的: 缓存nginx服务器的静态文件.如css,js,htm,html,jpg,gif,png,flv,swf,这些文件都不是经常更新.便于缓存以减轻服务器的压力. 实现: nginx proxy_ ...
- 前端web:浏览器静态资源缓存策略
浏览器静态资源缓存策略 浏览器其实提供了两种控制策略,分别是强制缓存和协商缓存 强制缓存 强制缓存:就是强制使用浏览器缓存下来的资源; 在指定的一段时间内用自己缓存的文件就行,不需要再次发出请求. 具 ...
- nginx静态资源服务器简单配置
传统的web项目,一般都将静态资源存放在 webroot的目录下,这样做很方便获取静态资源,但是如果说web项目很大,用户很多,静态资源也很多时,服务器的性能 或许就会很低下了.这种情况下一般都会需要 ...
- Nginx安装,Nginx静态缓存,Nginx Gzip压缩,Nginx负载均衡,Nginx方向代理,Nginx+Tomcat+Redis做session共享
Nginx安装 nginx-1.10.1.tar.gz安装,参考http://blog.csdn.net/tototuzuoquan/article/details/47381907. 修改nginx ...
最新文章
- JPA基础(二)(转)
- python【蓝桥杯vip练习题库】ADV-187 勾股数
- CV之IS:计算机视觉之图像分割(Image Segmentation)/语义分割算法的简介、使用方法、案例应用之详细攻略
- dell笔记本指示灯闪烁_带你认识电脑电源状态指示灯不同亮度不同含义
- 做程序员如何防止被裁员?我们既要干好主业,也要发展好副业,跟这些公众号大佬们向上生长...
- ListMapSet的操作和遍历 1
- 步步深入MySQL:架构-gt;查询执行流程-gt;SQL解析顺序!
- 在 GitHub 上收获 6519 颗 Star 的 Python 面试题资源,到底有多牛?
- paip.提升用户体验---WEB程序页面的手机及平板浏览器兼容支持
- oracle 获取awk报告,Oracle 使用 ass.awk 工具查看 system state dump 说明
- Java---遍历Map集合的三种方式
- 如何在百度收录平台注册账号获取Token
- C语言 fwrite 覆盖文件原始数据问题
- 沉迷那一抹秋色·禾木
- 这三年沉淀的前端错误监控系统,一篇文章讲透给你
- win10 休眠不读u盘_win10电脑不读u盘如何修复
- solidity经典案例----智能小游戏
- 【matlab】GMSK高斯最小频移键控
- Html:小技巧:自动提交表单的实现方法
- Reinforcement Learning | 强化学习十种应用场景及新手学习入门教程