apache2.2配置httpd.conf-程序员宅基地

技术标签: 运维  操作系统  数据库  

###=========httpd.conf begin===================
##Apache主配置文件
##设置服务器的基础目录,默认为Apache安装目录
ServerRoot "/usr/local/apache-2.2.6"
##设置服务器监听的IP和端口
Listen 80
##设置管理员邮件地址
[email protected]
##设置服务器用于辨识自己的主机名和端口号
ServerNamewww.foxbb.com:80
###设置动态加载的DSO模块
##如果需要提供基于文本文件的认证,加载此模块,否则注释掉
LoadModule authn_file_module modules/mod_authn_file.so
##如果需要提供基于DBM文件的认证,加载此模块,否则注释掉
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
##如果需要提供匿名用户认证,加载此模块,否则注释掉
#LoadModule authn_anon_module modules/mod_authn_anon.so
##如果需要提供基于SQL数据库的认证,加载此模块,否则注释掉
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
##如果需要在未正确配置认证模块的情况下简单拒绝一切认证信息,加载此模块,否则注释掉
LoadModule authn_default_module modules/mod_authn_default.so
##此模块提供基于主机名、IP地址、请求特征的访问控制,Allow、Deny指令需要,推荐加载。
LoadModule authz_host_module modules/mod_authz_host.so
##如果需要使用纯文本文件为组提供授权支持,加载此模块,否则注释掉
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
##如果需要提供基于每个用户的授权支持,加载此模块,否则注释掉
LoadModule authz_user_module modules/mod_authz_user.so
##如果需要使用DBM文件为组提供授权支持,加载此模块,否则注释掉
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
##如果需要基于文件的所有者进行授权,加载此模块,否则注释掉
#LoadModule authz_owner_module modules/mod_authz_owner.so
##如果需要在未正确配置授权支持模块的情况下简单拒绝一切授权请求,加载此模块,否则注释掉
LoadModule authz_default_module modules/mod_authz_default.so
##如果需要提供基本的HTTP认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块
LoadModule auth_basic_module modules/mod_auth_basic.so
##如果需要提供HTTP MD5摘要认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块
#LoadModule auth_digest_module modules/mod_auth_digest.so
##此模块提供文件描述符缓存支持,从而提高Apache性能,推荐加载,但请小心使用
LoadModule file_cache_module modules/mod_file_cache.so
##此模块提供基于URI键的内容动态缓存(内存或磁盘),从而提高Apache性能,必须与mod_disk_cache/mod_mem_cache同时使用,推荐加载
LoadModule cache_module modules/mod_cache.so
##此模块为mod_cache提供基于磁盘的缓存管理,推荐加载
LoadModule disk_cache_module modules/mod_disk_cache.so
##此模块为mod_cache提供基于内存的缓存管理,推荐加载
LoadModule mem_cache_module modules/mod_mem_cache.so
##如果需要管理SQL数据库连接,为需要数据库功能的模块提供支持,加载此模块,否则注释掉(推荐)
#LoadModule dbd_module modules/mod_dbd.so
##此模块将所有I/O操作转储到错误日志中,会导致在日志中写入及其海量的数据,只建议在发现问题并进行调试的时候使用
#LoadModule dumpio_module modules/mod_dumpio.so
##如果需要使用外部程序作为过滤器,加载此模块(不推荐),否则注释掉
#LoadModule ext_filter_module modules/mod_ext_filter.so
##如果需要实现服务端包含文档(SSI)处理,加载此模块(不推荐),否则注释掉
#LoadModule include_module modules/mod_include.so
##如果需要根据上下文实际情况对输出过滤器进行动态配置,加载此模块,否则注释掉
LoadModule filter_module modules/mod_filter.so
##如果需要服务器在将输出内容发送到客户端以前进行压缩以节约带宽,加载此模块(推荐),否则注释掉
LoadModule deflate_module modules/mod_deflate.so
##如果需要记录日志和定制日志文件格式,加载此模块(推荐),否则注释掉
LoadModule log_config_module modules/mod_log_config.so
##如果需要对每个请求的输入/输出字节数以及HTTP头进行日志记录,加载此模块,否则注释掉
#LoadModule logio_module modules/mod_logio.so
##如果允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量,加载此模块,否则注释掉
LoadModule env_module modules/mod_env.so
##如果允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容,加载此模块(推荐),否则注释掉
LoadModule expires_module modules/mod_expires.so
##如果允许通过配置文件控制任意的HTTP请求和应答头信息,加载此模块,否则注释掉
LoadModule headers_module modules/mod_headers.so
##如果需要实现RFC1413规定的ident查找,加载此模块(不推荐),否则注释掉
#LoadModule ident_module modules/mod_ident.so
##如果需要根据客户端请求头字段设置环境变量,加载此模块,否则注释掉
LoadModule setenvif_module modules/mod_setenvif.so
##此模块是mod_proxy的扩展,提供Apache JServ Protocol支持,只在必要时加载
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
##此模块是mod_proxy的扩展,提供负载均衡支持,只在必要时加载
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
##如果需要根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码),加载此模块,否则注释掉
LoadModule mime_module modules/mod_mime.so
##如果允许Apache提供DAV协议支持,加载此模块,否则注释掉
#LoadModule dav_module modules/mod_dav.so
##此模块生成描述服务器状态的Web页面,只建议在追踪服务器性能和问题时加载
#LoadModule status_module modules/mod_status.so
##如果需要自动对目录中的内容生成列表(类似于"ls"或"dir"命令),加载此模块(会带来安全问题,不推荐),否则注释掉
#LoadModule autoindex_module modules/mod_autoindex.so
##如果需要服务器发送自己包含HTTP头内容的文件,加载此模块,否则注释掉
#LoadModule asis_module modules/mod_asis.so
##如果需要生成Apache配置情况的Web页面,加载此模块(会带来安全问题,不推荐),否则注释掉
#LoadModule info_module modules/mod_info.so
##如果需要在非线程型MPM(prefork)上提供对CGI脚本执行的支持,加载此模块,否则注释掉
#LoadModule cgi_module modules/mod_cgi.so
##此模块在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本,如果正在多线程模式下使用CGI程序,推荐替换mod_cgi加载,否则注释掉
#LoadModule cgid_module modules/mod_cgid.so
##此模块为mod_dav访问服务器上的文件系统提供支持,如果加载mod_dav,则也应加载此模块,否则注释掉
#LoadModule dav_fs_module modules/mod_dav_fs.so
##如果需要提供大批量虚拟主机的动态配置支持,加载此模块,否则注释掉
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
##如果需要提供内容协商支持(从几个有效文档中选择一个最匹配客户端要求的文档),加载此模块(推荐),否则注释掉
LoadModule negotiation_module modules/mod_negotiation.so
##如果需要指定目录索引文件以及为目录提供"尾斜杠"重定向,加载此模块(推荐),否则注释掉
LoadModule dir_module modules/mod_dir.so
##如果需要处理服务器端图像映射,加载此模块,否则注释掉
#LoadModule imagemap_module modules/mod_imagemap.so
##如果需要针对特定的媒体类型或请求方法执行CGI脚本,加载此模块,否则注释掉
#LoadModule actions_module modules/mod_actions.so
##如果希望服务器自动纠正URL中的拼写错误,加载此模块(推荐),否则注释掉
LoadModule speling_module modules/mod_speling.so
##如果允许在URL中通过"/~username"形式从用户自己的主目录中提供页面,加载此模块,否则注释掉
#LoadModule userdir_module modules/mod_userdir.so
##此模块提供从文件系统的不同部分到文档树的映射和URL重定向,推荐加载
LoadModule alias_module modules/mod_alias.so
##如果需要基于一定规则实时重写URL请求,加载此模块(推荐),否则注释掉
LoadModule rewrite_module modules/mod_rewrite.so

