Apache httpd 详解

简介:

1.httpd简介

apache server(httpd),作为非常流行的WEB服务器,长期以来稳居第一。


2.安装httpd


采用本地YUM源的方式进行RPM安装。

1
2
3
4
5
6
7
[root@localhost ~] # cat /etc/yum.repos.d/mytest1.repo 
[mytest1]
name=myyumtest1
baseurl= file : ///home/yum/cdrom/Server
enabled=1
gpgcheck=0
[root@localhost ~] #


采用yum install httpd即可安装完毕。


需要注意的是,在安装HTTPD的时候,应该关闭selinux.

1
2
3
[root@localhost ~] # getenforce
Permissive
[root@localhost ~] #

通过命令setenforce 0可以临时关闭selinux.

当然可以通过编辑/etc/sysconfig/selinux来关闭。



很显然,安装完毕后,我们需要知道HTTPD安装后的配置目录在哪里?

可以利用下面的命令来定位HTTPD的安装文件,库文件,帮助文件等。


1
2
3
4
5
6
7
[root@localhost ~] # rpm -ql httpd | more
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf .d
/etc/httpd/conf .d /README
/etc/httpd/conf .d /proxy_ajp .conf
/etc/httpd/conf .d /welcome .conf


3. 认识HTTPD的相关目录

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~] # cd /etc/httpd
[root@localhost httpd] # tree .
.
|-- conf
|   |-- httpd.conf
|   `-- magic
|-- conf.d
|   |-- README
|   |-- proxy_ajp.conf
|   `-- welcome.conf
|-- logs -> ../.. /var/log/httpd
|-- modules -> ../.. /usr/lib/httpd/modules
`-- run -> ../.. /var/run

第一,httpd的主配置文件是/etc/httpd/conf/httpd.conf

第二,在httpd.conf文件中通过include指令将conf.d/*.conf进行包含,也就是说,以后我们可以在conf.d目录下新增自己的配置文件。

第三,对于WEB服务器而言,都有一个功能,那就是记录访问,错误日志。HTTPD的日志目录在/var/log/httpd下。

第四,HTTPD的一个特性,就是模块化设计。我们可以增加模块来添加功能。



4. HTTPD的几种运行模型

对于HTTPD处理用户请求有几种模型:


perfork模型:

默认模型。在HTTPD启动后,便会有多个进程启动监听指定端口,然后一个请求被一个进程处理。也就是多进程处理模型。很显然,多进程处理的话,由于进程间的独立性,所以比较稳定。但是如果请求过多,进程所需要的资源,特别是内存,会非常大,同时CPU在很多进程间切换,也将非常耗时。


worker模型:

是一种多线程处理用户请求的方式。说白了,就是一个进程创建多个线程处理用户请求。由于多个线程间可以共享资源,对内存等资源需求小,但是容易出现死锁现象。



event模型:

基于事件驱动,综合使用了perfork和worker模型。


1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost httpd] # /usr/sbin/httpd
You have new mail  in  /var/spool/mail/root
[root@localhost httpd] # ps aux | grep httpd
root      5589  0.0  0.6  10292  2820 ?        Ss   22:58   0:00  /usr/sbin/httpd
apache    5590  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
apache    5591  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
apache    5592  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
apache    5593  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
apache    5594  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
apache    5595  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
apache    5596  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
apache    5597  0.0  0.4  10424  2060 ?        S    22:58   0:00  /usr/sbin/httpd
root      5599  0.0  0.1   3896   664 pts /0     R+   22:59   0:00  grep  httpd

启动HTTPD,可以通过/usr/sbin/httpd来启动,或者service httpd start。

默认,HTTPD的工作模型是perfork。

通过上面的,可以知道,启动HTTPD后,由于HTTPD的特性【事先创建进程】,会有多个HTTPD的进程,其中会有一个HTTPD的进程的OWER:GROUP都是ROOT。【很显然,这是一个主导进程,用于创建,销毁其他HTTPD进程的 master process】。其他HTTPD进程可以成为工作进程,work process.

说白了,就是每一个用户请求,由master process负责创建work process来响应。



5. HTTPD的主配置文件分析

### Section 1: Global Environment

重要的配置片段:

ServerRoot "/etc/httpd"    说明HTTPD的工作目录

KeepAlive Off              由于HTTP协议有1.0,1.1两个版本。1.1支持长连接。


可以配置PERFORK模型的一些参数:

<IfModule prefork.c>

StartServers       8

MinSpareServers    5

MaxSpareServers   20

ServerLimit      256

MaxClients       256

MaxRequestsPerChild  4000

</IfModule>

【同理类似的配置WORKER模型】


Listen 80                   指明监听端口,注意HTTPD可以在多个端口同时进行监听

Include conf.d/*.conf       说明配置文件包含关系




### Section 2: 'Main' server configuration

DocumentRoot "/var/www/html"   指明WEBROOT根路径


指明访问WEBROOT时的一些属性

<Directory "/var/www/html">

Options Indexes FollowSymLinks

 AllowOverride None

 Order allow,deny

 Allow from all

</Directory>

可以实现基于IP,用户等的访问限制。



### Section 3: Virtual Hosts

虚拟主机配置。



6. HTTPD的虚拟主机配置实战

第一步:


由于### Section 2: 'Main' server configuration和### Section 3: Virtual Hosts不可以同时生效。因此配置虚拟主机,需要首先注释掉 #DocumentRoot "/var/www/html"



第二步:


虚拟主机,实际上可以通过以下几种方式来实现:

基于IP。说白了,一台物理主机,多个网卡,多个IP地址。

基于PORT。一台物理主机,监听多个端口。

基于SERVER NAME。

由于,实际中基于SERVER NAME来实现虚拟主机较多,因此,下面我们动手来实现这种方式的虚拟主机。



第三步:配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost conf.d] # vi myhttpd.conf
       1 NameVirtualHost 192.168.204.88:80
      
       3 <VirtualHost 192.168.204.88:80>
       4     DocumentRoot  /web/v1/
       5     ServerName   www.zfz1.com
       6     ErrorLog logs /www .zfz1.com-error_log
       7     CustomLog logs /www .zfz1.com-access_log common
       8 < /VirtualHost >
      
      10 <VirtualHost 192.168.204.88:80>
      11     DocumentRoot  /web/v2/
      12     ServerName   www.zfz2.com
      13     ErrorLog logs /www .zfz2.com-error_log
      14     CustomLog logs /www .zfz2.com-access_log common
      15 < /VirtualHost >


myhttpd.conf是在/etc/httpd/conf.d下新建的配置文件。

需要明确,IP:PORT,SERVERNAME,DOCUMENTROOT,LOGPATH等信息。



第四步:准备DOCUMENTROOT,并测试配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost v2] # cd /web
[root@localhost web] # tree .
.
|-- hello.html
|-- index.html
|-- v1
|   `-- hello.html
|-- v2
|   `-- hello.html
`-- world.html ->  /etc/passwd
2 directories, 5 files
[root@localhost web]
[root@localhost conf.d] # httpd -t
Syntax OK



