一、httpd安装组成
http服务基于C/S结构
1、常见http服务器程序
- httpd apache,存在C10K(10K connections)问题
- nginx 解决C10K问题lighttpd
- IIS .asp 应用程序服务器
- tomcat .jsp 应用程序服务器
- jetty 开源的servlet容器,基于Java的web容器
- Resin CAUCHO公司,支持servlets和jsp的引擎
- webshpere:IBM公司
- weblogic:BEA,Oracle
- jboss:RedHat,IBM
- oc4j:Oracle
2、apache介绍和特点
apache 名字来源,流传最广的解释是(也是最显而易见的):这个名字来自于一个事实:当Apache在1995年初开发的时候,它是由当时最流行的HTTP服务器NCSA HTTPd 1.3的代码修改而成的,因此是"一个修补的(a patchy)”服务器。
HTTP 和 Apache 之间的关系是:HTTP定义了客户端和服务器之间的通信规则,
而 Apache 是一种能够处理这些 HTTP 请求并提供网页内容的 Web 服务器软件。
apache功能:
- 提供http协议服务
- 多个虚拟主机:IP、Port、FQDN 用一台 物理服务器搭建多个网站 百度 jd 淘宝
- CGI:Common Gateway Interface,通用网关接口,支持动态程序
- 反向代理
- 负载均衡
- 路径别名
- 丰富的用户认证机制:basic,digest
- 支持第三方模块
apache特性:
-
高度模块化:core + modules
-
DSO:Dynamic Shared Object 动态加载/卸载
-
MPM:multi-processing module 多路处理模块
apache 功能多,稳定,处理静态资源优秀
MPM multi-processing module 工作模式
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类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放缺点:没有线程安全控制
3、Httpd安装和相关文件
1.包安装httpd并启动httpd服务
版本说明:
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
2.httpd-2.4相关文件
配置文件:
-
/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
服务控制和启动:
- systemctl enable|disable httpd.service
- systemctl {start|stop|restart|status|reload} httpd.service
- apachectl start|stop|restart|configtest
- service httpd start|stop|restart|configtest
站点网页文档根目录:/var/www/html
模块文件路径:
-
/etc/httpd/modules
-
/usr/lib64/httpd/modules
主服务器程序文件:/usr/sbin/httpd
3.Centos 7 编译安装httpd 2.4
编译说明和准备
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此为错误日志记录。
二、httpd常见的配置
1、指定服务器名
2.包含其他配置文件
指令:
Include file-path|directory-path|wildcard
IncludeOptional file-path|directory-path|wildcard
说明:
-
Include和IncludeOptional功能相同,都可以包括其它配置文件
-
但是当无匹配文件时,include会报错,IncludeOptional会忽略错误
include 子配置文件
[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"