##设置子进程的用户和组
<IfModule !mpm_netware_module>
User daemon
Group daemon
</IfModule>
##设置默认WEB文档根目录
DocumentRoot "/usr/local/apache-2.2.6/htdocs"
##设置WEB文档根目录的默认属性
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,
allow
Deny from all
</Directory>
##设置DocumentRoot指定目录的属性
<Directory "/usr/local/apache-2.2.6/htdocs">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
##设置默认目录资源列表文件
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
##拒绝对.ht开头文件的访问,以保护.htaccess文件
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
##指定错误日志文件
ErrorLog logs/error_log
##指定记录到错误日志的消息级别
LogLevel warn
<IfModule log_config_module>
##定义访问日志的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
##指定访问日志及使用的格式
CustomLog logs/access_log combined
</IfModule>
##设定默认CGI脚本目录及别名
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.6/cgi-bin/"
</IfModule>
##在以线程式MPM(worker)运行的Apache中设置用来与CGI守护进程通信的套接字文件名前缀
<IfModule cgid_module>
Scriptsock logs/cgisock
</IfModule>
##设定默认CGI脚本目录的属性
<Directory "/usr/local/apache-2.2.6/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
##设定默认MIME内容类型
DefaultType text/plain

<IfModule mime_module>
##指定MIME类型映射文件
TypesConfig conf/mime.types
##增加.Z .tgz的类型映射
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>

