徐冬丽 发表于 2018-11-22 09:54:15

Apache httpd 详解

  1.httpd简介

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

  2.安装httpd
  

  采用本地YUM源的方式进行RPM安装。
# cat /etc/yum.repos.d/mytest1.repo

name=myyumtest1
baseurl=file:///home/yum/cdrom/Server
enabled=1
gpgcheck=0
#  

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

需要注意的是,在安装HTTPD的时候,应该关闭selinux.
# getenforce
Permissive
#通过命令setenforce 0可以临时关闭selinux.
当然可以通过编辑/etc/sysconfig/selinux来关闭。
  

  

  很显然,安装完毕后,我们需要知道HTTPD安装后的配置目录在哪里?
  可以利用下面的命令来定位HTTPD的安装文件,库文件,帮助文件等。
  

# 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的相关目录
# cd /etc/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模型。
  

# /usr/sbin/httpd
You have new mail in /var/spool/mail/root
# ps aux | grep httpd
root      55890.00.6102922820 ?      Ss   22:58   0:00 /usr/sbin/httpd
apache    55900.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
apache    55910.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
apache    55920.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
apache    55930.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
apache    55940.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
apache    55950.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
apache    55960.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
apache    55970.00.4104242060 ?      S    22:58   0:00 /usr/sbin/httpd
root      55990.00.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模型的一些参数:
  
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild4000
  
  【同理类似的配置WORKER模型】
  

  Listen 80                   指明监听端口,注意HTTPD可以在多个端口同时进行监听
  Include conf.d/*.conf       说明配置文件包含关系
  

  

  

  ### Section 2: 'Main' server configuration
  DocumentRoot "/var/www/html"   指明WEBROOT根路径
  

  指明访问WEBROOT时的一些属性
  
  Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
  
  可以实现基于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来实现虚拟主机较多,因此,下面我们动手来实现这种方式的虚拟主机。
  

  

  第三步:配置文件
# vi myhttpd.conf
      1 NameVirtualHost 192.168.204.88:80
      2
      3
      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
      9
   10
   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   

  myhttpd.conf是在/etc/httpd/conf.d下新建的配置文件。
  需要明确,IP:PORT,SERVERNAME,DOCUMENTROOT,LOGPATH等信息。
  

  

  第四步:准备DOCUMENTROOT,并测试配置文件
# cd /web
# tree .
.
|-- hello.html
|-- index.html
|-- v1
|   `-- hello.html
|-- v2
|   `-- hello.html
`-- world.html -> /etc/passwd
2 directories, 5 files
#
# httpd -t
Syntax OK  

  

  第五步:本地指明HOSTS
  192.168.204.88www.zfz1.com
  192.168.204.88www.zfz2.com
  

  

  第六步:启动HTTPD并测试访问
# service httpd start
Starting httpd:                                          
# ps aux | grep httpd
root      34140.00.6104202912 ?      Ss   22:36   0:00 /usr/sbin/httpd
apache    34150.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
apache    34160.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
apache    34170.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
apache    34180.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
apache    34200.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
apache    34210.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
apache    34220.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
apache    34230.00.4104202140 ?      S    22:36   0:00 /usr/sbin/httpd
root      34520.00.1   3896   664 pts/2    R+   22:38   0:00 grep httpd  

  


  

  


  

  

  




页: [1]
查看完整版本: Apache httpd 详解