一、Apache简介
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。
Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自"a patchy server"的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
Apache服务器软件拥有以下特性:
1、支持最新的HTTP/1.1通信协议
2、拥有简单而强有力的基于文件的配置过程
3、支持通用网关接口
4、支持基于IP和基于域名的虚拟主机
5、支持多种方式的HTTP认证
6、集成Perl处理模块
7、集成代理服务器模块
8、支持实时监视服务器状态和定制服务器日志
9、支持服务器端包含指令(SSI)
10、支持安全Socket层(SSL)
11、提供用户会话过程的跟踪
12、支持FastCGI
二、进程与线程概念及区别
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
进程:一个程序对一个数据集的动态执行过程,是分配资源的基本单位。
本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
进程:拥有独立的内存单元,而多个线程共享内存,从而提高了应用程序的运行效率。
线程:每一个独立的线程,都有一个程序运行的入口、顺序执行序列、和程序的出口。但是线程不能够独立的执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但是,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及资源分配。
1、prefork的工作原理
如果不用"--with-mpm"显式指定某种MPM,prefork就是Unix平台上缺省的MPM,它所采用的预派生子进程方式也是Apache1.3中采用的模式,prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
prefork的工作原理是,控制进程在最初建立"StartServers"个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来,这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
2、worker的工作原理
相对于prefork,worker是2.0版中全新的支持多线程和多进程混合模型的MPM.由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器.但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性.这种MPM的工作方式将是Apache2.0的发展趋势.
worker的工作原理是由主控制进程生成"StartServers"个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求,同样为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数,如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。
需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。
在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。
Worker模式:Worker MPM 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。
Worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。
三、源码安装Apache
1)下载目前稳定版本:
[root@Aliyun_server_v1 ~]# yum -y install wget
[root@Aliyun_server_v1 ~]# wget -c https://mirrors.yangxingzhen.com/apache/httpd-2.2.34.tar.gz
2)安装Apache之前,需要先安装依赖包:apr apr-devel apr-util-devel gcc gcc-c++
[root@localhost ~]# yum -y install apr apr-devel apr-util-devel gcc gcc-c++ pcre pcre-devel
[root@localhost ~]# tar zxf httpd-2.2.34.tar.gz
4)预编译Apache
[root@localhost ~]# cd httpd-2.2.34
[root@localhost ~]# ./configure --prefix=/usr/local/apache --enable-rewrite --enable-so
5)编译、安装Apache
[root@localhost ~]# make &&make install
[root@localhost ~]# /usr/local/apache/bin/apachectl start
#查看进程和端口
[root@localhost ~]# netstat -lntup |grep httpd
[root@localhost ~]# ps -ef |grep httpd
源码包安装Apache默认发布目录为:/usr/local/apache/htdocs/目录下。
7)访问
#浏览器访问本机IP(192.168.20.92),会出现以下画面
若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!
广东省深圳市南山区 电信 1F
亲测,写的不错,感谢博主