##启用内存映射
EnableMMAP on
##使用操作系统内核的sendfile支持来将文件发送到客户端
EnableSendfile on
##指定多路处理模块(MPM)配置文件并将其附加到主配置文件
Include conf/extra/httpd-mpm.conf
##指定多语言错误应答配置文件并将其附加到主配置文件
Include conf/extra/httpd-multilang-errordoc.conf
##指定目录列表配置文件并将其附加到主配置文件
#Include conf/extra/httpd-autoindex.conf
##指定语言配置文件并将其附加到主配置文件
Include conf/extra/httpd-languages.conf
##指定用户主目录配置文件并将其附加到主配置文件
#Include conf/extra/httpd-userdir.conf
##指定用于服务器信息和状态显示的配置文件并将其附加到主配置文件
#Include conf/extra/httpd-info.conf
##指定提供Apache文档访问的配置文件并将其附加到配置文件
#Include conf/extra/httpd-manual.conf
##指定DAV配置文件并将其附加到主配置文件
#Include conf/extra/httpd-dav.conf
##指定与Apache服务自身相关的配置文件并将其附加到主配置文件
Include conf/extra/httpd-default.conf
##指定mod_deflate压缩模块配置文件并将其附加到主配置文件
Include conf/extra/httpd-deflate.conf
##指定mod_expires模块配置文件并将其附加到主配置文件
Include conf/extra/httpd-expires.conf
##指定虚拟主机配置文件并将其附加到主配置文件
#Include conf/extra/httpd-vhosts.conf
##指定SSL配置文件并将其附加到主配置文件
Include conf/extra/httpd-ssl.conf
##SSL默认配置
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
###==========httpd.conf end===================

 4.3.3 配置多路处理模块(MPM)
编辑多路处理模块配置文件:
vi /usr/local/apache-2.2.6/conf/extra/httpd-mpm.conf
如果使用prefork多路处理模块,按下面的提示修改:
###=============httpd-mpm.conf prefork begin===================
##设置prefork多路处理模块
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit    4000
MaxClients 4000
MaxRequestsPerChild 0
</IfModule>
###=============httpd-mpm.conf prefork end===================

   指令说明:
  StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
  MinSpareServers:设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于

MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常

是一个坏主意。
MaxSpareServers:设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进

程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers

小,Apache将会自动将其修改成"MinSpareServers+1"。
ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients设置成高于默认值256的时候才需要使用。要将此指令的值

保持和MaxClients一样。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。
  MaxClients:用于伺服客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,

如果要提高这个值必须同时提高ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。

比如一台4G内存的机器,那么初始值就是4000/2=2000。
MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结

束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏

无限进行而耗尽内存;
给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
如果设置为非零值,笔者建议设为10000-30000之间的一个值。
公式:
   MaxClients<=ServerLimit

  如果使用worker多路处理模块,按下面的提示修改:
###=============httpd-mpm.conf worker begin===================
##设置worker多路处理模块
<IfModule mpm_worker_module>
StartServers 5
ServerLimit 20
ThreadLimit 200
MaxClients 4000
MinSpareThreads 25
MaxSpareThreads 250
ThreadsPerChild 200
MaxRequestsPerChild 0
</IfModule>
###=============httpd-mpm.conf worker end===================

指令说明:
StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时

候才需要使用这个指令。不要将该指令的值设置的比MaxClients 和ThreadsPerChild需要的子进程数量高。修改此指令的值必须完全停止服务

后再启动才能生效,以restart方式重启动将不会生效。
ThreadLimit: 设置每个子进程可配置的线程数ThreadsPerChild上限,该指令的值应当和ThreadsPerChild可能达到的最大值保持一致

。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。
MaxClients:用于伺服客户端请求的最大接入请求数量(最大线程数)。任何超过MaxClients限制的请求都将进入等候队列。默认值

是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。笔者建议

将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。
MinSpareThreads:最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,

子进程将产生新的空闲线程。
MaxSpareThreads:设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数

太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大

于等于 MinSpareThreads加上ThreadsPerChild的和。
ThreadsPerChild:每个子进程建立的线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。每个子进程所拥

