最近,参加了公司的组织的一个公开课,收获还是挺多的,下面来总结接一下:

一. 使用nginx来进行网页内容的压缩编码与传输速度的优化:

先来观察一下news.sina.com.cn在请求和传输的时候发生的一些信息:

来看一下请求的压缩信息:

 Accept-Encoding:gzip,deflate,sdch

再来看一下响应的头信息:

 Content-Encoding:gzip
Content-Length:

再把页面另存下来,观察,约10W字节,实际传输的36093字节

原因-------就在于gzip压缩上.

我们来看一下这个过程发生的一些原理分析:

 首先是浏览器---请求----> 声明可以接受 gzip压缩 或 deflate压缩 或compress 或 sdch压缩

 从http协议的角度看--请求头 声明 acceopt-encoding: gzip deflate sdch  (是指压缩算法,其中sdch是google倡导的一种压缩方式,目前支持的服务器尚不多)

 然后服务器-->回应---把内容用gzip方式压缩---->发给浏览器

 最后浏览器<-----解码gzip-----接收gzip压缩内容----最终将内容展示到页面上

好,这样使用了压缩算法的好处有哪些,我们来计算一下:

 推算一下节省的带宽:

 news.sina.com  PV  -3亿

 *^  *  *^ 字节 == 

 *^ *  * ^  * ^- = *K*G = 18T

 如果不进行压缩的话,每天全国范围内产生的带宽会多18T

 因此这样的话在全国范围内节省的带宽是非常惊人的

最后,我们来看一下gzip的一些常用的配置参数:

 gzip配置的常用参数

 gzip on|off;  #是否开启gzip
gzip_buffers 4K| 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [-] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css
gzip_vary on|off # 是否传输gzip压缩标志

注意:

图片/mp3这样的二进制文件,不必压缩

因为压缩率比较小, 比如100->80字节,而且压缩也是耗费CPU资源的.

比较小的文件不必压缩,

第二:我们再来看一下nginx的缓存设置,这个也是能够提高网站的性能的

我们的一个目的:对于网站的图片,尤其是门户站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存.

那这个时候,我们是可以使用nginx的expires的一些设置,在nginx中设置过期时间,非常的简单,我们可以在location或者if段里来写:

像这种格式:

 expires 30s;
expires 30m;
expires 2h;
expires 30d;

意思是非常好理解的。

再来看一下通常的304缓存手段和这个有啥区别:

1.304缓存手段的一个原理:

 首先是服务器响应文件内容是,同时响应etag标签(内容的签名,内容一变,他也变), 和 last_modified_since 2个标签值

 然后当浏览器下次去请求时,头信息发送这两个标签, 服务器检测文件有没有发生变化,如无,直接头信息返回 etag,last_modified_since

 通知浏览器内容无改变,最后直接调用本地缓存.

 在这个过程,客户端浏览器也是请求了服务器,虽然传着的内容极少,但是也是请求了服务器的一些资源的

对于变化周期较短的,如静态html,js,css,比较适于用这个方式

nginx的gzip选项和expire过期时间记录的更多相关文章

  1. nginx优化--gzip压缩与expire浏览器缓存

    gzip压缩 概述 网页在服务器端经过了gzip或者其他格式的压缩后的输出明显减少了content-length字节,当访问过百万时,这些减少的字节就会变为客观的流量给节约下来;从而减轻服务器的压力以 ...

  2. redis数据库如何批量删除键和设置过期时间?

    我们可以借助Linux中的xargs,在终端中执行命令来实现这两个功能. 一.批量删除键 批量删除以"key"开头key的方法,需要借助Linux中的xargs,在终端中执行以下命 ...

  3. Nginx设置静态页面压缩和缓存过期时间的方法

    使用nginx服务器的朋友可能都知道需要设置html静态页面缓存与页面压缩与过期时间的设置了,下面我来给各位同学介绍一下配置方法,包括对ico,gif,bmp,jpg,jpeg,swf,js,css, ...

  4. Nginx设置静态页面压缩和缓存过期时间的方法 (转)

    使用nginx服务器的朋友可能都知道需要设置html静态页面缓存与页面压缩与过期时间的设置了,下面我来给各位同学介绍一下配置方法,包括对ico,gif,bmp,jpg,jpeg,swf,js,css, ...

  5. Nginx访问日志、 Nginx日志切割、静态文件不记录日志和过期时间

    1.Nginx访问日志 配制访问日志:默认定义格式: log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_loc ...

  6. Nginx 过期时间

    客户端(浏览器)访问服务器上的资源后,会缓存在浏览器中,对于一些经常变更的静态资源,我们可以设置缓存时间,也就是设置静态资源的过期时间 [root@localhost ~]$ cat /usr/loc ...

  7. (转)网站速度优化技巧:Nginx设置js、css过期时间

    网站速度优化技巧:Nginx设置js.css过期时间 原文:http://www.webkaka.com/blog/archives/Nginx-set-the-expiration-time-for ...

  8. Nginx访问日志、日志切割、静态文件不记录日志和过期时间

    6月8日任务 12.10 Nginx访问日志12.11 Nginx日志切割12.12 静态文件不记录日志和过期时间 12.10 Nginx访问日志 除了在主配置文件nginx.conf里定义日志格式外 ...

  9. redis 下key的过期时间详解 :expire

    memcached 和 redis 的set命令都有expire参数,可以设置key的过期时间.但是redis是一个可以对数据持久化的key-value database,它的key过期策略还是和me ...

随机推荐

  1. Unity Sprite转Prefab

    新项目使用Unity5.X,遇到了一些问题,其中就有Sprite的管理更新问题,查了一些资料,Mono推荐的是转为Prefab处理. 看了一些国外同行的处理方法,分析了一个编辑器插件脚本.学到了一些技 ...

  2. [GodLove]Wine93 Tarining Round #3

    比赛链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=44857#overview 题目来源: ZOJ Monthly, July 2 ...

  3. bigworld源码分析(3)——dbMgr分析

    dbMgr主要是玩家数据的读取和保存的,例如在bigworld源码分析(3)中,玩家在认证的时候,loginApp需要通过dbMgr来验证玩家数据是否合法,这就是针对玩家的账号数据进行查询.本篇中,我 ...

  4. Socket编程基础——无连接UDP

    与面向连接的网络连接相比,无连接的网络通信不需要在服务器与客户端之间建立连接.面向非连接的Socket通信是基于UDP的,服务器端不需要调用listen()和accept()函数来等待客户端的连接:客 ...

  5. phpstorm 激活

    http://idea.lanyus.com/

  6. 地址(Address)——WCF学习笔记(2)

    地址(Address)分为: 统一资源表示(URI). EndpointAddress. 端口共享. 逻辑地址与物理地址. 请求监听与消息分发.

  7. 黑马程序员——JAVA基础之编码表

    ------- android培训.java培训.期待与您交流! --------- 字符编码  字符流的出现为了方便操作字符.  更重要是的加入了编码转换.  通过子类转换流来完成. •  I ...

  8. CentOS 7 安装 Oracle 11g

    新到的云主机环境,系统是CentOS 7 x86_64,需要安装上安装Oracle11.2g.摸索很长时间,终于折腾搞定了. 下载 Oracle 下载地址:Oracle 11.2.0.2 (因为不是已 ...

  9. [WCF]设置拦截器捕捉到request和reply消息

    WCF进阶学习ing... 在熟练掌握了ABC的使用以后,就开始想着去了解WCF是怎么通信的了.首先是服务描述语言wsdl,它定义了服务的描述等等,用于让外界知道这个服务的ABC是什么.另外一个比较重 ...

  10. BigDecimal在实际项目的应用及遇到的问题

    我们都知道,java中对大小数,高精度的计算都会用到BigDecimal.但是在实际应用中,运用BigDecimal还是会遇到一些问题.下面说一下我在项目中怎么样BigDecimal和遇到的一些问题. ...