文档章节

利用Apache mod_expires 与 mod_headers 实现文件缓存及mod_deflate压缩输出

kirsmile
 kirsmile
发布于 2017/06/18 13:48
字数 1641
阅读 8
收藏 0

1.使用mod_deflate module 压缩输出(启动gzip)


开启mod_deflate

[plain]  view plain  copy
  1. sudo a2enmod deflate  
  2. sudo /etc/init.d/apache2 restart  
在httpd.conf中添加

[plain]  view plain  copy
  1. <IfModule mod_deflate.c>  
  2. #单独设置需要压缩的类型  
  3. AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css  
  4. AddOutputFilterByType DEFLATE application/x-javascript  
  5. </IfModule>  
如默认所有输出都需要压缩,只排除部分。

[plain]  view plain  copy
  1. <IfModule mod_deflate.c>  
  2. SetOutputFilter DEFLATE #插入过滤器,gzip所有输出  
  3.   
  4. #设置不压缩的类型  
  5. SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary  
  6. SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary  
  7. SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary  
  8. </IfModule>  


2.利用Apache mod_expires 与 mod_headers 实现文件缓存


开启 mod_expires 与mod_headers

[plain]  view plain  copy
  1. sudo a2enmod expires  
  2. sudo a2enmod headers  
  3. sudo /etc/init.d/apache2 restart  
利用mod_expires,在httpd.conf中添加

[plain]  view plain  copy
  1. <IfModule mod_expires.c>  
  2. ExpiresActive on #开启  
  3. ExpiresDefault A300 #默认  
  4. ExpiresByType text/html A300  
  5. ExpiresByType text/css A2592000 # 30天  
  6. ExpiresByType image/gif A2592000  
  7. ExpiresByType image/jpeg A2592000  
  8. ExpiresByType application/x-javascript A2592000  
  9. </IfModule>  
利用mod_headers,在httpd.conf中添加

[plain]  view plain  copy
  1. <IfModule mod_headers.c>  
  2. <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">  
  3. Header set Cache-Control "max-age=604800, public"  
  4. </FilesMatch>  
  5. <FilesMatch "\.(xml|txt)$">  
  6. Header set Cache-Control "max-age=18000, public, must-revalidate"  
  7. </FilesMatch>  
  8. <FilesMatch "\.(html|htm|php)$">  
  9. Header set Cache-Control "max-age=3600, must-revalidate"  
  10. </FilesMatch>  
  11. </IfModule>  


3.Cache-Control说明:


网页的缓存是由 HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must- revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:


(1) 打开新窗口
    值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。
    而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
    Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)

(2) 在地址栏回车
    值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。
    值为no-cache,那么每次都会访问。
    值为max-age,则在过期之前不会重复访问。

(3) 按后退按扭
    值为private、must-revalidate、max-age,则不会重访问,
    值为no-cache,则每次都重复访问

(4) 按刷新按扭
    无论为何值,都会重复访问

Cache-Control(常规标头,HTTP1.1)

.public:(仅为响应标头)    
        响应:告知任何途径的缓存者,可以无条件的缓存该响应.
.private(仅为响应标头)    
响应:告知缓存者(据我所知,是指用户代理,常见浏览器的本地缓存.用户也是指,系统用户.但也许,不应排除,某些网关,可以识别每个终端用户的情况),只针对单个用户缓存响应. 且可以具体指定某个字段.如private –“username”,则响应头中,名为username的标头内容,不会被共享缓存.
.no-cache:    
        请求: 告知缓存者,必须原原本本的转发原始请求,并告知任何缓存者,别直接拿你缓存的副本,糊弄人.你需要去转发我的请求,并验证你的缓存(如果有的话).对应名词:端对端重载.    
        响应: 允许缓存者缓存副本.那么其实际价值是,总是强制缓存者,校验缓存的新鲜度.一旦确认新鲜,则可以使用缓存副本作为响应. no-cache,还可以指定某个包含字段,比如一个典型应用,no-cache=Set-Cookie. 这样做的结果,就是告知缓存者,对于Set-Cookie字段,你不要使用缓存内容.而是使用新滴.其他内容则可以使用缓存.
.no-store:    
        请求:告知,请求和响应都禁止被缓存.(也许是出于隐私考虑)    
        响应:同上.
.max-age:    
        请求:强制响应缓存者,根据该值,校验新鲜性.即与自身的Age值,与请求时间做比较.如果超出max-age值,则强制去服务器端验证.以确保返回一个新鲜的响应.其功能本质上与传统的Expires类似,但区别在于Expires是根据某个特定日期值做比较.一但缓存者自身的时间不准确.则结果可能就是错误的.而max-age,显然无此问题. Max-age的优先级也是高于Expires的.
        响应:同上类似,只不过发出方不一样.
.max-stale:    
        请求:意思是,我允许缓存者,发送一个,过期不超过指定秒数的,陈旧的缓存.    
        响应:同上.
