http服务基于C/S结构
apache 名字来源,流传最广的解释是(也是最显而易见的):这个名字来自于一个事实:当Apache在1995年初开发的时候,它是由当时最流行的HTTP服务器NCSA HTTPd 1.3的代码修改而成的,因此是"一个修补的(a patchy)”服务器。
HTTP 和 Apache 之间的关系是:HTTP定义了客户端和服务器之间的通信规则,
而 Apache 是一种能够处理这些 HTTP 请求并提供网页内容的 Web 服务器软件。
apache功能:
apache特性:
高度模块化:core + modules
DSO:Dynamic Shared Object 动态加载/卸载
MPM:multi-processing module 多路处理模块
apache 功能多,稳定,处理静态资源优秀
prefork:多进程I/O模型,每个进程响应一个请求,CentOS 7 httpd默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作 work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求。
Prefork MPM预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景。
- 优点:稳定
-
- 缺点:慢,占用资源,不适用于高并发场景
- [root@localhost ~]#rpm -q httpd
- 未安装软件包 httpd
- [root@localhost ~]#yum -y install httpd
- [root@localhost ~]#systemctl start httpd
- 注意:如果是yum安装,默认模型是prefork模型
worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型
一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n。
worker MPM是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。
- 优点:相比prefork 占用的内存较少,可以同时处理更多的请求
-
- 缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。
- 如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)
event:事件驱动模型(worker模型的变种),CentOS8 默认模型
event MPM是Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event 模型. 属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。
- 优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放
-
- 缺点:没有线程安全控制
版本说明:
CentOS 7 以上,默认系统是httpd 2.4,CentOS 6 版默认为httpd 2.2
Ubuntu 18.04 默认 Apache/2.4.29
安装方式:
包安装: centos发行版,稳定,建议使用
编译:定制或特殊需求
- [root@localhost ~]#rpm -q httpd
- 未安装软件包 httpd
- [root@localhost ~]#yum -y install httpd
- [root@localhost ~]#systemctl start httpd
配置文件:
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 子配置文件
/etc/httpd/conf.d/conf.modules.d/ 模块加载的配置文件
检查配置语法:httpd -t 或 apache2 -t
服务单元文件:
/usr/lib/systemd/system/httpd.service
配置文件:/etc/sysconfig/httpd
服务控制和启动:
站点网页文档根目录:/var/www/html
模块文件路径:
/etc/httpd/modules
/usr/lib64/httpd/modules
主服务器程序文件:/usr/sbin/httpd
编译说明和准备
APR:Apache portable Run-time libraries,Apache可移植运行库,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。目前APR主要还是由Apache使用,由于APR的较好的移植性,因此一些需要进行移植的C程序也开始使用APR,开源项目:比如用于服务器压力测试的Flood loader tester
1.Apache安装:
Apache即阿帕奇是一款开源的、世界使用排名第一的Web服务器软件,其特点是简单高效、稳定安全所以被广泛应用于计算机技术的各个领域,但现在由于其抗并发性问题现在新公司大部分都使用Nginx代替。
2.Yum安装:
①yum安装与其他程序一样可以直接使用命令:yum install httpd -y。
②安装过程中注意查看提示信息,若无外网则需要配置本地yum源进行安装。
③出现以下提示即表示安装成功。注意:若出现error字样则表示安装出错!!!
- [root@localhost ~]#rpm -q httpd
- 未安装软件包 httpd
- [root@localhost ~]#yum -y install httpd
- [root@localhost ~]#systemctl start httpd
④ yum安装默认的主配置文件位置: /etc/httpd/conf/httpd.conf
⑤ yum安装默认的主页面配置文件夹位置: /var/www/html/
⑥ yum安装默认的日志文件位置:/var/log/httpd/access_log 此为正常日志记录,/var/log/httpd/error此为错误日志记录。
指令:
- Include file-path|directory-path|wildcard
- IncludeOptional file-path|directory-path|wildcard
说明:
Include和IncludeOptional功能相同,都可以包括其它配置文件
但是当无匹配文件时,include会报错,IncludeOptional会忽略错误
- [root@localhost ~]#grep -i include /etc/httpd/conf/httpd.conf
- Include conf.modules.d/*.conf
- # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
- # Possible values include: debug, info, notice, warn, error, crit,
- # If you include a trailing / on /webpath then the server will
- # To parse .shtml files for server-side includes (SSI):
- # (You will also need to add "Includes" to the "Options" directive.)
- AddOutputFilter INCLUDES .shtml
- IncludeOptional conf.d/*.conf
总目录:
- [root@localhost httpd]#grep -i serverroot /etc/httpd/conf/httpd.conf
- # with "/", the value of ServerRoot is prepended -- so 'log/access_log'
- # with ServerRoot set to '/www' will be interpreted by the
- # ServerRoot: The top of the directory tree under which the server's
- # ServerRoot at a non-local disk, be sure to specify a local disk on the
- # same ServerRoot for multiple httpd daemons, you will need to change at
- ServerRoot "/etc/httpd"