简介:javascript
Apache所运行的硬件环境都是对性能影响最大的因素,即便不能对硬件进行升级,也最好给Apache一个单独的主机以避免受到其余应用的干扰。各个硬件指标中,对性能影响最大的是内存,对于静态内容(图片、JavaScript文件、css文件等)。它决定了Apache能够缓存多少内容,它缓存的内容越多,在硬盘上读取内容的机会就会越少,大内存能够极大提升静态站点的速度;php
对动态高负载站点来讲,每一个请求保存的时间更多一些,Apache的mpm模块会为每一个请求派生出相应的进程或线程分别处理,而进程或线程的数量与内存的消耗近似成正比,所以增大内存对提升动态站点的负载和运行速度也极为有利。css
其次是硬盘的速度,静态站点尤其突出,Apache不断的在读取文件并发送给相应的请求,硬盘的读写是极其频繁的;动态站点也要不断的加载web程序(php等),一个请求甚至要读取十几个文件才能处理完成,所以尽量的提升硬盘速度和质量对提升Apache的性能是有积极意义的。html
最后CPU和网络,CPU影响的是web程序执行速度,网络影响流量大小。java
1、Apache的几种工做模式以及调优web
Apache详细安装过程请点击这条连接便可查看:http://blog.csdn.net/kangshuo2471781030/article/details/79171344apache
Apache HTTP服务器被设计为一个强大的、灵活的可以在多种平台以及不一样环境下工做的服务器。这种模块化的设计就叫作“多进程处理模块”(Multi-Processing Module,MPM),也叫作工做模式。vim
1.Prefork(一个非线程型的):浏览器
其主要工做方式是:当Apache服务器启动后,mpm_prefork模块会预先建立多个子进程(默认为5个),每一个子进程只有一个线程,当接受到客户端的请求后,mpm_prefork模块再将请求转交给子进程处理,而且每一个子进程同时只能用于处理单个请求。若是当前的请求数将超过预先建立的子进程数时,mpm_prefork模块就会建立新的子进程来处理额外的请求。这样客户端的请求就不须要在接受后等候子进程的产生。缓存
因为在mpm_prefork模块中,每一个请求对应一个子进程,所以其占用的系统资源相对其余两种模块而言较多。不过mpm_prefork模块的优势在于它的每一个子进程都会独立处理对应单个请求,这样,若是其中一个请求出现问题就不会影响到其余请求。Prefork在效率上要比work要高,可是内存使用大得多,不擅长处理高并发的场景。
Apache在prefork工做模式下影响性能的重要参数说明:
# prefork MPM <IfModule mpm_prefork_module> StartServers 5 #Apache启动时默认开始的子进程数 MinSpareServers 5 #最小的闲置子进程数 MaxSpareServer 10 #最大的闲置子进程数 MaxRequestWorkers 250 #MaxRequestWorkers设置了容许同时的最大接入请求数量。 #任何超过MaxRequestWorkers限制的请求将进入等候队列,在Apache2.3.1之前的版本MaxRequestWorkers被称为MaxClients,旧的名字仍旧被支持。 MaxConnectionsPerChild 500 #设置的是每一个子进程可处理的请求数。每一个子进程在处理了“MaxConnectionsPerChild”个请求后将自动销毁。 #0意味着无限,即子进程永不销毁。虽然缺省设为0可使每一个子进程处理更多的请求,但若是设成非零值也有两点重要的好处: #(1)可防止意外的内存泄漏 #(2)在服务器负载降低的时候会自动减小子进程数。所以,可根据服务器的负载来调整这个值。在Apache2.3.9以前称之为MaxRequestsPerChild。 </IfModule>
注意:
(1)MaxRequestWorkers是这些指令中最为重要的一个,设定的是Apache能够同时处理的请求,是对Apache性能影响最大的参数。若是请求总数已达到这个值(可经过ps -ef | grep httpd | 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时代因为服务器硬件的升级,硬件已经再也不是限制,因此使用ServerServerLimit这个参数来控制最大进程数,ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients以前,值要不小于MaxClients。
(4)查看Apache加载的模块
/Applications/MAMP/Library/bin/apachectl -t -D DUMP_MODULES
或
/Applications/MAMP/Library/bin/apachectl -M
或
/Applications/MAMP/Library/bin/apachectl -l
如何查看Apache的工做模式呢?可使用httpd -V命令查看,另外使用httpd -l也能够查看到
/Applications/MAMP/Library/bin/httpd -V
2.Work模式(多线程多进程)
和prefork模式相比,work使用了多进程多线程的混合模式,work模式也一样会先预派生一些子进程,而后每一个子进程建立一些线程,同时包括一个监听线程,每一个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,由于线程是经过共享父进程的内存空间,所以,内存的占用会减小一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,若是一个线程出现了问题也会致使同一进程下的线程出现问题,若是是多个线程出现问题,也只是影响Apache的一部分,而不是所有。因为用到多进程多线程,须要考虑的线程的安全了,在使用keep-alive长链接的时候,某个线程会一被占用,即便中间没有请求,须要等到超时才会被释放(该问题在prefork模式下也存在)
总的来讲,prefork方式速度要稍高于worker,然而它须要的CPU和memory资源也稍多于worker。
Apache在worker工做模式下影响性能的重要参数说明:
<IfModule mpm_worker_module> StartServers 2 #apache启动时候默认开始的子进程数 MaxClients 150 #MaxClients / MaxRequestWorkers 用于客户端请求的最大请求数量(最大子进程数) MinSpareThreads 25 #最小空闲数量的工做线程 MaxSpareThreads 75 #最大空闲数量的工做线程 ThreadsPerChild 25 #每一个子进程产生的线程数量 MaxRequestsPerChild 0 #MaxRequestsPerChild / MaxConnectionsPerChild 每一个子进程可处理的请求数 </IfModule>
注意:
(1)work由主控制进程生成“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)进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体。
与进程的区别是:
地址空间:进程内的一个执行单元,进程至少有一个线程,它们共享进程的地址空间,而进程有本身独立的地址空间。
资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
线程是处理器调度的基本单位,但进程不是
两者都可并发执行
进程和线程都是由操做系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率。
3.Event模式:
这是Apache最新的工做模式,是worker模式的变种,它把服务进程从链接中分离出来,worker模式不一样的是在于它解决了keep-alive长链接的时候占用线程资源被浪费的问题,在event工做模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,由容许它释放。这加强了在高并发场景下的请求处理。event模式bu不能很好的支持https的访问(HTTP认证相关的问题)。
Apache配置参数详解
(1)keepAlive On/Off
keepAlive 指的是保持链接活跃,换一句话说,若是将KeepAlive设置为On,那么来自同一客户端的请求就不须要再一次链接,避免每次请求都要新建一个链接而加剧服务器的负担。通常状况下,图片较多的网站应该把KeepAlive设为On。
(2)KeepAliveTimeOut number
若是第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次链接就会中断,再新建第二个链接。它的设置通常考虑图片或者JS等文件两次请求间隔,通常设置为3-5秒。
(3)MaxKeepAliveRequests 100
一次链接能够进行的HTTP请求的最大请求次数。将其值设为0将支持在一次链接内进行无限次的传输请求。
事实上没有客户程序在一次链接中请求太多的页面,一般达不到这个上限就完成链接了。
(4)HostnameLookups on|off|double
若是是使用on,那么只有进行一次反查,若是用double,那么进行反查以后还要进行一次正向解析,只有两次的结果互相符合
才行,而off就是不进行域名验证。
若是为了安全,建议使用double;为了加快访问速度,建议使用off
域名查找开启这个会增长Apache的负担,减慢访问速度建议关闭
(5)timeout 5
推荐5这个是Apache接受请求或者发出相应的时间超过这个时间断开
注意:
以上配置项可在/usr/local/http-2.4.23/conf/extra/httpd-default.conf设置并在httpd.conf文件中经过include选项引用
MPM这个比较关键,是影响并发效率的主要因素:
(1)StartServers 10
设置服务器启动时创建的子进程数量。由于子进程数量动态的取决于负载的轻重,因此通常没有必要调整这个参数。
(2)MinSpareServers 10
设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理的请求的子进程。若是当前空闲子进程数少于MinSpareServers,那么Apache将以最大每秒一个的速度产生新的子进程。只有在很是繁忙机器上才须要调整这个参数。将此参数设的太大一般是一个坏主意。
(3)MaxSpareThreads 75
设置空闲子进程的最大数量。若是当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在很是繁忙机器上才须要调整这个参数。将此参数设的太大一般是一个坏主意。若是你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改为”MinSpareServers+1″。
(4)ServerLimit 2000
服务器容许配置的进程数上限。只有在你须要将MaxClients设置成高于默认值256的时候才须要使用。要将此指令的值保持和MaxClients同样。修改此指令的值必须彻底中止服务后再启动才能生效,以restart方式从新启动将不会生效。
(5)MaxClients/MaxRequestWorkers 256
用于客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,若是要提升这个值必须同时提升ServerLimit的值。建议将初始值设为(以MB为单位的最大物理内存/2),而后根据负载状况进行动态调整。
好比一台4G内存的机器,那么初始值就是4000/2=2000。
(6)MaxRequestsPerChild / MaxConnectionsPerChild 0
设置的是每一个子进程可处理的请求数,每一个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。内存较大的服务器能够设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100。因此通常状况下,若是你发现服务器的内存直线上升,建议修改该参数试试。
注意:
以上配置项可在/usr/local/http-2.4.23/conf/extra/httpd-mpm.conf设置并在httpd.conf文件中经过include选项引用。
4.开启Apache的Gzip(deflate)功能:
gzip能够极大的加速网站,有时压缩比率高到80%,最少都有40%以上,仍是至关不错的。
在Apache2以后的版本,模块名不叫gzip,而叫mod_deflate
未使用Gzip
开启使用Gzip
(1)若是要开启deflate的话,必定要打开下面两个模块
LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so
设置压缩比率,取值范围在1(最低)到9(最高)之间,不建议设置过高,虽然有很高的压缩率,可是占用更多的CPU资源
注意:
若是没有安装:
A:编译时安装方法:
编译的时候跟上--enable-deflate便可实现安装
B:DSO方式安装:
cd /root/httpd-2.4.23/modules/filters/ #切到apache源码包mod_deflate所在的目录下
# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c #以dso的方式编译安装到apache中
# /usr/local/http2.2/bin/apxs -c -i -a /root/httpd-2.2.17/modules/metadata/mod_headers.c #以dso的方式编译安装到apache中
[root@www filters]# ll /usr/local/http-2.4.23/modules/mod_deflate.so #检查mod_deflate是否安装,成功安装这里会显示出该文件
-rwxr-xr-x. 1 root root 98144 Oct 22 23:14 /usr/local/http-2.4.23/modules/mod_deflate.so
apxs命令参数说明:
-i :此选项表示须要执行安装操做,以安装一个或多个动态共享对象到服务器的modules目录中。
-a:此选项自动增长一个LoadModule行到httpd.conf文件中,以启用此模块,或者,若是此行已经存在,则启用之。
-c:此选项表示须要执行编译操做
注意:
若是重启的时候出现错误:
引用:
Cannot load /usr/local/apache/modules/mod_deflate.so into server: /usr/local/apache/modules/mod_deflate.so: undefined symbol: inflateEnd
须要在LoadModuledeflate_module modules/mod_deflate.so 的前面加载zlib.so
这里须要注意的是:LoadModuledeflate_module须要放在LoadModulephp5_module以后
引用:
LoadFile/usr/lib/libz.so(x64系统中该库文件位于/usr/lib64目录下,能够软连接到/usr/lib下LoadModule deflate_module modules/mod_deflate.so)
(3)从新启动httpd
sudo /Applications/MAMP/Library/bin/apachectl graceful
(4)修改Apache配置文件开启gzip压缩传输参数详解:
修改Apache主配置httpd.conf文件,增长配置参数:
LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so
打开httpd.conf后,先将上面两行配置前面的#号去掉,这样Apache就会启用这个两个模块,
其中mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩;
mod_headers那么浏览器就会对gzip压缩过的页面进行下载,而没法正常显示。
在httpd.conf中加入如下代码,能够加到任何空白地方,不了解Apache的话,若是担忧加错地方,就放到http.conf文件的最后一行
注意:
在添加代码前最好先查一查要添加的代码是否存在
<IfModule mod_deflate.c> DeflateCompressionLevel 9 #压缩程度的等级,预设能够采用6这个数值,以维持耗用处理器效能与网页压缩质量的平衡。 SetOutputFilter DEFLATE #设置输出过滤器,对输出启用压缩,必须的,就像一个开关同样,告诉Apache对传输到浏览器的内容进行压缩 #AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php #设置对文件的内容进行压缩,例如text/html text/css text/plain等 #AddOutputFilterByType DEFLATE image/* 注意:图片不须要进行压缩,不然越压缩越大 AddOutputFilterByType DEFLATE text/* AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #设置对JavaScript文件进行压缩 AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #设置对PHP类型的文件进行压缩 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩。 SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #设置不对exe,tgz,gz等的文件进行压缩 SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary #设置不对pdf,avi,mp3等的文件进行压缩 </IfModule>
(5)设置日志输出
DeflateFilterNote Input input_info #声明输入流的byte数量 DeflateFilterNote Output output_info #声明输出流的byte数量 DeflateFilterNote Ratio ratio_info #声明压缩的百分比 LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate #声明日志格式 CustomLog logs/deflate_log.log deflate
(6)修改后保存退出并重启httpd服务
sudo /Applications/MAMP/Library/bin/apachectl graceful
查看日志:
注意:
图片是不须要启用Gzip压缩的,接下来不妨作个测试,针对图片作压缩后的效果验证。
(1)首先上传一张图片到Apache根目录
(2)编辑index.html首页把图片加上
(3)重启httpd服务
(4)访问测试页面,查看日志图片压缩前的大小
查看日志:
(5)那么,接下来开启gzip图片的压缩功能
(6)保存退出,重启服务
(7)再次查看日志以及验证:
从Gzip检测结果来看,压缩后的图片体积居然大过原体积!这就解释了为何图片不用启用GZip压缩的缘由了!
能够检测了几个门户网站的图片,还有Google、baidu的图片,通通都没有启用图片GZip压缩,只是启用了html、css、js等文件的GZip压缩,这就更加说明了GZip压缩不适用于图片上。另外,除了图片以外,flash的swf文件也是不用启用GZip压缩的。
5.配置mod_expires模块
这个是很是有用的优化,mod_expires能够减小20-30%左右的重复请求,让重复的用户对指定的页面请求结果都cache在本地,根本不向服务器发出请求。但要注意更新快的文件不要这么作。
这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期(expirationdate)能够设置为相对于源文件的最后修改时刻或者客户端的访问时刻。
(1)未启用Expires的效果:
curl -I w.tt.com
HTTP/1.1 200 OK
Date: Sat, 29 Jun 2019 08:46:58 GMT
Server: Apache
X-Powered-By: PHP/7.3.1
Content-Type: text/html; charset=UTF-8
(2)启用Expires缓存:
LoadModule expires_module modules/mod_expires.so
(3)而后添加Expires配置规则:
<IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "now plus 1 month" ExpiresByType application/x-javascript "now plus 5 day" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/bmp "access plus 1 month" ExpiresByType image/x-icon "access plus 1 month" ExpiresByType image/png "access plus 1 minutes" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresDefault "now plus 0 minutes" </IfModule>
(4)重启服务,并验证
ExpiresDefault 和ExpiresByType指令一样可以用易懂的语法格式进行定义:
ExpiresDefault "<base> [plus] {<num><type>}" ExpiresByType type/encoding "<base> [plus] {<num><type>}"
其中<base>是下列之一:
• access
• now(等价于'access ')
• modification
plus关键字是可选的。<num>必须是整数,<type>是下列之一:
• years //年
• months//月
• weeks//星期
• days/日
• hours/时
• minutes/分
• seconds/秒
例如,下列3个指令都表示文档默认的有效期是一个月:
ExpiresDefault "access plus 1 month" ExpiresDefault "access plus 4 weeks" ExpiresDefault "access plus 30 days"
有效期能够经过增长"<num><type>"子句进一步调整:
ExpiresByType text/html "access plus 1 month 15 days 2 hours" ExpiresByType image/gif "modification plus 5 hours 3 minutes"
注意:
若是你使用基于最后修改日期的设置,"Expires:"头将不会 被添加到那些并不是来自于磁盘文件的内容。这是由于这些内容并不存在"最后修改时间"的属性。
#GIF有效期为1个月(秒数)
ExpiresByType image/gif A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/png A2592000 ExpiresByType image/x-icon A2592000 ExpiresByType application/x-javascript A604800 ExpiresByType text/plain A604800
HTML文档的有效期是最后修改时刻后的一星期
ExpiresByType text/html M604800
注意:
以上"M"表示源文件的最后修改时刻,"A"表示客户端对源文件的访问时刻。后面的时间则以秒计算。
6.Apache禁止目录遍历(安全)
将Options Indexes FollowSymLinks中的Indexes 去掉,就能够禁止 Apache 显示该目录结构。
注意:
Indexes 的做用就是当该网站目录下没有 index.html文件时,就会显示目录结构。
7.Apache隐藏版本信息(安全)
(1)修改以下配置文件:
vim /usr/local/http-2.4.23/conf/extra/httpd-default.conf
找到:
ServerTokens Full ServerSignature On
改为:
ServerTokens Prod
ServerSignature off
(2)重启Apache并测试:
注意:
若是你须要完全将版本之类的信息进行改头换面,你就须要在编译以前作准备或者进行重新编译了。在从新编译时,修改源码包下include目录下的ap_release.h文件
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服务的供应商名称 #define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服务的项目名称 #define AP_SERVER_BASEPRODUCT "Apache" #服务的产品名 #define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本号 #define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号 #define AP_SERVER_PATCHLEVEL_NUMBER 23 #补丁级别 #define AP_SERVER_DEVBUILD_BOOLEAN 0 #
上述列出的行,已经给出了注释,你们能够修改为本身想要的,而后编译安装以后,对方就完全不知道你的版本号了。
八、Apache日志分割(安全)
简介:
为何要日志分割?
随着网站的访问愈来愈大,WebServer产生的日志文件也会愈来愈大,若是不对日志进行分割,那么只能一次将大的日志(如Apache的日志)整个删除,
这样也丢失了不少对网站比较宝贵的信息,由于这些日志能够用来进行访问分析、网络安全监察、网络运行情况监控等,
所以管理好这些海量的日志对网站的意义是很大的。
方法1:使用rotatelogs(apache自带的工具)每隔一天记录一个日志
(1)编辑Apache的主配置文件,更改内容以下:
注释掉以下两行:
ErrorLog logs/error_log CustomLog logs/access_log common
而后添加以下两行:
ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400" CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
注意:其中86400为轮转的时间单位为秒
(2.)重启Apache验证:查看logs目录下的日志文件
注意:
因为apache自带的日志轮询工具rotatelogs,听说在进行日志切割时容易丢日志,所以咱们一般使用cronolog进行日志轮询。
方法2:使用 cronolog 为每一天创建一个新的日志
(1)下载安装cronolog程序
官网下载地址:http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxf cronolog-1.6.2.tar.gz cd cronolog-1.6.2/ ./configure && make && make install
(2)安装完成后,进到Apache主配置文件添加以下两行:
ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y%m%d.log" CustomLog "|/usr/local/sbin/cronolog logs/access-%Y%m%d.log" combined
注意:
若是Apache中有多个虚拟主机,最好每一个虚拟主机中放置一个这样的代码,并将日志文件名改为不一样的名字。
(3)重启Apache验证,查看logs目录下的日志文件
注意:
这两个管道日志文件程序还有一点不一样之处是,使用cronolog 时若是日志是放在某个不存在的路径则会自动建立目录,而使用 rotatelogs 时不能自动建立,这一点要特别注意
扩展:
#这个保证了天天一个文件夹文,件夹下每一个小时产生一个log
CustomLog "|/usr/local/sbin/cronolog logs /%Y%m%d/access_log.%H" combined
按天轮询(生产环境常见用法,推荐使用):
CustomLog "|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log" combined
按小时轮询(生产环境较常见用法):
CustomLog "|/usr/local/sbin/cronolog logs /access_www_ %Y%m%d%H.log" combined
总结:(1.)Apache常见的三种工做模式:prefork、work、event(概念)(2.)Apache针对prefork模式下的调优、针对work模式下的调优(调优)(3.)Apache开启Gzip压缩功能的调优(调优)(4.)Apache开启Expires缓存功能的调优(调优)(5.)实现Apache禁止目录遍历的功能(安全)(6.)实现Apache隐藏版本号的功能(安全)(7.)实现Apache日志切割的功能(安全)