博主QQ:819594300javascript
博客地址:http://zpf666.blog.51cto.com/php
有什么疑问的朋友能够联系博主,博主会帮大家解答,谢谢支持!1、 安装apache2.4.23css
新版本的httpd-2.4新增如下特性;html
①新增模块;java
mod_proxy_fcgi(可提供fcgi代理)mysql
mod_ratelimit(限制用户带宽)linux
mod_request(请求模块,对请求作过滤)nginx
mod_remoteip(匹配客户端的IP地址)web
②对于基于IP的访问控制作了修改,再也不支持allow,deny,order机制,而是统一使用require进行。sql
③还新增如下几条新特性;
1、MPM支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;
--enable-mpms-shared=all --with-mpm=event
2、支持event
3、支持异步读写
4、在每一个模块及每一个目录上指定日志级别
5、加强版的表达式分析器
6、每请求配置:<If>,<Elseif>
7、毫秒级别的keepalivetimeout
8、基于FQDN的虚拟主机再也不须要NameVirtualHost指令
9、支持使用自定义变量
安装环境:操做系统:Centos7.2,关闭selinux
检查httpd包是否安装,若是安装了要则卸载
上图所示没有安装过httpd,这下面开始安装工做:
安装apache2.4.23
须要下载下列所示的几个源码包:
httpd-2.4.23.tar.gz
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
zlib-1.2.8.tar.gz
pcre-8.39.tar.gz
注:apr(Apache Portable Runtime)Apache可移植运行库,它是一个对操做系统调用的抽象库,用来实现Apache内部组件对操做系统的使用,提升系统的可移植性。
安装apr和apr-util:
安装zlib:
安装pcre:
安装openssl:
说明:安装apache2.4.23时会提示openssl版本太低,是由于centos7自带的版本openssl-1.0.1e,咱们须要本身去下载openssl。
下载openssl:
#wget https://www.openssl.org/source/openssl-1.0.1u.tar.gz
下面开始安装openssl:
安装apache2.4.23:
相关参数解释以下:
--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-modules=most 明确指明要静态编译到httpd二进制文件的模块<MODULE-LIST>为空格分隔的模块名列表、all或者mostall表示包含全部模块most表示包含大部分经常使用模块
--enable-mods-shared=most 明确指明要以DSO方式编译的模块<MODULE-LIST>为空格分隔的模块名列表、all或者mostall表示包含全部模 块most表示包含大部分模块
--enable-mpms-shared=all 启用MPM全部支持的模式这样event、worker、prefork就会以模块化的方式安装要用哪一个就在 httpd.conf 里配置就行了。
--with-mpm=event 指定启用的mpm模式默认使用enevt模式在apache的早期版本2.0默认prefork,2.2版本是worker2.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调优的一个重要选项之一。
优化http程序执行路径:
修改配置文件httpd.conf,设置其中的ServerName值:
例如:ServerName www.benet.com
开启apache服务器:
设置开机后自动启动:
编辑 /etc/init.d/httpd 文件,在首行 #!/bin/sh 下面加入两行:
将 Apache 加入开机自动启动:
启动编译好的 Apache 2.4.23:
(注意:若是状态不是active(running),则重启一下httpd服务便可)
如下是用service的方式开启httpd服务。
查看一下httpd状态:
下面解决这个问题:
lynx安装上了,再次查看httpd状态:
上图报错说:请求的URL /服务器状态这个服务器上不存在。(即server-status不存在),下面继续解决问题。
返回了状态码是404:意思是请求被拒绝
这样就看能够看到httpd的状态了。
客户端测试访问(注意防火墙):
先开启httpd服务例外:
在一台客户机上访问测试:
上图显示访问成功!
2、 Apache的优化配置:
apache所运行的硬件环境都是对性能影响最大的因素,即便不能对硬件进行升级,也最好给apache一个单独的主机以避免受到其余应用的干扰。各个硬件指标中,对性能影响最大的是内存,对于静态内容(图片、javascript文件、css文件等),它决定了apache能够缓存多少内容,它缓存的内容越多,在硬盘上读取内容的机会就越少,大内存能够极大提升静态站点的速度;对动态高负载站点来讲,每一个请求保存的时间更多一些,apache的mpm模块会为每一个请求派生出相应的进程或线程分别处理,而进程或线程的数量与内存的消耗近似成正比,所以增大内存对提升动态站点的负载和运行速度也极为有利
其次是硬盘的速度,静态站点尤其突出,apache不断的在读取文件并发送给相应的请求,硬盘的读写是极其频繁的;动态站点也要不断的加载web程序(php等),一个请求甚至要读取十几个文件才能处理完成,所以尽量的提升硬盘速度和质量对提升apache的性能是有积极意义的。
最后是cpu和网络,cpu影响的是web程序执行速度,网络影响流量大小。
1、apache的工做模式:
ApacheHTTP服务器被设计为一个强大的、灵活的可以在多种平台以及不一样环境下工做的服务器。这种模块化的设计就叫作“多进程处理模块”(Multi-Processing Module,MPM),也叫作工做模式。
Prefork模式(一个非线程型的):
其主要工做方式是:当Apache服务器启动后,mpm_prefork模块会预先建立多个子进程(默认为5个),每一个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork模块再将请求转交给子进程处理,而且每一个子进程同时只能用于处理单个请求。若是当前的请求数将超过预先建立的子进程数时,mpm_prefork模块就会建立新的子进程来处理额外的请求。Apache老是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户端的请求就不须要在接收后等候子进程的产生。
因为在mpm_prefork模块中,每一个请求对应一个子进程,所以其占用的系统资源相对其余两种模块而言较多。不过mpm_prefork模块的优势在于它的每一个子进程都会独立处理对应的单个请求,这样,若是其中一个请求出现问题就不会影响到其余请求。Prefork在效率上要比Worker要高,可是内存使用大得多不擅长处理高并发的场景。
Apache在prefork工做模式下影响性能的重要参数说明:
每一个配置项解释以下:
<IfModulempm_prefork_module>
StartServers 5
#apache启动时候默认开始的子进程数
MinSpareServers 5
#最小的闲置子进程数
MaxSpareServers 10
#最大的闲置子进程数
MaxRequestWorkers 250
#MaxRequestWorkers设置了容许同时的最大接入请求数量。任何超过MaxRequestWorkers限制的请求将进入等候队列,在apache2.3.1之前的版本MaxRequestWorkers被称为MaxClients,旧的名字仍旧被支持。
MaxConnectionsPerChild 500
#设置的是每一个子进程可处理的请求数。每一个子进程在处理了“MaxConnectionsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可使每一个子进程处理更多的请求,但若是设成非零值也有两点重要的好处:一、可防止意外的内存泄漏。二、在服务器负载降低的时侯会自动减小子进程数。所以,可根据服务器的负载来调整这个值。在Apache2.3.9以前称之为MaxRequestsPerChild。
</IfModule>
注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。
(建议StartServers的值和MinSpareServers的值相等)
注3:ServerLimit和MaxClients(MaxRequestWorkers)有什么区别呢?
是由于在apache1时代,控制最大进程数只有MaxClients这个参数,而且这个参数最大值为256,而且是写死了的,试图设置为超过256是无效的,这是因为apache1时代的服务器硬件限制的。可是apache2时代因为服务器硬件的升级,硬件已经再也不是限制,因此使用ServerLimit这个参数来控制最大进程数,ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients以前,值要不小于MaxClients。
注4:查看Apache加载的模块
(static的是静态模块,shared的是动态模块)
或
(同上也有static和shared之分)
或
(只能查看编译到二进制文件中的静态模块)
注5:如何查看Apache的工做模式呢?可使用httpd -V 命令查看,另外使用httpd -l 也能够查看到(通常都用httpd -V)
注6:如何修改prefork参数和启用prefork模式(httpd默认的模式是event模式)
①经过httpd-mpm.conf定义模块的配置信息
②修改httpd的主配置文件
③重启httpd服务,让修改的配置生效
注意:在实际生产环境中,建议使用优雅启动,由于没有”service httpd reload”,等效做用的是“service httpd graceful”
或
④验证模式是否更改成prefork
Worker模式(多线程多进程):
和prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也一样会先预派生一些子进程,而后每一个子进程建立一些线程,同时包括一个监听线程,每一个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,由于线程是经过共享父进程的内存空间,所以,内存的占用会减小一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,若是一个线程出现了问题也会致使同一进程下的线程出现问题,若是是多个线程出现问题,也只是影响Apache的一部分,而不是所有。因为用到多进程多线程,须要考虑到线程的安全了,在使用keep-alive长链接的时候,某个线程会一直被占用,即便中间没有请求,须要等待到超时才会被释放(该问题在prefork模式下也存在)
总的来讲,prefork方式速度要稍高于worker,然而它须要的cpu和memory资源也稍多于woker。
Apache在worker工做模式下影响性能的重要参数说明:
每一个配置项解释以下:
<IfModulempm_worker_module>
StartServers 3
#apache启动时候默认开始的子进程数
MinSpareThreads 75
#最小空闲数量的工做线程
MaxSpareThreads 250
#最大空闲数量的工做线程
ThreadsPerChild 25
#每一个子进程产生的线程数量
MaxRequestWorkers 400
#与prefork模式相同
MaxConnectionsPerChild 0
#与prefork模式相同
</IfModule>
注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:进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体。
一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率。
线程在执行过程当中与进程仍是有区别的,每一个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。可是线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分能够同时执行。但操做系统并无将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程是具备必定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),可是它可与同属一个进程的其余的线程共享进程所拥有的所有资源.
一个线程能够建立和撤销另外一个线程;同一个进程中的多个线程之间能够并发执行.
总结进程与线程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有本身独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)两者都可并发执行.
进程和线程都是由操做系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率。
Event模式:
这是Apache最新的工做模式,是worker模式的变种(升级版),它把服务进程从链接中分离出来,与worker模式不一样的是在于它解决了keep-alive长链接的时候占用线程资源被浪费的问题,在event工做模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又容许它释放。这加强了在高并发场景下的请求处理。event模式不能很好的支持https的访问(HTTP认证相关的问题)。
(prefork、worker和event三种模式之间的转换,请参考prefork模式的注6,转换方法都是同样的。)
2、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选项引用
3、开启apache的Gzip(deflate)功能
gzip能够极大的加速网站,有时压缩比率高到80%,最少都有40%以上,仍是至关不错的。在Apache2以后的版本,模块名不叫gzip,而叫mod_deflate
未使用Gzip:
开启使用Gzip:
若是要开启moddeflate的话,必定要打开下面二个模块:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
设置压缩比率,取值范围在 1(最低) 到9(最高)之间,不建议设置过高,虽然有很高的压缩率,可是占用更多的CPU资源。
mod_deflate模块检查及安装:
看到到没有有多是没有启动,去httpd.conf配置文件看一下是否有deflate_module这个模块。
如今两个必须有的模块都有了。
若是没有安装,则按下面几种方法解决:
a.编译时安装方法
编译的时候跟上--enable-deflate便可实现安装
b.DSO方式安装
①先切到apache源码包mod_deflate所在的目录下
②以DSO的方式编译安装到apache中
注意:安装mod_deflate模块须要加参数“-I”,除此以外的其余的模块都不须要“-I”。
③检查mod_deflate和mod_headers是否安装,成功安装这里会显示出该文件
④成功安装完毕后,要优雅启动httpd服务
apxs命令参数说明:
-c 此选项表示须要执行编译操做。
-i 此选项表示须要执行安装操做,以安装一个或多个动态共享对象到服务器的modules目录中。
-a 此选项自动增长一个LoadModule行到httpd.conf文件中,以启用此模块,或者,若是此行已经存在,则启用之。
-I 此选项直接传递到给链接命令,用于增长自定义的库文件。
额外说明个参数:
-A 与 -a 选项相似,可是它增长的LoadModule命令有一个井号前缀(#),即此模块已经准备就绪但还没有启用。
注:若是的其余httpd版本实验环境下(如httpd2.2.17)
#/usr/local/http2.2/bin/apxs -c -i -a /root/httpd-2.2.17/modules/metadata/mod_deflate.c
#/usr/local/http2.2/bin/apxs -c -i -a/root/httpd-2.2.17/modules/metadata/mod_headers.c
若是重启的时候出现错误:
引用出现的错误:
Cannotload /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
这里须要注意的是LoadModule deflate_module须要放在LoadModulephp5_module以后
说明以下:
LoadFile/usr/lib/libz.so(x64系统中该库文件位于/usr/lib64目录下,能够软连接到/usr/lib下。注:若是在本实验环境下(即httpd2.4.24)ln -s /usr/local/zlib/lib/libz.so /usr/lib/)
LoadModuledeflate_module modules/mod_deflate.so
从新启动httpd:
#/usr/local/http2.4.23/bin/apachectl graceful #优雅启动httpd服务
附:安装一个没有模块怎么安装?
修改Apache配置文件开启gzip压缩传输:
①httpd.conf修改、增长配置参数:
说明:打开httpd.conf后,先将上面两行配置前面的#号去掉,这样apache就会启用这两个模块,其中mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩;mod_headers模块的做用是告诉浏览器页面使用了gzip压缩,若是不开启mod_headers那么浏览器就会对gzip压缩过的页面进行下载,而没法正常显示。
②在httpd.conf中加入如下代码,能够加到任何空白地方,不了解apache的话,若是担忧加错地方,就放到http.conf文件的最后一行。
注意:在添加代码前最好先查一查要添加的那两个代码,必定保证是存在的。
每行意思解释以下:
<IfModule mod_deflate.c>
DeflateCompressionLevel6 #压缩程度的等级,预设能够采用 6 这个数值,以维持耗用处理器效能与网页压缩质量的平衡。
SetOutputFilterDEFLATE #设置输出过滤器,对输出启用压缩,必须的,就像一个开关同样,告诉apache对传输到浏览器的内容进行压缩
#AddOutputFilterByTypeDEFLATE text/html text/plain text/xml application/x-javascriptapplication/x-httpd-php
#AddOutputFilterByType DEFLATE p_w_picpath/*
AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等.
AddOutputFilterByTypeDEFLATE application/ms* application/vnd* application/postscriptapplication/javascript application/x-javascript #对javascript文件进行压缩
AddOutputFilterByTypeDEFLATE application/x-httpd-php application/x-httpd-fastphp #对php类型的文件进行压缩.
SetEnvIfNoCaseRequest_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了
SetEnvIfNoCaseRequest_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
#同上,就是设置不对exe,tgz,gz等的文件进行压缩
SetEnvIfNoCaseRequest_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary #同上就是设置不对pdf,avi,mp3等的文件进行压缩
</IfModule>
设置日志输出!
每行意思解释以下:
DeflateFilterNoteInput input_info#声明输入流的byte数量
DeflateFilterNoteOutput output_info#声明输出流的byte数量
DeflateFilterNoteRatio ratio_info#声明压缩的百分比
LogFormat'"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate#声明日志格式
CustomLoglogs/deflate_log.log deflate
修改完成后保存退出并重启httpd服务(优雅启动):
使用谷歌浏览器测试访问,以下图显示结果:(提示:在访问测试页以前按F12键):
在index.html里面加点数据,增大它的文件大小,另外再传一个测试图片:
正式开始测试:
在谷歌浏览器,按F12:
查看日志:
注:图片是不须要启用GZip压缩的,,若是不设置SetEnvIfNoCaseRequest_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary ,则从GZip检测结果来看,压缩后的图片体积居然大过原体积!这就解释了为何图片不用启用GZip压缩的缘由了!(其实有些图片压缩仍是会变小的,大多数反而压缩了会变大)
能够检测了几个门户网站的图片,还有Google、baidu的图片,通通都没有启用图片GZip压缩,只是启用了html、css、js等文件的GZip压缩,这就更加说明了GZip压缩不适用于图片上。另外,除了图片以外,flash的swf文件也是不用启用GZip压缩的。
4、配置mod_expires模块
这个很是有用的优化,mod_expires能够减小20-30%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。但要注意更新快的文件不要这么作。
这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期(expiration date)能够设置为相对于源文件的最后修改时刻或者客户端的访问时刻。
未启用expire的效果:
启用expire缓存:
①mod_expires的安装配置:
启用expires_module
②添加Expires配置规则
③优雅启动服务
④验证
ExpiresDefault 和ExpiresByType 指令一样可以用易懂的语法格式进行定义:
ExpiresDefault"<base> [plus] {<num><type>}"
ExpiresByTypetype/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>"子句进一步调整:
ExpiresByTypetext/html "access plus 1 month 15 days 2 hours"
ExpiresByTypep_w_picpath/gif "modification plus 5 hours 3 minutes"
注意,若是你使用基于最后修改日期的设置,"Expires:"头将不会 被添加到那些并不是来自于磁盘文件的内容。这是由于这些内容并不存在"最后修改时间"的属性。
#GIF有效期为1个月(秒数)
ExpiresByTypep_w_picpath/gif A2592000
ExpiresByTypep_w_picpath/jpeg A2592000
ExpiresByTypep_w_picpath/png A2592000
ExpiresByTypep_w_picpath/x-icon A2592000
ExpiresByTypeapplication/x-javascript A604800
ExpiresByTypetext/plain A604800
#HTML文档的有效期是最后修改时刻后的一星期
ExpiresByTypetext/html M604800
</IfModule>
"M"表示源文件的最后修改时刻,"A"表示客户端对源文件的访问时刻。后面的时间则以秒计算。
有关 Apache Expires Module 的介绍,能够参阅其官方文档:
http://httpd.apache.org/docs/2.4/mod/mod_expires.html
5、Apache禁止目录遍历
将Options Indexes FollowSymLinks中的Indexes 去掉,就能够禁止 Apache 显示该目录结构。Indexes 的做用就是当该目录下没有 index.html文件时,就显示目录结构。
咱们先来看看什么是目录遍历:
遍历目录就是把/usr/local/http-2.4.23/htdocs目录下的文件和子目录全是显示出来,这样作是很不安全的。
6、apache隐藏版本信息
测试默认 apache 的状态信息:
①主配置中启用httpd-default.conf
去掉484行的注释“#”:
②修改httpd-default.conf
改为下图所示的配置:
③优雅启动httpd服务
④测试隐藏版本号后 apache 的状态信息(仍是能看见是apache,可是apache的版本看不见了)
⑤若是须要完全将版本之类的信息进行改头换面,你就须要在编译以前作准备或者进行重新编译了。在从新编译时,修改源码包下include目录下的ap_release.h文件
#define AP_SERVER_BASEVENDOR "Apache Software Foundation"#服务的供应商名称
#define AP_SERVER_BASEPROJECT "Apache HTTPServer" #服务的项目名称
#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 #
上述列出的行,已经给出了注释,你们能够修改为本身想要的,而后编译安装以后,对方就完全不知道你的版本号了。
7、Apache日志切割
为何要分割日志?
随着网站的访问愈来愈大,WebServer产生的日志文件也会愈来愈大,若是不对日志进行分割,那么只能一次将大的日志(如Apache的日志)整个删除,这样也丢失了不少对网站比较宝贵的信息,由于这些日志能够用来进行访问分析、网络安全监察、网络运行情况监控等,所以管理好这些海量的日志对网站的意义是很大的。
方法1:使用rotatelogs(apache自带的工具)每隔一天记录一个日志
编辑Apache的主配置文件,更改内容以下:
注释掉以下两行:
而后再添加以下两行:
截图中内容以下:
ErrorLog"|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log86400"
CustomLog"|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log86400" combined
注:其中86400为轮转的时间单位为秒
验证:查看logs目录下的日志文件
注:优雅启动后会当即产生error日志,可是要一台客户机访问一下这台web服务器,才会产生access日志。
说明:因为apache自带的日志轮询工具rotatelogs,听说在进行日志切割时容易丢日志,所以咱们一般使用cronolog进行日志轮询。
方法二、使用 cronolog 为每一天创建一个新的日志
安装cronolog程序:
同上一种方法所示,注释掉276和305两行:
添加以下两行:
说明:若是Apache中有多个虚拟主机,最好每一个虚拟主机中放置一个这样的代码,并将日志文件名改为不一样的名字。
扩展:
①这个保证了天天一个文件夹文件夹下每一个小时产生一个log
②按天轮询(生产环境常见用法,推荐使用):
③按小时轮询(生产环境较常见用法):
注意:第一种方法和第二种方法这两个管道日志文件程序(即“|”)还有一点不一样之处是使用cronolog 时若是日志是放在某个不存在的路径则会自动建立目录,而使用 rotatelogs 时不能自动建立,这一点要特别注意。
7、配置防盗链
说明:有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有多是被别人盗链了。
举个例子:好比你搭了个discuz论坛,里面有些热点图片、视频;而后别人将他网站上访问图片的地址重定向到你的discuz上,这样他的服务器就能够空闲出来了;也就是说别人访问他网站的图片视频,消耗的确是你服务器的资源;
解决这个问题的方法是配置下防盗链,让外来的盗不了链。
方法1:Apache 防盗链的第一种实现方法,能够用rewrite实现。
首先要确认 Apache 的rewrite module可用:
从上图能够看出没有rewrite module模块,有两种缘由,一是没有下载安装,二就是没有启用,咱们先去看看httpd主配置文件里面有没有rewrite module这块模块,是否是没启动,若是有启动便可。
(去掉158行的注释“#”便可)
而后在找到本身网站对应的配置的地方(如在主配置文件中或虚拟主机中),加入下列代码:
截图中内容以下:
RewriteEngineOn
RewriteCond%{HTTP_REFERER} !^$
RewriteCond%{HTTP_REFERER} !benet\.com/.*$ [NC]
RewriteCond%{HTTP_REFERER} !www\.benet\.com/.*$ [NC]
RewriteRule.*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png[R,NC,L]
注:相关选项的解释
1.RewriteEngine On #启用rewrite,要想rewrite起做用,必需要写上
2.RewriteCond test-string condPattern #写在RewriteRule以前,能够有一或N条,用于测试rewrite的匹配条件,具体怎么写,后面会详细说到。
3.RewriteRule Pattern Substitution #规则
4.%{HTTP_REFERER}:服务器变量,HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,通常会带上Referer,告诉服务器我是从哪一个页面连接过来的,服务器藉此能够得到一些信息用于处理。好比从我主页上连接到一个朋友那里,他的服务器就可以从HTTP Referer中统计出天天有多少用户点击我主页上的连接访问他的网站。
5.[ NC]指的是不区分大小写,[R]强制重定向 redirect
6.字母L表示若是能匹配本条规则,那么本条规则是最后一条(Last),忽略以后的规则
防盗链配置的说明:
1. 红色部分: 表示本身的信任站点。对个人站点来讲,设置为 http://www.benet.com 和 http://benet.com
2. 绿色部分: 要保护文件的扩展名(以|分开)。以这些为扩展名的文件,必须经过红色标注的网址引用,才能够访问。
3. 蓝色部分: 定义被盗链时替代的图片,让全部盗链 jpg、gif、swf 等文件的网页,显示网页文档根目录下的about/ nolink.png 文件。注意:替换显示的图片不要放在设置防盗链的目录中,而且该图片文件体积越小越好。固然你也能够不设置替换图片,而是使用下面的语句便可:RewriteRule .*\.(gif|jpg|png)$ - [F]
注:[F] (强制URL为被禁止的forbidden),强制当前URL为被禁止的,即,当即反馈一个HTTP响应代码403(被禁止的)。
注:
RewriteCond%{HTTP_REFERER}!^$
上面这一行意在容许空“HTTP_REFERER”的访问,即容许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。
RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]
设置容许访问的HTTP来源,包括网站自身。
RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png[R,NC,L]
将不知足referer条件的访问重定向至nolink.png。nolink.png位于容许“盗链”的目录about中,要至关注意,否则,警告信息和图片将没法在对方网站上显示。
注意:测试时要清除济浏览器缓存
如今开始测试:
①在httpd主配置文件末尾新加入了那五行,保存退出,要优雅启动
②准备两张测试图片
③在httpdB的首页上盗链(即作超连接)httpdA网站的paoche.jpg资源
④修改httpdB和客户机的hosts文件
⑤在一台客户机上进行测试
实验成功了,须要注意的是,若是是在实验环境下,不要忘记开启两台web服务器的80端口例外。
方法2:经过判断浏览器头信息来阻止某些请求,即利用SetEnvIfNoCase和access。
说明:这个方法能够经过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。
语法: SetEnvIfNoCase attribute regex [!]env-variable[=value][[!]env-variable[=value]] ...
SetEnvIfNoCase当知足某个条件时,为变量赋值,即根据客户端请求属性设置环境变量。
注:Referer :指明了请求当前资源原始资源的URL,使用referer是能够防盗链。
而后在找到本身网站对应的配置的地方(如在主配置文件中或虚拟主机中),加入下列代码:
截图中内容以下:
SetEnvIfNoCaseReferer "^$" local_ref
SetEnvIfNoCaseReferer "www.benet.com/.*$" local_ref
SetEnvIfNoCaseReferer "benet.com/.*$" local_ref
<filesmatch"\.(mp3|mp4|zip|rar|jpg|gif)">
方法一:
Order Deny,Allow
Allow from env=local_ref
Deny from all
方法二:
Order Allow,Deny
Allow from env=local_ref
#2.4版本以上,接着新添加以下内容:
截图中内容以下:
Require alldenied
Require env local_ref
</filesmatch>
下面开始测试:
①修改完了httpd主配置文件,要优雅启动:
②在一台客户机上测试(先清除客户机的浏览器缓存,再测试)
3、fcgi模式编译安装LAMP+xcache
php的工做模式:
php在lamp环境下共有三种工做模式:CGI模式、apache模块、FastCGI模式。CGI模式下运行PHP,性能不是很好。做为apache的模块方式运行,在之前的课程中编译安装lamp已经介绍过了。FastCGI的方式和apache模块的不一样点在于:FastCGI方式PHP是一处独立的进程,全部PHP子进程都由PHP的一个叫做php-fpm的组件负责管理;而apache模块化方式运行的PHP,则是apache负责调用PHP完成工做。PHP的FastCGI方式性能要比apache模块化方式强不少,今天咱们以FastCGI方式编译安装lamp。
FastCGI工做机制:
首先客户端发起请求,请求分为2种,一种是静态请求它能够直接由Apache直接响应返回;另外一种是动态的请求,如其中包含中php或者Perl这种脚本解释性语言,则由Apache服务器经过fastcgi协议调用php服务器执行并返回给Apache由Apache返回解释执行后的结果,若是这个过程当中涉及到对数据的操做,此时php服务器还会还会经过mysql协议调用mysql服务器。
编译环境及各软件版本:
Linux |
Web服务器 |
Php |
Mysql数据库 |
xcache |
Centos7.2 |
Httpd-2.4.23 |
php-5.4.26 |
Mysql5.7 |
xcache-3.1.0 |
主机规划
至少3台主机,操做系统都是centos7.2.网段在192.168.1.0,
网关192.168.1.1
分配以下:
1台httpd服务器(192.168.1.7)
1台php服务器(192.168.1.8)
1台mysql服务器(192.168.1.9)
编译安装LAMP:
编译安装apache(请参考前面apache的安装)
编译安装mysql(请参考mysql安装)
FastCGI方式安装php
下面安装php服务器:
1、解决依赖关系
安装libmcrypt:
2、编译安装php
上面截图的内容以下:
./configure--prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd--with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm--enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir--with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash--with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc--with-config-file-scan-dir=/etc/php.d --with-bz2--enable-maintainer-zts &&make && make install
相关选项的解释:
--prefix=/usr/local/php5.6 //安装位置
--with-mysql=mysqlnd //支持mysql
--with-pdo-mysql=mysqlnd //支持pdo模块
--with-mysqli=mysqlnd //支持mysqli模块
注:上面的三选项的做用:数据库与php不在一个服务器上,指定此种方式,安装数据库链接驱动
--with-openssl //支持openssl模块
--enable-fpm //支持fpm模式
--enable-sockets //启用socket支持
--enable-sysvshm //启用系统共享内存支持
--enable-mbstring //多字节字串、像咱们的中文就是多字节字串
--with-freetype-dir //支持freetype、就要装freetype-devel、跟字体相关的、字体解析工具
--with-jpeg-dir
--with-png-dir
注:上面的二选项的做用:处理jpeg、png图片的、php能够动态生成jpeg图片
--with-zlib //是个压缩库、在互联网传输时用来压缩传输的
--with-libxml-dir=/usr //这个libxml是用来解析xml的、指定/usr下
--enable-xml //支持xml的
--with-mhash //支持mhash
--with-mcrypt=/usr/local/libmcrypt //libmcrypt-devel这个程序包所指定的
--with-config-file-path=/etc //指定配置文件的存放路径的
--with-config-file-scan-dir=/etc/php.d //配置文件扫描路径
--with-bz2 //支持BZip2
为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项
说明:若是使用PHP5.3以上版本,为了连接MySQL数据库,能够指定mysqlnd,这样在本机就不须要先安装MySQL或MySQL开发包了。mysqlnd从php5.3开始可用,能够编译时绑定到它(而不用和具体的MySQL客户端库绑定造成依赖),但从PHP 5.4开始它就是默认设置了。
3、提供php配置文件
4、为php-fpm提供脚本
5、提供php-fpm配置文件并编辑
启动php-fpm服务:
在该主机上新建虚拟主机目录用于存放网页文件:
至此php安装配置完毕,下面配置apache经过fastcgi协议调用php。
6、配置apache(切换到apache主机上操做)
说明:在Apache2.4之后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它实际上是做为mod_proxy.so模块的扩充,所以,这两个模块都要加载。
下面这两行去掉注释“#”便可:
创建一个目录做为虚拟主机的家目录:
编辑主配置文件httpd.conf,开启虚拟主机:
去掉下面这一行的注释“#”:
同时定位 AddType;添加下面两行:让apache能识别php格式的页面:
而且定位至DirectoryIndex:支持php格式的主页(添加index.php(最好添加在最前面)
配置虚拟主机支持使用fcgi:
截图的内容以下:
<VirtualHost*:80>
ServerAdmin webmaster@benet.com
DocumentRoot "/var/www/benet"
ServerName www.benet.com
ServerAlias benet.com
ErrorLog"logs/benet.com-error_log"
CustomLog"logs/benet.com-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.1.8:9000/var/www/benet/$1
#<LocationMatch"^(.*\.php(/.*)?)$">
#ProxyPassfcgi://192.168.1.8:9000/var/www/benet
#</LocationMatch>
<Directory"/var/www/benet">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
注意:本配置文件下面的那个虚拟主机实例删除掉。
上面的配置项解释以下:
ProxyRequests off #关闭正向代理
ProxyPassMatch #把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少须要知道运行的目录和URI,因此这里直接在fcgi://192.168.1.8:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不须要手动指定。
特别注意的是,红色字体部分须要与<VirtualHost >中的 DocumentRoot 后的路径一致,ProxyPassMatch只有知足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(.*\.php(/.*)?)$
从网站(虚拟主机<VirtualHost >的根目录开始,匹配任何以 .php 结尾,或者在 .php 以后紧跟一个 / 再跟别的内容的路径。
^(caret) 和 $ (dollar)标志要匹配的路径的开始和结束
()括号里的内容能够用 $1 来表示,以方便后面引用它。
fcgi://192.168.1.81:9000经过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到 PHP-FPM 监听的端口。
/path/to/your/documentroot/
很是重要!必须与虚拟主机的路径匹配,且必须是对应 php 文件在操做系统中的绝对路径。不然会找不到文件。
$1能够从原始请求扩展成整个请求路径的变量,这里指代前面( ) 里面匹配的那个路径(uri)
补充:Apache httpd 2.4之前的版本中,要么把PHP做为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。
优雅启动httpd服务:
下面测试LAMP环境:
先在mysql主机上建立用于php服务器链接的mysql帐户:
Mysql服务器防火墙上开启3306端口例外:
在php服务器上的/var/www/benet目录下建立.php的测试页:
不要忘记web服务器也要开启80端口例外:
在客户机上访问php测试页:
如今客户机的hosts文件里面添加映射关系:
能够看到上面两个测试页说明apache、php、mysql之间能够协同工做了。
7、压力测试
网站性能压力测试是服务器网站性能调优过程当中必不可缺乏的一环。只有让服务器处在高压状况下,才能真正体现出软件、硬件等各类设置不当所暴露出的问题。
性能测试工具目前最多见的有如下几种:ab、http_load、webbench、siege。今天咱们专门来介绍ab。
ab是apache自带的压力测试工具。ab很是实用,它不只能够对apache服务器进行网站访问压力测试,也能够对或其它类型的服务器进行压力测试。好比nginx、tomcat、IIS等。
下面咱们开始介绍有关ab命令的使用:
1.ab的原理
2.ab的安装
3.ab参数说明
4.ab性能指标
5.ab实际使用
6.测试nginx性能
1)ab的原理
ab是apachebench命令的缩写。
ab的原理:ab命令会建立多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,所以,它既能够用来测试apache的负载压力,也能够测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用不少内存。但却会给目标服务器形成巨大的负载,其原理相似CC***。本身测试使用也须要注意,不然一次上太多的负载。可能形成目标服务器资源耗完,严重时甚至致使死机。
2)ab的安装
ab的安装很是简单,若是是源码安装apache的话,那就更简单了。apache安装完毕后ab命令存放在apache安装目录的bin目录下。以下:
注意1:若是apache是经过yum的RPM包方式安装的话,ab命令默认存放在/usr/bin目录下。
注意2:注意:若是不想安装apache可是又想使用ab命令的话,咱们能够直接安装apache的工具包httpd-tools。以下:
yum-y install httpd-tools
查看ab是否安装成功,能够切换到上述目录下,使用ab –V命令进行检测。以下:
上图显示检测结果报错了,如下是解决办法:
①先用find命令查看一下
②在搜索库文件的文件里添加libssl.so.1.0.0的路径
③执行ldconfig命令使其修改生效
如今咱们再来次查看检测一次:
从上图看,问题已经解决了,能够查看到了。
3)ab参数说明
有关ab命令的使用,咱们能够经过帮助命令进行查看。以下:
下面咱们对这些参数,进行相关说明。以下:
-n:在测试会话中所执行的请求个数(即总请求数)。
-c:一次产生的请求个数(即并发用户数)。
下面开始进行压力测试:
上图中的这部分数据用于描述每一个请求处理时间的分布状况,好比以上测试,80%的请求处理时间都不超过63ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每一个请求的处理时间。
继续压力测试
咱们再来进行一次压力测试,此时并发用户数为1000,其余条件不变,查看两次测试结果的吞吐量差异。
4)ab性能指标
在进行性能测试过程当中有几个指标比较重要:
1、吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
记住:吞吐率是基于并发用户数的。这句话表明了两个含义:
a、吞吐率和并发用户数相关
b、不一样的并发用户数下,吞吐率通常是不一样的
计算公式:总请求数/处理完成这些请求数所花费的时间,即
Requestper second=Complete requests/Time taken for tests
必需要说明的是,这个数值表示当前机器的总体性能,值越大越好。
2、并发链接数(The number of concurrent connections)
并发链接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
3、并发用户数(Concurrency Level)
要注意区分这个概念和并发链接数之间的区别,一个用户可能同时会产生多个会话,也即链接数。
4、用户平均请求等待时间(Time per request)
计算公式:处理完成全部请求数所花费的时间/(总请求数/并发用户数),即:
Timeper request=Time taken for tests/(Complete requests/ConcurrencyLevel)
5、服务器平均请求等待时间(Time per request:across all concurrentrequests)
计算公式:处理完成全部请求数所花费的时间/总请求数,即:
Timetaken for/testsComplete requests
能够看到,它是吞吐率的倒数。
同时,它也等于用户平均请求等待时间/并发用户数,即
Timeper request/Concurrency Level
8、CentOS7.2下安装php加速软件Xcache(在php主机上完成下面的操做)
事先说明一下:
php安装目录:/usr/local/php5.6
php.ini配置文件路径:/etc/php.ini
php网页根目录:/var/www/benet
1)安装xcache
wgethttp://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
#下载
2)建立xcache缓存文件
3)拷贝xcache后台管理程序到网站根目录
4)配置php支持xcache
在最后一行添加如下内容:
将xcache目录拷贝到apache主机的网页文档目录下:
5)测试
重启php-fpm:
浏览器打开网站根目录下面的xcache:
警告的缘由就是:没有设定系统的timezone。
说明:从PHP 5.1.0,当对使用date() 等函数时,若是 timezone 设置不正确,在每一次调用时间函数时,都会产生 E_NOTICE 或者 E_WARNING 信息。而又在 PHP 5.1.0 中,date.timezone 这个选项,默认状况下是关闭的,不管用什么PHP 命令都是格林威治标准时间,可是PHP 5.3 中好像若是没有设置也会强行抛出了这个错误的,解决此问题,只要本地化一下就好了。
解决办法以下:
①进入php.ini配置文件
②修改第913行,去掉注释“#”,并在后面加上PRC
③重启php-fpm
再次浏览验证一下:
上图能够看出,警告信息已经被解决掉了。
至此,Linux下安装php加速软件Xcache教程完成。
下面执行ab压力测试:
执行第一次压力测试:
执行第二次压力测试:
查看xcache的命中率:
多浏览不少次下面的网页:
而后去看命中率:
9、部署bbs论坛
①Discuz的程序文件解压,而且将upload中全部文件放置到网站目录(php服务器的操做)
②设置php-fpm的服务用户为下面文件的属主或者对其设置写权限,不然安装时会报错
③修改php.ini文件
④重启php-fpm
web服务器也须要有静态文件(apache服务器上操做):
设置httpd的服务用户对指定文件也须要有写权限:
在数据库服务器上建立bbs数据库及受权账户:
都置完成以后,在客户机上输入
http://www.benet.com/bbs/install便可安装
出现上面这种状况是因为php服务器安装了discuz以后致使程序发生变化从而致使动态服务器和静态服务器的程序不一致,只须要手动把bbs服务器的文件和web服务器进行一次同步便可,若是想实现自动同步,须要使用其余服务,如initory+rsync、sersync等工具。
使用以下命令进行同步:
动态服务器和静态服务器同步文件以后,再次访问bbs的网址就正常了: