apache缓存时间
① apache-httpd的三种模式
apache httpd-2.4
新增模块;
mod_proxy_fcgi(可提供 fcgi 代理)
mod_ratelimit(限制用户带宽)
mod_request(请求模块,对请求做过滤)
mod_remoteip(匹配客户端的 IP 地址)
对于基于 IP 的访问控制做了修改,不再支持 allow,deny,order 机制,而是统一使用 require进行
还新增以下几条新特性;
1、MPM 支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;
--enable-mpms-shared=all --with-mpm=event
2、支持 event
3、支持异步读写
4、在每个模块及每个目录上指定日志级别
5、增强版的表达式分析器
6、每请求配置:<If>, <Elseif>
7、毫秒级别的 keepalive timeout
8、基于 FQDN 的虚拟主机不再需要 NameVirtualHost 指令
9、支持使用自定义变量
安装时HTTPd 可以添加许多模块
相关模块解析:
--enable-so:支持动态共享模块(即打开 DSO 支持)
--enable-rewrite:支持 url 重写
--enable-ssl:支持 ssl
--with-ssl=/usr/local/openssl:指定 ssl 安装位置
--enable-cgi:启用 cgi
--enable-cgid:MPM 使用的是 event 或 worker 要启用 cgid
--enable-moles=most:明确指明要静态编译到 httpd 二进制文件的模块,<MODULE-LIST>为
空格分隔的模块名列表、all 或者 most,all 表示包含所有模块,most 表示包含大部分常用模
块
--enable-mpms-shared=all:启用 MPM 所有支持的模式,这样 event、worker、prefork 就会以
模块化的方式安装,要用哪个就在 httpd.conf 里配置就好了。
--with-mpm=event:指定启用的 mpm 模式,默认使用 enevt 模式,在 apache 的早期版本 2.0
默认 prefork,2.2 版本是 worker,2.4 版本是 event.
--with-pcre=/usr/local/pcre:支持 pcre
--with-z=/usr/local/zlib:使用 zlib 压缩库
--with-apr=/usr/local/apr:指定 apr 的安装路径
--with-apr-util=/usr/local/apr-util:指定 apr-util 的安装路径
--enable-expires:激活彧通过配置文件控制 HTTP 的“Expires:”和“Cache-Control:”头内容,即
对网站图片、js、css 等内容,提供客户端浏览器缓存的设置。这个是 apache 调优的一个重
要选项之一。
--enable-deflate:提供对内容的压缩传输编码支持,一般是 html、js、css 等内容的站点。使
用此参数会打打提高传输速度,提升访问者访问的体验。在生产环境中,这是 apache 调优
的一个重要选项之一。
Apache 的优化配置:
apache 所运行的硬件环境都是对性能影响最大的因素,即使不能对硬件进行升级,也最好
给 apache 一个单独的主机以免受到其他应用的干扰。各个硬件指标中,对性能影响最大的
是内存,对于静态内容(图片、javascript 文件、css 文件等),它决定了 apache 可以缓存多
少内容,它缓存的内容越多,在硬盘上读取内容的机会就越少,大内存可以极大提高静态站
点的速度;对动态高负载站点来说,每个请求保存的时间更多一些,apache 的 mpm 模块会
为每个请求派生出相应的进程或线程分别处理,而进程或线程的数量与内存的消耗近似成正
比,因此增大内存对提高动态站点的负载和运行速度也极为有利
其次是硬盘的速度,静态站点尤为突出,apache 不断的在读取文件并发送给相应的请求,
硬盘的读写是极其频繁的;动态站点也要不断的加载 web 程序(php 等),一个请求甚至要读
取十几个文件才能处理完成,因此尽可能的提高硬盘速度和质量对提高 apache 的性能是有
积极意义的。
最后是 cpu 和网络,cpu 影响的是 web 程序执行速度,网络影响流量大小。
apache 的工作模式:
Apache HTTP 服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服
务器。这种模块化的设计就叫做“多进程处理模块”(Multi-Processing Mole,MPM),也叫
做工作模式。
Prefork 模式(一个非线程型的):
其主要工作方式是:当 Apache 服务器启动后,mpm_prefork 模块会预先创建多个子进程(默
认为 5 个),每个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork 模块再将
请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将
超过预先创建的子进程数时,mpm_prefork 模块就会创建新的子进程来处理额外的请求。
Apache 总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户
端的请求就不需要在接收后等候子进程的产生。
由于在 mpm_prefork 模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他
两种模块而言较多。不过 mpm_prefork 模块的优点在于它的每个子进程都会独立处理对应
的单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。Prefork 在效率上
要比 Worker 要高,但是内存使用大得多不擅长处理高并发的场景。
Apache 在 prefork 工作模式下影响性能的重要参数说明
# prefork MPM
<IfMole mpm_prefork_mole>
StartServers 5
#apache 启动时候默认开始的子进程数
MinSpareServers 5
#最小的闲置子进程数
MaxSpareServers 10
#最大的闲置子进程数
MaxRequestWorkers 250
#MaxRequestWorkers 设 置 了 允 许 同 时 的 最 大 接 入 请 求 数 量 。 任 何 超 过MaxRequestWorkers 限制的请求将进入等候队列,在 apache2.3.1 以前的版本
MaxRequestWorkers 被称为 MaxClients,旧的名字仍旧被支持。
MaxConnectionsPerChild 500
#设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxConnectionsPerChild”
个请求后将自动销毁。0 意味着无限,即子进程永不销毁。虽然缺省设为 0 可以使每个
子进程处理更多的请求,但如果设成非零值也有两点重要的好处:1、可防止意外的内
存泄漏。2、在服务器负载下降的时侯会自动减少子进程数。因此,可根据服务器的负
载来调整这个值。在 Apache2.3.9 之前称之为 MaxRequestsPerChild。
</IfMole>
注 1:MaxRequestWorkers 是这些指令中最为重要的一个,设定的是 Apache 可以同时处理
的请求,是对 Apache 性能影响最大的参数。如果请求总数已达到这个值(可通过 ps -ef|grep
http|wc -l 来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源
还剩下很多而 HTTP 访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越
多,建议将初始值设为(以 Mb 为单位的最大物理内存/2),然后根据负载情况进行动态调整。
比如一台 4G 内存的机器,那么初始值就是 4000/2=2000。
注 2:prefork 控制进程在最初建立“StartServers”个子进程后,为了满足 MinSpareServers 设
置的需要创建一个进程,等待一秒钟,继续创建两 个,再等待一秒钟,继续创建四个……如
此按指数级增加创建的进程数,最多达到每秒 32 个,直到满足 MinSpareServers 设置的值为
止。这种模式 可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
MaxSpareServers 设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache 会自动 kill
掉一些多余进程。这个值不要设得过大,但如果设的值比 MinSpareServers 小,Apache 会自
动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大 MinSpareServers 和
MaxSpareServers。
注 3:ServerLimit 和 MaxClients(MaxRequestWorkers)有什么区别呢?
是因为在 apache1 时代,控制最大进程数只有 MaxClients 这个参数,并且这个参数最大值为
256,并且是写死了的,试图设置为超过 256 是无效的,这是由于 apache1 时代的服务器硬
件限制的。但是 apache2 时代由于服务器硬件的升级,硬件已经不再是限制,所以使用
ServerLimit 这个参数来控制最大进程数,ServerLimit 值>=MaxClient 值才有效。ServerLimit
要放在 MaxClients 之前,值要不小于 MaxClients。
注 4:查看 Apache 加载的模块
[root@www ~]#apachectl -t -D DUMP_MODULES
或
[root@www ~]# apachectl -M
或
[root@www ~]# apachectl –l (小写 L,只显示静态模块)
如何查看 Apache 的工作模式呢?可以使用 httpd -V 命令查看,另外使用 httpd -l 也可以查
看到
注 5:如何修改 prefork 参数和启用 prefork 模式
1.[root@www ~]# vi /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
2.[root@www ~]# vi /usr/local/http-2.4.23/conf/httpd.conf
LoadMole mpm_prefork_mole moles/mod_mpm_prefork.so
Include conf/extra/httpd-mpm.conf
3 重启httpd
Worker 模式(多线程多进程):
和 prefork 模式相比,worker 使用了多进程和多线程的混合模式,worker 模式也同样会先预
派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会
被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,
因此,内存的占用会减少一些,在高并发的场景下会比 prefork 有更多可用的线程,表现会
更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是
多个线程出现问题,也只是影响 Apache 的一部分,而不是全部。由于用到多进程多线程,
需要考虑到线程的安全了,在使用 keep-alive 长连接的时候,某个线程会一直被占用,即使
中间没有请求,需要等待到超时才会被释放(该问题在 prefork 模式下也存在)
总的来说,prefork 方式速度要稍高于 worker,然而它需要的 cpu 和 memory 资源也稍多于
woker。
Apache 在 worker 工作模式下影响性能的重要参数说明
# worker MPM
<IfMole mpm_worker_mole>
StartServers 3
#apache 启动时候默认开始的子进程数
MinSpareThreads 75
#最小空闲数量的工作线程
MaxSpareThreads 250
#最大空闲数量的工作线程
ThreadsPerChild 25
#每个子进程产生的线程数量
MaxRequestWorkers 400
#与 prefork 模式相同
MaxConnectionsPerChild 0
#与 prefork 模式相同
</IfMole>
注 1:Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的
ThreadsPerChild 线程数,各个线程独立地处理请求。同样, 为了不在请求到来时再生成线
程,MinSpareThreads 和 MaxSpareThreads 设置了最少和最多的空闲线程数;
而 MaxRequestWorkers 设置了同时连入的 clients 最大总数。如果现有子进程中的线程总数不
能满足负载,控制进程将派生新的子进程
MinSpareThreads 和 MaxSpareThreads 的最大缺省值分别是 75 和 250。这两个参数对 Apache
的性能影响并不大,可以按照实际情况相应调节 。
注 2:ThreadsPerChild 是 worker MPM 中与性能相关最密切的指令。ThreadsPerChild 的最大
缺省值是 64,如果负载较大,64 也是不够的。这时要显式使用 ThreadLimit 指令,它的最大
缺省值是 20000。
注 3:Worker 模式下所能同时处理的请求总数是由子进程总数乘以 ThreadsPerChild 值决定
的,应该大于等于 MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制
进程会派生新的子进程。默认最大的子进程总数是 16,加大时 也需要显式声明 ServerLimit
(系统配置的最大进程数量,最大值是20000)。需要注意的是,如果显式声明了 ServerLimit,
那么它乘以 ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers
必须是 ThreadsPerChild 的整数倍,否则 Apache 将会自动调节到一个相应值。
注 4:进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程
有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对
应用的并发性。
进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程
序的运行效率。
Event 模式:
这是 Apache 最新的工作模式,是 worker 模式的变种,它把服务进程从连接中分离出来,一
worker 模式不同的是在于它解决了 keep-alive 长连接的时候占用线程资源被浪费的问题,在
event 工作模式中,会有一些专门的线程用来管理这些 keep-alive 类型的线程,当有真实请
求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并
发场景下的请求处理。event 模式不能很好的支持 https 的访问(HTTP 认证相关的问题)。
② apache设置静态文件缓存影响cookie
Cookie的主要内容包括名字,值,过期时间,路径和域,路径和域共同构成了cookie的作用范围,相当于一个key-value的方式存在于客户端。根据有无设置过期时间可分为 会话Cookie和持久Cookie,不设置过期时间,则是会话Cookie,这个Cookie的生命周期为浏览器会话期间,关闭浏览器窗口,cookie就消失,若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。
③ 如何在 apache 中设置缓存有效时间
右击该图标,会弹出PowerStrip的工作主莱单,然后选中“Performance profiles- Configure
④ 如何在 apache 中设置缓存有效时间
在 http 报文头中,与缓存时间有关的两个字段是 Expires 以及 Cache-Control 中的 max-age,Expires 设定了一个缓存的过期时间,而 max-age 则设定了一个缓存有效时间(单位秒),通常情况下,两者可以相互推得。(详细参考 浏览器缓存机制浅析)
还是用 WampServer 举例。我们在 www 文件夹下新建个 index.html 页面,在浏览器中打开它,得到的 http 响应头如下:
⑤ 谁熟悉APACHE的缓存配置
Apache中关于页面缓存的设置
Expires、Cache-Control、Last-Modified、
ETag是RFC
2616(HTTP/1.1)协议中和网页缓存相关的几个字段。前两个用来控制缓存的失效日期,后两个用来验证网页的有效性。要注意的是,
HTTP/1.0有一个功能比较弱的缓存控制机制:Pragma,使用HTTP/1.0的缓存将忽略Expires和Cache-Control头。我们
这里以Apache2.0服务器为例,只讨论HTTP/1.1协议。
Expires
Expires字段声明了一个网页或URL地址不再被浏览器缓存的时间,一旦超过了这个时间,浏览器都应该联系原始服务器。RFC告诉我们:“由于推断的失效时间也许会降低语义透明度,应该被谨慎使用,同时我们鼓励原始服务器尽可能提供确切的失效时间。”
对于一般的纯静态页面,如html、gif、jpg、css、js,默认安装的Apache服务器,不会在响应头添加这个字段。Firefox浏览
器接受到相应后,如果发现没有Expires字段,浏览器根据文件的类型和“Last-Modified”字段来推断出一个合适的失效时间,并存储在客户
端。推测出的时间一般是接受到响应时间后的三天左右。
Apache的expires_mole模块可以在Http响应头部自动加上Expires字段。在Apache的httpd.conf文件中进行如下配置:
#启用expires_mole模块
LoadMole expires_mole moles/mod_expires.so
# 启用有效期控制
ExpiresActive On
# GIF有效期为1个月
ExpiresByType image/gif A2592000
# HTML文档的有效期是最后修改时刻后的一星期
ExpiresByType text/html M604800
#以下的含义类似
ExpiresByType text/css “now plus 2 month”
ExpiresByType text/js “now plus 2 day”
ExpiresByType image/jpeg “access plus 2 month”
ExpiresByType image/bmp “access plus 2 month”
ExpiresByType image/x-icon “access plus 2 month”
ExpiresByType image/png “access plus 2 month”
对于动态页面,如果在页面内部没有通过函数强制加上Expires,例如header(”Expires: ” . gmdate(”D, d M
Y H:i:s”) . ” GMT”),Apache服务器会把Wed, 11 Jan 1984 05:00:00 GMT
作为Expires字段内容,返回给浏览器。即认为动态页面总是失效的。而浏览器仍然会保存已经失效的动态页面。
可以发现Firefox浏览器总是缓存所有页面,不管失效、不失效还是没有声明失效时间。即使缓存中声明了一个网页的实效日期是1970-01-
01 08:00:00,浏览器仍然会发送该文件在缓存中的Last-Modified和ETag字段。
如果在服务器端验证通过,返回304状态,浏览器就还会使用此缓存。
Cache-Control
Cache-Control字段中可以声明多些元素,例如no-cache, must-revalidate,
max-age=0等。这些元素用来指明页面被缓存最大时限,如何被缓存的,如何被转换到另一个不同的媒介,以及如何被存放在持久媒介中的。但是任何一个
Cache-Control指令都不能保证隐私性或者数据的安全性。“private”和“no-store”指令可以为隐私性和安全性方面提供一些帮
助,但是他们并不能用于替代身份验证和加密。
Apache的mod_cern_meta模块允许文件级Http响应头部的控制,同时它也可以配置Cache-Control头(或任何其他头)。响应头文件是放在原始目录的子目录中,根据原始文件名所命名的一个文件。具体用法请参阅Apache的官方网站。
其中Cache-Control :
max-age表示失效日期。如果没有启动mod_cern_meta模块,Apache服务器会把Expires字段中的日期换算成以秒为单位的一个
delta值,赋值给max-age。如果启动mod_cern_meta模块,并且配置了max-age值,Apache会将这个覆盖Expires字
段。同时,max-age隐含了Canche-Control: public。这样浏览器接受到的Cache-Control :
max-age和Expires值就是一致的。
如果失效日期Cache-Control : max-ag=0或者是负值,浏览器会在对应的缓存中把Expires设置为1970-01-01 08:00:00。
Last-Modified
Last-Modified和ETag是条件请求(Conditional
Request)相关的两个字段。如果一个缓存收到了针对一个页面的请求,它发送一个验证请求询问服务器页面是否已经更改,在HTTP头里面带上”
ETag”和”If Modify Since”头。服务器根据这些信息判断是否有更新信息,如果没有,就返回HTTP 304(Not
Modify);如果有更新,返回HTTP 200和更新的页面内容,并且携带新的”ETag”和”Last-Modified”。
使用这个机制,能够避免重复发送文件给浏览器,不过仍然会产生一个HTTP请求。
一般纯静态页面本身都会有Last-Modified信息,Apache服务器会读取页面文件中的Last-Modified信息,并添加到http响应头部。
对于动态页面,如果在页面内部没有通过函数强制加上Last-Modified,例如header(”Last-Modified: ” .
gmdate(”D, d M Y H:i:s”) . ”
GMT”),Apache服务器会把当前时间作为Last-Modified,返回给浏览器。
无论是纯静态页面还是动态页面,Firefox浏览器巧妙地按照接受到服务器响应的时间设置缓存页面的Last-Modified,而不是按照http响应头部中的Last-Modified字段。
ETag
既然有了Last-Modified,为什么还要用ETag字段呢?因为如果在一秒钟之内对一个文件进行两次更改,Last-Modified就会不正确。因此,HTTP/1.1利用Entity Tag头提供了更加严格的验证。
Apache服务器默认情况下,会对所有的静态、动态文件的响应头添加ETag字段。
在Apache的httpd.conf文件中可以通过FileETag指令配置该选项。FileETag指令配置了当文档是基于一个文件时用以创建
Etag(entity tag)响应头的文件的属性。在Apache
1.3.22及以前,ETag的值是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
如果一个目录的配置包含了‘FileETag INode MTime Size’而其一个子目录包含了‘FileETag
-INode’那么这个子目录的设置(并会被其下任何没有进行覆盖的子目录继承)将等价于‘FileETag MTime Size’。
在多台负载平衡的服务器环境下,同一个文件会有不同的etag或者文件修改日期,浏览器每次都会重新下载。设置‘FileETag None’可以使响应头不再包含ETag字段。
⑥ 如何设置Apache服务器的缓冲区大小
你说的是缓存大小吧
Apache的缓存方式有两种,一种是基于硬盘文件的缓存,由mod_disk_cache实现,另一种是使用内存缓存,由mod_mem_cache实现,不过它们都是依赖mod_cache模块的,mod_cache模块提供了一些缓存配置的指令供它们使用,而mod_file_cache模块是搭配mod_mem_cache模块使用的,下面分别进行介绍。
1、基于硬盘文件的缓存
基于硬盘文件存储的缓存由mod_disk_cache模块实现,先看个简单的配置例子:
<IfMolemod_cache.c>
CacheDefaultExpire86400
<IfMolemod_disk_cache.c>
CacheEnabledisk/
CacheRoot/tmp/apacheCache
CacheDirLevels5
CacheDirLength4
CacheMaxFileSize1048576
CacheMinFileSize10
</IfMole>
</IfMole>
把上面的配置加到Apache的httpd.conf文件中,如果缓存相关的模块都已经编译进了Apache的核心,则无需加载模块,直接就能使用上面的指令。指令的详细说明如下:
CacheDefaultExpire:设定缓存过期的时间(秒),默认是1小时,只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效
CacheEnable:启用缓存,第1个参数是缓存类弄,这里当然是disk了,第2个参数是缓存路径,指的是url路径,这里是缓存所有的东西,直接写上“/”即可,如“/docs”则只缓存/docs下的所有文件
CacheRoot:缓存文件所在的目录,运行Apache的用户(如daemon或nobody)要能对其进行读写,如果不清楚的话可以直接设置成777,请手动建立该目录并设置好访问权限
CacheDirLevels:缓存目录的深度,默认是3,这里设置为5
CacheDirLength:缓存目录名的字符长度,默认是4,这里设置为5
CacheMaxFileSize和CacheMaxFileSize:缓存文件的最大值和最小值(byte),当超过这个范围时将不再缓存,这里设置为1M和10bytes
基于硬盘文件存储的文件基本上就这些内容,设置好后重启Apache应该就能使用了。一切正常的话,可以在缓存目录下看到Apache自动建立的一些目录和缓存的数据文件。
2、基于内存的缓存
基于内存的缓存主要由mod_mem_cache模块实现,还是看个简单的配置吧,这样比较直观:-)
<IfMolemod_cache.c>
<IfMolemod_mem_cache.c>
CacheEnablemem/
MCacheMaxObjectCount20000
MCacheMaxObjectSize1048576
MCacheMaxStreamingBuffer65536
MCacheMinObjectSize10
MCacheRemovalAlgorithmGDSF
MCacheSize131072
</IfMole>
</IfMole>
简单说一下上面一些指令的意思:
CacheEnable:启用缓存,使用基于内存的方式存储
MCacheMaxObjectCount:在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000
MCacheMaxObjectSize:单个缓存对象最大为1M,默认是10000bytes
MCacheMaxStreamingBuffer:在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为65536,该值通常小于100000或MCacheMaxObjectSize设置的值
MCacheMinObjectSize:单个缓存对象最小为10bytes,默认为1bytes
MCacheRemovalAlgorithm:清除缓存所使用的算法,默认是GDSF,还有一个是LRU,可以查一下Apache的官方文档,上面有些介绍
MCacheSize:缓存数据最多能使用的内存,单位是kb,默认是100kb,这里设置为128M
保存重启Apache基于内存的缓存系统应该就能生效了,根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用,只要指明不同的URL路径即可。
3、注意事项
使用缓存需要注意如下事项:
要使用缓存,必须使用指令CacheEnable启用它,目前可用的缓存类型为disk或mem,禁止缓存可以使用CacheDisable,如CacheDisable/private
待缓存的URL返回的状态值必须为:200、203、300、301或410
URL的请求方式必须是GET方式
发送请求时,头部中包含“Authorization:”的字符串时,返回的内容将不会被缓存
URL包含查询字符串,如问号?后的那些东西,除非返回的内容包含“Expires:”,否则不会被缓存
如果返回的状态值是200,则返回的头部信息必须包含以下的一种才会被缓存:Etag、Last-Modified、Expires,除非设置了指令CacheIgnoreNoLastModOn
如果返回内容的头部信息“Cache-Control:”中包含“private”,除非设置了指令CacheStorePrivateOn,否则不会被缓存
如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”,除非设置了指令CacheStoreNoStoreOn,否则不会被缓存
如果返回内容的头部信息“Vary:”中包含了“*”,不会被缓存
⑦ apache的httpd.conf文件中如果不设置cache的相关内容,那么它的默认缓存时间是多少
1个小时。
⑧ 如何在 Apache 中设置缓存有效时间
Apache 的缓存方式有两种,一种是基于硬盘文件的缓存,由 mod_disk_cache 实现,另一种是使用内存缓存,由 mod_mem_cache 实现,不过它们都是依赖 mod_cache 模块的,mod_cache 模块提供了一些缓存配置的指令供它们使用,而 mod_file_cache 模块是搭配 mod_mem_cache 模块使用的。
⑨ 北大青鸟设计培训:PHP应用中常用的9大缓存技术
一、全页面静态化缓存也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。
此种方式,在CMS系统中比较常见,比如dedecms;一种比较常用的实现方式是用输出缓存:Ob_start()******要运行的代码*******$content=Ob_get_contents();****将缓存内容写入html文件*****Ob_end_clean();二、数据缓存顾名思义,就是缓存数据的一种方式;比如,商城中的某个商品信息,当用商品id去请求时,就会得出包括店铺信息、商品信息等数据,此时就可以将这些数据缓存到一个php文件中,文件名包含商品id来建一个唯一标示;下一次有人想查看这个商品时,首先就直接调这个文件里面的信息,而不用再去数据库查询;其实缓存文件中缓存的就是一个php数组之类;Ecmall商城系统里面就用了这种方式;三、查询缓存其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示;按时间变更进行缓存就是对于缓存文件您需要设一个有效时间,在这个有效时间内,相同的访问才会先取缓存文件的内容,但是超过设定的缓存时间,就需要重新从数据库中获取数据,并生产最新的缓存文件;比如,我将我们商城的首页就是设置2个小时更新一次。
四、页面部分缓存该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存。
该种方式可以用于如商城中的商品页;五、Opcode缓存首先php代码被解析为Tokens,然后再编译为Opcode码,最后执行Opcode码,返回结果;所以,对于相同的php文件,第一次运行时可以缓存其Opcode码,下次再执行这个页面时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了。
比较知名的是XCache、TurckMMCache、PHPAccelerator等。
六、按内容变更进行缓存这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件;比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;当商家在后台修改这个商品的信息时,点击保存,我们同时就更新缓存文件;那么,买家访问这个商品信息时,实际问的是一个静态页面,而不需要再去访问数据库;试想,如果对商品页不缓存,那么每次访问一个商品就要去数据库查一次,如果有10万人在线浏览商品,那服务器压力就大了;七、内存式缓存提到这个,可能大家想到的首先就是Memcached;memcached是高性能的分布式内存缓存服务器。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
它就是将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是key_>value方式;connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache->set('key','缓存的内容');$get=$memcache->get($key);//获取信息?>八、apache缓存模块apache安装完以后,是不允许被cache的。
广州IT培训http://www.kmbdqn.cn/认为如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。