有的所有线程的总数要足够大,以便可以处理可能的请求高峰。
MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结

束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏

无限进行而耗尽内存;
给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
如果设置为非零值,笔者建议设为10000-30000之间的一个值。
公式:
ThreadLimit >= ThreadsPerChild
MaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数
MaxSpareThreads >= MinSpareThreads+ThreadsPerChild

 4.3.4 配置Apache服务器默认设置
编辑Apache服务器默认设置文件:
vi /usr/local/apache-2.2.6/conf/extra/httpd-default.conf
按下面的提示修改:
###=============httpd-default.conf begin===================
##Apache默认设置文件
Timeout 300
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
###=============httpd-default.conf end====================
指令说明:
  Timeout:设置服务器在断定请求失败前等待的秒数。默认值300。
KeepAlive:设置是否启用HTTP持久链接,On 代表打开,Off 代表关闭。如果用于同一页面包含大量静态文件的应用,设置为On,以

提高性能;如果用于主要为动态页面的应用,设置为Off,以节约内存资源;如果服务器前跑有squid或者其它七层设备,设置为On。
MaxKeepAliveRequests:限制当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。笔者建议

将此值设为100-500之间的一个值,以确保最优的服务器性能。
  KeepAliveTimeout:设置持久链接中服务器在两次请求之间等待的秒数。对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些

性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。
UseCanonicalName:配置服务器如何确定它自己的域名,可选值为On | Off | DNS。DNS用于为大量基于IP的虚拟主机支持那些古董

级的不提供"Host:"头的浏览器使用。笔者建议设置为Off。
AccessFileName:设置分布式配置文件的名字,默认为.htaccess。如果为某个目录启用了分布式配置文件功能,那么在向客户端返回

其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件,因此会带来性能问题,笔者建议关闭分布式配置文件功能。
ServerTokens:控制服务器回应给客户端的"Server:"应答头是否包含关于服务器操作系统类型和编译进的模块描述信息,同时还控制

着ServerSignature指令的显示内容。可选值为Full | OS | Minor | Minimal | Major | Prod。笔者建议设置为显示最少信息的Prod。
ServerSignature:配置服务器生成页面的页脚,可选值为On | Off | EMail。采用On会简单的增加一行关于服务器版本和正在伺服的

虚拟主机的ServerName,而EMail设置会额外创建一个指向ServerAdmin的"mailto:"部分。建议使用默认值Off。
HostnameLookups:设置是否启用对客户端IP的DNS查找,可选值为On | Off | Double。DNS查询会造成明显的时间消耗,建议设置为

Off。

 4.3.5 配置mod_deflate压缩模块
mod_deflate模块提供了DEFLATE输出过滤器,允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽。
编辑mod_deflate压缩模块设置文件:
vi /usr/local/apache-2.2.6/conf/extra/httpd-deflate.conf
按下面的提示修改:
###=============httpd-deflate.conf begin===================
##mod_deflate压缩模块设置文件
<IfModule mod_deflate.c>
##定义deflate默认设置
DeflateMemLevel 9
DeflateWindowSize 15
DeflateBufferSize 8096
DeflateCompressionLevel 8
## 调试时去掉下面5行前的注释符,用以记录压缩日志
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat '"%r" %b %{outstream}n/%{instream}n (%{ratio}n%%) "%{User-agent}i"' deflate
#CustomLog logs/deflate_log deflate
## 插入DEFLATE过滤器,以启用输出压缩
 SetOutputFilter DEFLATE
 ## Netscape 4.x 有一些问题,仅压缩txt/html类型
BrowserMatch ^Mozilla/4 gzip-only-text/html
 ## Netscape 4.06-4.08不能处理任何压缩内容,不进行压缩
BrowserMatch ^Mozilla/4.0[678] no-gzip
## MSIE 会伪装成 Netscape ,但是事实上它没有问题
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
## 设置图片、mp3、压缩格式文件等不需要进行压缩内容

SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
## 确保代理不会发送错误的内容
Header append Vary User-Agent env=!dont-vary
</IfModule>
###=============httpd-deflate.conf end=====================
指令说明:
DeflateMemLevel:指定zlib在压缩时最多可以使用多少内存,取值范围在1到9之间。
DeflateWindowSize:定义zlib压缩窗口(compression window)的大小,取值范围在1到15之间,通常窗口越大压缩效果越好。
DeflateBufferSize:定义zlib一次压缩的片断的字节数,默认为8096。
DeflateCompressionLevel:设定压缩程度,越高的压缩程度就会有越好的压缩效果,同时也意味着占用越多的CPU资源。取值范围在

