编译安装httpd-2.4.4
在编译httpd-2.4.4之前,我们来讨论一下httpd是如何实现和php来交互的?
当一个客户端发送一个web请求,如果这个request是请求的一个静态页面,那么httpd就直接从服务器加载静态内容返回给客户端;如果请求的是一个动态内容,例如请求的是一个php页面,那么httpd又该如何处理动态请求呢?
由于动态内容都是某种编程语言来实现的,这种编程语言需要借助额外的程序来执行,执行完这些脚本之后,就会生成一个静态页面,并将结果返回给apache服务器,Apache服务器在返回给客户端,这就是动态内容的实现机制。
这个程序叫做CGI解释器,这个解释器是由cgi(common gateway interface)产生的。CGI解释器可以是任何一种语言来编写,因此CGI解释器含有多种类型,不同的编程语言,CGI解释器不同,例如php的CGI解释器为php-cgi.
由于我们使用的httpd和php的交互方式不一样,导致服务器的性能也不一样
而httpd和php交互的方式有三种:
1、CGI方式
这种方式就是当客户端请求一个php页面时,Apache服务器会调用cgi生成一个php的CGI解释器,来直接解释执行php脚本,执行完成后生成一个页面,然后再将这个页面返回个Apache服务器,最终返回给客户端。不过一旦请求结束,那么CGI解释器这个进程会立即销毁掉。所以当有多个请求时,CGI解释器会会反复的被加载执行,可见执行效率较低。而且CGI解释器只在请求之后生成的,并不是之前生成的,所以在响应速度上比较慢。并且一旦请求的数量过多,生成的进程数也比较多,因此这种方式也很少使用了。
2、Module
这种方式是将php功能直接编译成Apache的模块,当需要php功能时,只需要加载该模块即可。模块是不能单独执行的,只有加载被调用后才可以执行 。而且一旦需要php功能,php的CGI解释器会在apache内部运行,不用重新生成一个进程,这样进程数量就减少了。
3、FastCGI/fpm
这种方式是将php功能作成一个php服务器,在这台服务器启动时,会加载FastCGI进程管理器,FastCGI进程管理器会生成多个CGI解释器进程,并等待web请求,这些CGI解释器是服务器启动后就自动创建好的,且这些进程是一直常驻在内存当中的,所以一旦有web请求时,可以立刻响应,且这些进程只需启动一次就可以了,节省了系统资源。因此这种方式来处理动态内容时更加高效。
httpd 2.4新特性:
1、MPM可于运行时装载;
--enable-mpms-shared=all --with-mpm=event
2、Event MPM
3、异步读写
4、在每模块及每目录上指定日志级别;
5、每请求配置;<If>, <ElseIf>, <Else>;
6、增强的表达式分析器;
7、毫秒级的KeepAlive Timeout;
8、基于域名的虚拟主机不再需要NameVirtualHost指令;
9、降低了内存占用;
10、支持在配置文件中使用自定义变量;
编译安装httpd-2.4.4步骤如下:
一、编译安装apr和apr-util
这里使用的源码包为apr-1.5.1.tar.bz2和apr-util-1.5.3.tar.bz2
httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。直接升级rpm包会覆盖原来的文件。这里选择使用编译源代码的方式进行。
(1)、编译安装apr-1.5.1,编译步骤如下:
#tar -jxf apr-1.5.1.tar.bz2
#cd apr-1.5.1
#./configure --prefix=/usr/local/apr #指定apr安装目录
#make
#make install
(2)、编译安装apr-util-1.5.3.tar.bz2,编译步骤如下:
#tar -jxf apr-util-1.5.3
#cd apr-util-1.5.3
#./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr (指定apr在哪)
#make
#make install
(3)、 httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。
yum install pcre-devel
二、编译安装httpd-2.4.4