第五步:本地指明HOSTS

192.168.204.88  www.zfz1.com

192.168.204.88  www.zfz2.com



第六步:启动HTTPD并测试访问

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost conf.d] # service httpd start
Starting httpd:                                            [  OK  ]
[root@localhost ~] # ps aux | grep httpd
root      3414  0.0  0.6  10420  2912 ?        Ss   22:36   0:00  /usr/sbin/httpd
apache    3415  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
apache    3416  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
apache    3417  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
apache    3418  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
apache    3420  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
apache    3421  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
apache    3422  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
apache    3423  0.0  0.4  10420  2140 ?        S    22:36   0:00  /usr/sbin/httpd
root      3452  0.0  0.1   3896   664 pts /2     R+   22:38   0:00  grep  httpd



wKiom1P8nLOwPQuqAABbfQ2Pr-g553.jpg



wKioL1P8nevSvepgAABD3t6phvI314.jpg


本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1545425,如需转载请自行联系原作者


相关文章
|
4月前
|
Linux 网络安全 Apache
Centos下操作Apache httpd
Centos下操作Apache httpd
70 0
|
人工智能 网络协议 安全
Apache(httpd)的简介、安装以及如何使用(上)
Apache(httpd)的简介、安装以及如何使用(上)
462 0
Apache(httpd)的简介、安装以及如何使用(上)
|
1月前
|
Shell Linux 网络安全
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
30 0
|
7月前
|
缓存 网络协议 PHP
httpd和apache
httpd和apache
41 0
|
关系型数据库 MySQL 应用服务中间件
在Centos7上将Apache(httpd)切换为Nginx的过程记录
近期要上线几个基于tornado+motor的移动端接口服务,众所周知,Apache和tornado天生八字不合,尤其apache对python3尤为的不友好,tornado和nginx才是木石前盟,另外由于apache目前系统占用确实比较高,不光进程数多,httpd竟然占用了200多M,太庞大,决定换为较轻量级,高并发的nginx。
在Centos7上将Apache(httpd)切换为Nginx的过程记录
|
安全 Apache
CVE-2021-42013 Apache HTTPd 2.4.49 2.4.50 路径穿越以及RCE漏洞
影响版本 Apache 2.4.49 Apache 2.4.50 当前描述 发现Apache HTTP Server 2.4.50中对CVE-221-41773的修复不足。攻击者可以使用路径遍历攻击将URL映射到Alias类指令配置的目录之外的文件。如果这些目录之外的文件不受通常默认配置“要求全部拒绝”的保护,这些请求可能会成功。如果还为这些别名路径启用了CGI脚本,这可能允许远程代码执行。此问题仅影响Apache 2.4.49和Apache 2.4.50,而不影响早期版本。 环境搭建可以查看我的上一篇文章 https://developer.aliyun.com/article/11136
299 0
CVE-2021-42013 Apache HTTPd 2.4.49 2.4.50 路径穿越以及RCE漏洞
|
网络协议 安全 Apache
Apache(httpd)的简介、安装以及如何使用(下)
Apache(httpd)的简介、安装以及如何使用(下)
217 0
Apache(httpd)的简介、安装以及如何使用(下)
|
安全 网络协议 算法
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
212 0
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
|
安全 网络协议 网络安全
RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除
RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除
189 0
RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除

热门文章

最新文章

推荐镜像

更多