.must-revalidate(仅为响应标头)    
        响应:意思是,如果缓存过了新鲜期,则必须重新验证.而不是试图返回一个不在新鲜期的缓存.与no-cache的区别在于,no-cache,完全无视新鲜期的概念.总是强制重新验证.理论上,must-revalidate更节省流量,但相比no-cache,可能并不总是那么精准.因为即使缓存者,认为是新鲜的,也不能保证服务器端没有做过更新.如果缓存者是一个缓存代理服务器,如果其试图重新验证时,无法连接上原始服务器,则也不允许返回一个不新鲜的,缓存中的副本.而是必须返回一个504 Gateway timeout.
.proxy-revalidate(仅为响应标头)    
        响应:限制上与must-revalidate类似.区别在于受体的范围.proxy-revalidate,是要排除掉用户代理的缓存的.即,其规则并不应用于用户代理的本地缓存上.
.min-fresh(仅为请求标头)    
        请求:告知缓存者,如果当前时间加上min-fresh的值,超了该缓存的过期时间.则要给我一个新的.其实个人觉得,其功能上有点和max-age类似.但是更大的是语义上的区别.
.only-if-cached:(仅为请求标头)    
        请求:告知缓存者,我希望内容来自缓存,我并不关心被缓存响应,是否是新鲜的.
.s-maxage(仅为响应标头)    
        响应:与max-age的唯一区别是,s-maxage仅仅应用于共享缓存.而不引用于用户代理的本地缓存,等针对单用户的缓存. 另外,s-maxage的优先级要高于max-age..cache-extension (cache-extension是一个泛化的代称.它指所有自定义,或者说扩展的,指令,客户端和服务器端都可以自定义扩展Cache-Control相关的指令.)    那么,实际上我们可以这样 Cache-Control:max-age=300, custom-directive = xxx, public. 这样我们就定义了一个被统称为cache-extension的扩展指令.该指令如果对应的客户端或服务器端,不认识,就会忽略掉.
.no-transform     
        请求:告知代理,不要更改媒体类型,比如jpg,被你改成png.    
        响应:同上.


本文转载自:http://blog.csdn.net/qq_34857250/article/details/54289985

kirsmile
粉丝 0
博文 25
码字总数 6488
作品 0
私信 提问
阿里云 Ubuntu14.04安装PHP+MySQL+Apache

1,更新镜像源 sudo apt-get update 2,安装基础包 sudo apt-get install apache2 sudo apt-get install php5 libapache2-mod-php5 sudo apt-get install mysql-server libapache2-mod-auth-m......

莱菔籽
2016/12/27
17
0
Linux WEB服务器搭建-Apache篇

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它...

tom_tuwei
2017/12/09
0
0
Apache-gzip压缩-mod_deflate

135956557-小三IT自学群,任何IT问题都可以一起讨论,各种服务网络等等 ------------------------------------------------------------------------------- gzip可以加速网站,压缩比率可以80%...

动力在于作
2017/03/31
0
0
请问如何让nginx支持apache的mod_rewrite, mod_headers, mod_expires, mod_deflate ?

今天遇到一个郁闷的难题,自己好不容易搞到的一个cms网站代码 在nginx上无法运行,提示如下 What do I need to run this system? • /application/config/ needs to be writable • /applica...

我不明白
2013/12/02
2.9K
2
Apache启用mod_expires模块

mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。 在使用之前,首先要确认一下”mod_expires”模组是否有启用.如果是自己安...

niceguy_php
2014/06/25
50
0

没有更多内容

加载失败,请刷新页面

加载更多

zk中选举Leader时的网络IO QuorumCnxManager解析

每台服务启动过程中,会启动一个QuorumCnxManager,负责各台服务器之间底层Leader选举过程中的网络通信 当集群中有服务器服务中断时,zk会重新选举leader 内部类 Message定义消息结构 包含了...

writeademo
14分钟前
2
0
使用mdBook 替代 gitbook。

###** 为什么要替代gitbook** gitbook 有个模板问题:如果md文件中有连续的大括号(比如:&{{父亲 40}}),gitbook会把{{ 父亲 40 }}中的父亲 40当做一个模板变量。如果这个变量不存在,会报...

王坤charlie
16分钟前
2
0
TL-A7HSAD采集卡硬件的处理器、NOR FLASH、DDR3

TL-A7HSAD是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的高速数据采集卡,可配套广州创龙TMS320C6655、TMS320C6657、TMS320C6678开发板使用。该采集卡包含1个双通道250MSPS*12Bit的高...

Tronlong创龙
28分钟前
3
0
项目启动报fastjson版本可能过低

进行项目启动的过程中,之前都正常,这次启动突然就失败了: 查看日志说的是版本过低,后来查看官方网站版本,替换了最新版本: 选择了最新版本的1.2.60,1.2.62尝试后都不行,后来查看网上搜...

aiChuang
29分钟前
2
0
McDonald’s is using Alexa and Google to accepting job applications

McDonald’s today announced a new initiative the fast food chain is calling the “Apply Thru,” in which owners of Amazon Alexa or Google Assistant devices can begin job applic......

wowloop
32分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部