一、apache介绍。
apache是一个基金会的名字,httpd才是我们要安装的软件包,早起叫apache,从2.0版本开始叫apache。
apache官网:www.apache.org
下载三个软件
http://mirrors.cnnic.cn/apache/
apr和apr-util是一个通用的函数库,可以让HTTPd不关心底层的操作系统,很方便的移植,比如从Linux到windows http://mirrors.cnnic.cn/apache/apr/
二、apache安装
分别解压三个软件
tar zxvf apr-***.tar.gz
tar zxvf apr-util-***.tar.gz
tar zxvf httpd-***.tar.gz
先安装apr
cd apr-***.tar.gz
./configure --prefix=/usr/local/apr
make && make install
在安装apr-util-***.tar.gz
./configure --prefix=/usr/local/apr-util
--with-apr=/usr/local/apr (指定apr,依赖apr)
make && make install
这里可能会出现一个问题,提示缺少expat的开发库,安装一下就好
yum install expat-devel -y
最后安装httpd-***.tar.gz
./configure --prefix=/usr/local/apr-util
--with-apr=/usr/local/apr (指定apr,依赖apr)
--with-apr-util=/usr/local/apr-util (指定apr-util,依赖apr-util)
--enable-so (支持动态加载模块,例如php)
--enable-mods-shared=most (指定加载哪些模块,most表示绝大多数)
make && make install
这里会提示缺少pcre,pcre是个Perl库.包括perl兼容的正则表达式库
进入/usr/local/apache2.4中
bin下是可执行文件
conf 是配置文件所在目录
htdocs 存放了一个访问页,默认的访问网页
logs 日志相关的目录
man 帮助文档
modules 存放了扩展模块
/usr/local/apache2.4/bin/httpd -M
/usr/local/apache2.4/bin/apachectl -M 都是查看apache加载了哪些模块
static 静态模块 和bin/httpd是绑定在一起的文件
shared 动态模块 是一个.so文件,是在modules目录下
/usr/local/apache2.4/bin/apachectl start 启动apache
netstat -lntp 查看默认监听80端口,mysql默认监听3306端口,ssh默认监听22端口
apache的三种工作模式:
(1)prefork:prefork模式算是很古老但是非常稳定的apache模式。apache在启动之初,就先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求
优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全问题
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,他并不擅长处理高并发请求,在这种场景下,它会将请求放进队列里,一直等到有可用进程,请求才会被处理
(2)worker:和prefork模式相比,worker使用了多线程和多进程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监控线程,每个请求过来会被分配到一个线程来服务。线程比进程更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现更优秀些
优点:占用更少的内存,高并发下表现优秀
缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive长连接的方式,某个线程会一直被占据,也许中间几乎没有请求,需要一直等待到超时才会被释放。如果太多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用
(3)event:它和worker模式很像,不同的是它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event模式中,会有一些专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放,增强了在高并发场景下的请求处理