1(最低压缩率) 到 9(最高压缩率)之间,如果不设置此指令,默认为zlib的默认值。
DeflateFilterNote:在日志中放置压缩率标记。
  语法为:DeflateFilterNote type notename
notename就表示这个压缩率标记的名字,你可以为了某种统计目的将这个标记的名字添加到访问日志中。
type指定notename标记所记录的数据类型:Input,在标记中存储过滤器输入流的字节数;Output,在标记中存储过滤器输出流的字

节数;Ratio,在标记中存储过滤器的压缩比(输出/输入*100),这是type的默认值。
SetOutputFilter:设置用于在服务器应答发送到客户端之前使用的过滤器。如果多于一个过滤器,必须按照处理内容的顺序用分号

(;)分隔。
BrowserMatch:基于User-Agent头有条件地设置环境变量。
SetEnvIfNoCase:根据大小写无关的客户端请求属性设置环境变量。
Headers:配置HTTP应答头。这个指令可以替换、合并、删除HTTP应答头。应答头紧跟在内容处理器和输出过滤器完工之后生成,这

时候才能对头进行修改。

 4.3.6 配置mod_expires模块
这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期(expiration date)可以设置为相对于源文

件的最后修改时刻或者客户端的访问时刻。这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存,文档就可以从缓存(除已经过期)

而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新。
编辑mod_expires设置文件:
vi /usr/local/apache-2.2.6/conf/extra/httpd-expires.conf
按下面的提示修改:
###=============httpd-expires.conf begin===================
## mod_expires设置文件
<IfModule mod_expires.c>
ExpiresActive on
  ExpiresDefault A300
ExpiresByType text/html A300
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType text/css A2592000
ExpiresByType text/js A2592000
ExpiresByType text/javascript A2592000
ExpiresByType application/x-javascript A2592000
</IfModule>
###=============httpd-expires.conf end=====================
指令说明:
ExpiresActive:对其作用范围内的文档启用或禁用产生Expires和Cache-Control头的功能。若设置为 Off 则不会为其作用范围内的

任何文档生成Expires和Cache-Control头(除非被更低一层的规则改写,比如.htaccess文件)。若设置为 On 则会按照ExpiresByType和

ExpiresDefault指令定义的标准为其作用范围内的文档生成Expires和Cache-Control头。注意,这个指令并不保证Expires或Cache-Control头

一定会产生。如果定义的标准不规范,将不会产生这两个头,其效果是好像从未设置过这个指令一样。
ExpiresByType:为指定MIME类型的文档配置Expires头的值。
语法为:ExpiresByType MIME-type <code>seconds
seconds参数设置了添加到基准时间以构造有效期限的秒数。Cache-Control: max-age的计算方法是从有效期减去当前请求时间并转

化为秒数。
基准时刻可以是源文件的最后修改时刻或者客户端对源文件的访问时刻,至于使用那一个则由<code>指定。"M"表示源文件的最后修

改时刻,"A"表示客户端对源文件的访问时刻。需要注意的是<code>和seconds之间没有空格。如果使用"M",所有当前缓存中的文档副本都将在

同一时刻过期,这个可能对定期更新的URL(比如位于同一位置的每周通告)很有好处。如果使用"A",则每个客户端所得到的有效期是不一样的

,这个可能对那些几乎不更新的图片文件很有好处,特别是对于一组都引用了相同图片的相关文档。
ExpiresDefault:设置其作用范围内的所有文档的默认有效期的计算方法,它可以被ExpiresByType指令基于MIME类型被改写。
语法为:ExpiresDefault <code>seconds
<code>seconds同ExpiresByType一致。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_10018/article/details/82544644

智能推荐

什么是p99_p99是什么意思-程序员宅基地

文章浏览阅读3k次。p99表示过去10s内最慢的1%请求的平均延迟_p99是什么意思

史上最全采样方法详细解读与代码实现_gibbs采样算法代码-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏6次。项目github地址:bitcarmanlee easy-algorithm-interview-and-practice欢迎大家star,留言,一起学习进步1.什么是采样在信号系统、数字信号处理中,采样是每隔一定的时间测量一次声音信号的幅值,把时间连续的,模拟信号转换成时间离散、幅值连续的采样信号。如果采样的时间间隔相等,这种采样称为均匀采样。在计算机系统中,有一个重要的问题就是给定一个概率分布p(x) , 我们如何在计算机中生成它的样本。平时我们接触比较多的场景是,给定一堆样本数据,求出这堆_gibbs采样算法代码

