`
willko
  • 浏览: 383594 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

nginx 预压缩(gzip)静态文件

阅读更多
对于静态文件先压缩再输出是再正常不过的事了,但是这种压缩都是动态的,在每次请求都会先压缩再输出,大大浪费了很多cpu。如果前端加了反向代理缓存,那能减少这种浪费。但不是每个生产环境前端都有缓存的。而nginx有个模块Gzip Precompression,这个模块的作用是对于需要压缩的文件,直接读取已经压缩好的文件(文件名为加.gz),而不是动态压缩,对于不支持gzip的请求则读取原文件。

编译nginx的时候需要把--with-http_gzip_static_module参数加上。

配置:
#启动预压缩功能,对所有类型的文件都有效
gzip_static on;

#找不到预压缩文件,进行动态压缩
gzip on; 
gzip_min_length 1000;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_types text/plain application/x-javascript text/css application/xml;

#gzip公共配置
gzip_http_version 1.1
gzip_proxied expired no-cache no-store private auth;

#纠结的配置
#对于ie有个bug,响应vary头后将不会缓存请求,每次都会重新发新的请求。所以,对于ie 1-6直接禁用gzip。
gzip_disable "MSIE [1-6]\.";
#开启Http Vary头,vary头主要提供给代理服务器使用,根据Vary头做不同的处理。例如,对于支持gzip的请求反向代理缓存服务器将返回gzip内容,不支持gzip的客户端返回原始内容。
gzip_vary on;

  1. gzip_static配置优先级高于gzip
  2. 开启nginx_static后,对于任何文件都会先查找是否有对应的gz文件
  3. gzip_types设置对gzip_static无效
为了方便生产环境自动生成压缩文件,写了一条命令自动完成这些事情
  • 根据文件后缀名遍历需要压缩的文件
  • 对比文件的修改时间
  • 自动调用gzip生成压缩文件
find ./ -type f -printf '%TY %Tm %Td %TH %TM %TS\t%p\n'
| grep -iE '\.(html|txt|css|js)$'
| awk -F'\t' '{

gz_file=$2 ".gz";
stat_cmd="stat -c \"%Y\" " gz_file;
exist_cmd="[  -e \"" gz_file "\" ] && echo 1 || echo 0";

exist_cmd | getline gz_file_exist;

if (gz_file_exist) {
    stat_cmd | getline last_modify_timestamp;
} else {
    last_modify_timestamp=0;
}

if (last_modify_timestamp < mktime($1)) {
    system("gzip -c9 " $2 " > " gz_file);
    print gz_file " [created]";
}

}'


chrome将不会支持gzip了,而用SDCH,SDCH比较像浏览器级的minify
分享到:
评论
3 楼 lck140 2013-08-01  
lck140 写道
我照着楼主的方法试了一天了,根本就不行。是不是有哪没弄好,请高人明示!!
在linux下,ngnix1.5-->解压-->编译-->安装,完成了楼主指出的所有配置后。
我的测试结果:发现压缩后的文件 jquery.gz.js 被加载到jsp页面后,加载的体积是变小了,但它没被解压。报脚本错误。
结论:以上描述不正确,无法实现静态压缩文件传输。
求 指点

我用了IE,firefox,chrome 三种浏览器测试结果都是一样。浏览器没把jquery.gz.js 当成gzip文件处理。
2 楼 lck140 2013-08-01  
我照着楼主的方法试了一天了,根本就不行。是不是有哪没弄好,请高人明示!!
在linux下,ngnix1.5-->解压-->编译-->安装,完成了楼主指出的所有配置后。
我的测试结果:发现压缩后的文件 jquery.gz.js 被加载到jsp页面后,加载的体积是变小了,但它没被解压。报脚本错误。
结论:以上描述不正确,无法实现静态压缩文件传输。
求 指点
1 楼 iwlk 2013-01-25  
chrome 是支持gzip的, 只是添加了sdch~  大家都不看好sdch! 兼容性呀~



而nginx有个模块Gzip Precompression,这个模块的作用是对于需要压缩的文件,直接读取已经压缩好的文件(文件名为加.gz),而不是动态压缩,
--------
这个功能不错,一直是我想要的,我用的是apache,一直没有想明白,apache为什么不加此功能! 看来我要改用nginx了

相关推荐

    nginx简单的负载,缓存静态文件配置

    nginx配置文件nginx.conf ,主要标记了nginx 的负载配置upstream,静态资源缓存,是否开启压缩

    Nginx服务器实现数据静态压缩的方法

    nginx实现静态压缩这种做法其实就像apache gzip压缩了,这种压缩是我们常见的一些事情了,下面我来介绍一些做法。 在搭建squid网页加速的时候,对于大的css 或者js要进行压缩,然后再进行缓存,这样能够提高减小下载量...

    Gzip压缩无效的终极解决方案!

    4、单击“服务”标签,选中“压缩应用程序文件”和“压缩静态文件”,同时根据情况设置临时目录的最大容量,初期可以限制为1G左右; 5、返回Internet信息服务(IIS)管理器,右击“Web服务扩展”,弹出Web服务扩展...

    nginx 1.9 window 版本

    #静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/htdocs; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小...

    whitenoise:彻底简化了Python Web应用程序的静态文件服务

    WhiteNoise为您提供最佳实践,例如: 提供压缩的内容(gzip和Brotli格式,正确处理Accept-Encoding和Vary标头) 在不会改变的内容上设置远距离缓存头担心使用Python提供静态文件的效率非常低吗? 还是认为您应该...

    Linux上安装搭建Nginx服务器的详细步骤

    1.将nginx的压缩包nginx-1.8.0.tar.gz上传到Linux服务器 2.由于nginx是C语言开发的并且我们这里是通过编译...4.zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zl

    nginx-craft:用于Craft CMS的Nginx虚拟主机配置,实现了许多最佳实践

    启用通过提供的静态gzip文件 添加XSS和其他安全标头 Gzip压缩 基于文件名的缓存破坏静态资源 IPv4和IPv6支持 http2支持 合理的SSL密码套件和TLS协议 本地化网站 服务器端包含 (可选)包括生成的.env文件 假设 以下...

    使用Awstats分析Nginx的访问日志.doc

    但不足之处是这类网站只能对页面进行分析,不包括静态文件;另外可能有很多的站长不愿意使用这类工具来暴露自己的数据,种种的这些因素使站长希望自己来分析访问日志。而awstats就可以满足所有的这些需求。 Awstats...

    Nginx代理axios请求以及注意事项详解

    由于nginx.conf配置信息较多,本篇只关注跟axios和静态资源请求设置,顺便也将常见的一些配置项备注一下。具体设置如下: # 设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #连接超时时间 ...

    基于Nginx的衍生版服务器Tengine简介

    1.处理静态文件,索引文件以及自动索引;打开文件描述符缓存; 2.使用缓存加速反向代理;简单负载均衡以及容错; 3.远程FastCGI,uwsgi,SCGI,和memcached服务的缓存加速支持;简单的负载均衡以及容错; 4.模块化的...

    Linux 系统 nginx 服务器安装及负载均衡配置详解

    nginx 可以提供 HTTP 服务,包括处理静态文件,支持 SSL 和 TLS SNI、GZIP 网页压缩、虚拟主机、URL 重写等功能,可以搭配 FastCGI、uwsgi 等程序处理动态请求。 此外,nginx 还可以用于代理、反向代理、负载均衡、...

    nginx+vue.js实现前后端分离的示例代码

    静态资源输出更快,可以对资源实现gzip压缩后输出(这也是本文为什么用它做静态资源访问的一个重要原因) 适合解决跨域问题和反向代理(因为谁也不想看到在本域名下看到访问其他域名的情况发生,跨域可导致csrf攻击,这是...

    浅谈VUE单页应用首屏加载速度优化方案

    使用nginx开启gzip减小网络传输的流量大小 webpack开启gzip压缩 若首屏为登录页,可以做成多入口,登录页单独分离为一个入口 使用CDN资源,减小服务器带宽压力 在index.html中引入cdn资源 ... &lt;body&gt; ...

    heroku_rails_deflate:激活机架

    Heroku Cedar堆栈没有资产服务器(例如Varnish或nginx)前置,并且没有自动配置将gzip压缩用于HTTP传输。 同时,Rails 3.2资产管道花费大量CPU周期来创建所有静态资产的高度压缩版本。 最好使用它们! 该宝石为...

    errand-runner:任务运行器-应用程序

    静态资产(CDN)-最小化+压缩,gzip 设置Nginx-服务器静态资产 骨融合 修复电子邮件API-消息(BG任务) 验证表格 URL路由-删除名称/ RESTfull-/ task / addTask | edit | myTasks | profile 与Redis的会议 ...

    web:Web是网站和Web应用程序的前端下降。 消耗来自DADI API等的数据

    它内置了对以下内容的支持:旋转日志文件,Nginx样式的HTTP访问日志,GZip压缩,按mime类型进行缓存,URL重写,数据库支持的会话等。 DADI Web是DADI的一部分, 是覆盖整个开发堆栈的一组组件,旨在提高性能和规模...

    buses:一个位置感知、移动、速度极快的伦敦巴士到达网站

    巴士一个位置感知、移动、速度极快的伦敦巴士到达网站。... 它使用 Flask、AngularJS 和 nginx。设置ProTip:trade_mark: 确保你... 所有静态内容都被缓存和 gzip 压缩,因此您的下一个页面加载速度将非常快。开发环境设置

Global site tag (gtag.js) - Google Analytics