httpd(Apache)
httpd是世界使用排名第一的Web服务器,通过可扩展模块可以加载各种支持服务。
本次使用源码编译的方式安装httpd2.4。
首先httpd依赖于apr,apr-util,pcre(正则表达式库)
所以先要安装这三个依赖。
其中在编译安装apr-util的过程中出现了如下错误
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
经过搜索得知是缺少了expat的开发库,使用apt install libexpat1-dev
安装后顺利编译成功。
再次安装pcre后配置如下:
./configure \
--with-pcre=/usr/local/pcre \
--prefix=/usr/local/httpd \
--enable-so \
--enable-cgi \
--enable-rewrite
经过编译安装后,进入/usr/local/httpd/bin,执行httpd
然后访问http://192.168.231.128/
可以看到一个h1的It works!
安装nginx
nginx的默认依赖库有两个:pcre,zlib(gz压缩)
pcre在上一部分已经安装了,故再次编译安装zlib
最终配置如下:
./configure --with-pcre=/root/pcre-8.41 --with-zlib=/root/zlib-1.2.11
本次需要配置的依赖库路径为对应的源码路径。
配置完成后编译安装
进入/usr/local/nginx/sbin
执行./nginx
启动服务
访问http://192.168.231.128/
可以看到启动成功的标识:
CGI/FastCGI
CGI作为一种即用即调用的通用接口,优势是不常驻内存,每次请求之间不会互相影响,不会因为长时间的运行导致内存泄漏或者其他方面的问题。然而劣势就是fork&run,每次首先开启新的进程->加载资源->处理请求->释放资源,在面对大量的请求时会略有性能方面的影响。
FastCGI相对于CGI确实变的快了,在启动时便启动多个进程等待请求到来,当有请求到来时,WebServer转发请求给FastCGI,然后FastCGI直接进行处理,处理完成之后再次进入就绪状态。相对来讲免去了CGI的fork过程,处理速度会有一些提升,然而FastCGI也有一些致命缺陷:
- 运行的脚本有Bug导致某些请求长时间卡住,那么当卡死的进程超过FastCGI开启的进程数后,以后的所有请求都将无法获得结果。
- 当长时间运行时进程可能会挂掉,这时候需要一个守护进程监管工作进程并做拉起操作。