nginx静态资源优化实践
来源:互联网 发布:关于淘宝开店 编辑:程序博客网 时间:2024/05/14 17:35
众所周知,nginx是一款高性能的web和反向代理服务器,具有非常强大的功能,以及非常优越的性能。
本文只针对nginx处理静态资源的优化,阐述具体实践过程。
主要包括两个方面:gizp压缩、proxy cache缓存。
1.开启gzip压缩功能
gzip是一种压缩技术,静态资源的压缩率在30%左右,原理是服务端压缩后传递到浏览器进行解压解析,绝大部分浏览器都支持。
nginx开启gzip配置
http { gzip on; gzip_min_length 1k; gzip_buffers 16 64k; gzip_http_version 1.1; gzip_comp_level 4; gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; gzip_vary on;}
参数详细说明:
- gzip on; 开启giz模块,默认是关闭的。
- gzip_min_length 1k; 允许压缩的页面最小字节数,默认是全部都压缩,最好不要小于1k,因为小于1k的可能越压越大。
- gzip_buffers 4 16k; 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
- gzip_http_version 1.1; 设置http协议版本,只对1.1版本进行压缩。
- gzip_comp_level 4; gzip压缩比/压缩级别,压缩级别 1-9,级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)。
- gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;设置压缩文件类型,这里指定了html、js、css。
- gzip_vary on; 给http请求增加vary字段, 不支持gzip的不进行压缩处理。
在nginx中增加以上配置文件,重启之后再访问,在请求头中可以看到 Content-Encoding:gzip,说明已经起作用了。
jquery-1.10.2.min.js的原始大小是92k,压缩之后是32k
2.配置proxy cache缓存
proxy cache缓存是nginx将静态资源存放到指定目录,缓存命中后直接返回,不需要再转发到后端获取,加快了请求速度同时也减轻了后端的压力。
在配置之前,先增加一个模块ngx_cache_purge,是用来手动清除缓存的。
- 下载并解压purge模块
- 1
- 2
- 在nginx编译中增加该模块
- 1
- 2
- 3
nginx配置文件增加proxy cache:
http { proxy_temp_path /data/nginx-1.9/proxy_temp; proxy_cache_path /data/nginx-1.9/proxy_cache levels=1:2 keys_zone=cache_one:100m inactive=2d max_size=2g; upstream backend { server 192.168.3.*:8083 weight=1; server 192.168.3.*:8083 weight=1; } server { listen 80; server_name 192.168.3.*; root html; index index.html index.htm index.jsp; location ~ /purge(/.*) { allow 127.0.0.1; allow 101.71.*.*; deny all; proxy_cache_purge cache_one $host$1$is_args$args; error_page 405 =200 /purge$1; } location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { proxy_pass http://backend; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache cache_one; proxy_ignore_headers Cache-Control; add_header Nginx-Cache $upstream_cache_status; proxy_cache_valid 200 304 301 302 8h; proxy_cache_valid 404 1m; proxy_cache_valid any 2d; proxy_cache_key $host$uri$is_args$args; expires 30d; }}
参数详细说明:
- proxy_temp_path:缓存临时目录。后端的响应并不直接返回客户端,而是先写到一个临时文件中,然后被rename一下当做缓存放在 proxy_cache_path。
- proxy_cache_path:缓存目录,目录里的文件名是 cache_key 的MD5值。levels=1:2 表示采用2级目录结构;keys_zone=cache_one:100m inactive=2d max_size=2g;缓存区名称为cache_one;缓存的内存空间为100M,内存空间可多次使用;默认过期时间为2天,超过2天未被访问文件自动清除;最大文件存储为2G,超过后清除最少使用的数据。
- proxy_cache:引用前面定义的缓存区 cache_one。
- proxy_ignore_headers:忽略Cache-Control的请求头控制,依然进行缓存。例如对请求头设置cookie后,默认是不缓存的,需要增加忽略配置。
- proxy_cache_key:定义cache_key。
- proxy_cache_valid:为不同的响应状态码设置不同的缓存时间,比如200、302等正常结果可以缓存的时间长点,而404、500等缓存时间设置短一些,这个时间到了文件就会过期,而不论是否刚被访问过。
- expires :在响应头里设置Expires:或Cache-Control:max-age,返回给客户端的浏览器缓存失效时间。
- location ~ /purge(/.*) 是用于设置允许清除缓存的IP地址。
看一下请求效果,设置成功后,可以查看nginx的缓存状态,是否命中: Nginx-Cache:HIT。
静态文件被缓存后,更新时需要清除nginx cache,这里以get访问方式为例,清除成功提示。
(完)
0 0
- nginx静态资源优化实践
- nginx静态资源优化实践
- nginx配置-优化静态资源
- nginx 静态资源服务器
- Nginx静态资源部署
- Nginx静态资源缓存
- nginx 配置静态资源
- Nginx代理静态资源
- nginx 静态资源无法访问
- Nginx 配静态资源
- Nginx 静态资源访问
- nginx配置静态资源地址
- Nginx静态资源性能测试
- nginx静态资源缓存配置
- Nginx静态资源简单配置
- Nginx实现静态资源服务器
- nginx静态资源分离部署
- nginx 静态资源访问配置
- 网页中最常用的JS代码(js禁止右键、禁止复制)
- 微信小程序开发之圆形菜单 仿建行圆形菜单
- System.currentTimeMillis()计算方式与时间的单位转换
- 【JZOJ4919】神炎皇
- c#使用异步委托
- nginx静态资源优化实践
- 最复杂的数(约数个数定理+反素数性质)
- Android adb端口被占用的解决
- 进程管理(二)
- Network Saboteur(dfs+剪枝)
- oozie-4.0.0-cdh5.3.1环境搭建
- 使用Servlet3.0 java.lang.IllegalStateException: !asyncSupported
- Android上根据类名、包名打开应用
- MD(Message Digest ) 消息摘要算法之HMAC