xctf-ics05_i‘′‘s5fct.′(xcg)-程序员宅基地

文章浏览阅读378次。xctf里面的一道web题ics05这道题给了提示:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统既然说了是设备维护中心的漏洞,打开设备维护中心,什么东西也没有,查看源码也没有啥东西。这时候瞎点,点到了网页上面的导航上 云平台设备维护中心发现有变化。发现page的值会显示出来。将page的参数改成index.php发现页面显示ok,改成其他的(比如flag.php)页面啥都没显..._i‘′‘s5fct.′(xcg)

测试用例的划分方法_研发云中对测试用例的类型的划分主要是基于-程序员宅基地

文章浏览阅读1k次。等价类划分等价类划分的概念 等价类划分法是将所有程序的输入域划分成若干个子集合(等价类),然后从每一个子集合中选取少数具有代表性的数据作为测试的输入数据 在该子集合中,所有的输入数据对于揭露软件中的错误都是等效的 等价类划分有效等价类(正面,不会报错)和无效等价类(负面,抛出错误)等价类划分法的场景:当测试需要数据量过大,且数据操作可以分类时进行等价类划分边界值分析法1:定义:边界值分析法是对等价类划分法的一个补充,边界值一般都是从等价类的边缘值去寻找2:原则..._研发云中对测试用例的类型的划分主要是基于

JavaSwing不规则窗体_.java 不规则窗体-程序员宅基地

文章浏览阅读759次。javaSwing创建 不规则窗体_.java 不规则窗体

用termux打开python文件,安卓手机运行python程序的软件:Termux、Pydroid3-程序员宅基地

文章浏览阅读4.2k次,点赞5次,收藏18次。用电脑写了一段python程序抓取某网站的数据。网站数据每天更新,每天的数据都不一样,如果当天没有抓取保存数据,第二天就没有了昨天的数据。有时候人又不在电脑旁,所以希望找到一个能在手机上运行Python程序的软件,随时随地抓取数据。度娘和谷哥了很久,找到三种类型的转件。一、在手机上写手机专用的Python程序:Qpython二、用电脑写可以在手机上运行的app:Kivy和SL4A三、电脑写的pyt..._termux python editor

随便推点

一文看懂数据库原理-程序员宅基地

文章浏览阅读2.8w次,点赞24次,收藏118次。一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作的。你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少【译者注:百度为您找到相关结果约1,850,000个…】 ,而且找到的那些文章都很短。现在如果你查找最近时髦的技术(大数据、NoSQL或JavaScript..._数据库原理

Best-First求解八数码问题_best-first算法例题-程序员宅基地

文章浏览阅读2.1k次。Best-First求解八数码问题。_best-first算法例题

Docker容器之Docker Compose详解_compose does not use swarm mode to deploy services-程序员宅基地

文章浏览阅读3.6k次。Docker Compose是一款容器编排工具,Compose是在一台机器上管理多个容器。Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器。_compose does not use swarm mode to deploy services to multiple nodes in a sw

vue2.0在PC端图片放大预览,始终保持在浏览器中间位置操作_vue图片预览插件pc端-程序员宅基地

文章浏览阅读4.7k次。通常放大图片预览无非是加一个遮罩层,然后让图片以一定的宽高显示。但是在实际中我们可能有像试卷一样每道题都有图片,只要点击都能预览,由于题很多,可就很难保证图片永远在可视区域中间位置显示,所以我们得通过js做一些处理:.img-show-mask { width: 100%; height: 100%; position: absolute; left: 0; ..._vue图片预览插件pc端

LeetCode67 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。_给定两个整数,返回任意字符串-程序员宅基地

文章浏览阅读2.5k次。给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。class Solution {public: string addBinary(string a, string b) { string s; int k = 0; int n = (a.size()&lt;=b.size())?a...._给定两个整数,返回任意字符串

Unity-Transform与RectTransform区别_unity transform 与rect transform-程序员宅基地

文章浏览阅读587次。UGUI下的canvas的2d对象,是RectTransform组件,3d空间的对象是transfrom组件。RectTransform是Transfrom的子类。Transform包含RectTransform。对于2D的UGUI,使用RectTransform即可,不需要使用Transform。例如:gameObject.transform.position 与gameObject.getComment().position含义是一样的。..._unity transform 与rect transform