httpd的设置与使用


httpd服务 httpd是一个开源软件,且一般用作web服务器来使用。目前最流行的web服务器软件叫做httpd, 在早期的http server就叫做apache,到了http server 2.0以后就改名为httpd了。 所以有时候听到apache服务器和httpd服务器其实都是指得是一个意思。   httpd生成的文件   httpd目前有多个版本,主流有两个版本分别为:2.2、2.4, 在安装了httpd软件之后,会生成配置文件。 这些文件有:  其中主配置文件:/etc/httpd/conf/httpd.conf  分段配置文件:/etc/httpd/conf.d/*.conf(一般自己定义配置在此文件下重新建立)  模块的目录:/etc/httpd/modules  日志目录:/etc/log/httpd/*  访问日志为:./access_log  错误日志为:./err_log  网页文件的存放的根目录:/var/www/html     httpd的特性   高度模块化: core + modules  DSO:dynamic shared object  MPM:Multipath processing Modules (多路处理模块)  prefork:多进程模型,每个进程响应一个请求、一个主进程:负责生成子进程及回收子进程;负责创建套接字; 负责接收请求,并将其派发给某子进程进行处理,每个子进程处理一个请求。  worker:多进程多线程模型,每线程处理一个用户请求、一个主进程:负责生成子进程、负责创建套接字、 负责接收请求、并将其派发给某子进程进行处理,每个子进程负责生成多个线程,每个线程负责响应用户请求; 并发响应数量为:子进程数量*子进程创建的最大线程数量。  event:事件驱动模型,多进程模型,每个进程响应多个请求、一个主进程 :负责生成子进程、负责创建套接字、 负责接收请求,并将其派发给某子进程进行处理,子进程基于事件驱动机制直接响应多个请求。  注:在/etc/httpd/conf.modules.d/00-mpm.conf切换工作模型   httpd的功能特性 CGI:Common Gateway Interface 虚拟主机:IP,PORT, FQDN 反向代理 负载均衡 路径别名 丰富的用户认证机制 basic digest 支持第三方模块   服务控制 systemctl  enable|disable  httpd.service #开机启动与否 systemctl  {start|stop|restart|status}  httpd.service #单次操作状态     httpd的主配置文件 通过yum安装的httpd的主配置文件在以下路径 httpd-2.2:/etc/httpd/conf/httpd.conf httpd-2.4:/etc/httpd/conf/httpd.conf   #另外还有分段配置文件位于: /etc/httpd/conf.d/目录下,所有以.conf结尾的文件。     配置文件的结构 /etc/httpd/conf/httpd.conf Section 1: Global Environment         Section 2: 'Main' server configuration Section 3: Virtual Hosts   httpd服务的基础配置 修改监听的IP以及端口 格式为: Listen [IP-address:]portnumber [protocol] 此语句的使用有以下几点注意事项:
  • IP-address可省略,表示0.0.0.0匹配全部IP;
  • 此指令Listen可重复出现多次监听多个IP地址和端口;
  • 修改监听的socket后,需重启服务进程方可生效;
  • 若限制其必须通过ssl通信时,protocol需定义为https;
案例 [root@localhost ~]# vim /etc/httpd/conf/httpd.conf Listen 80 Listen 192.168.0.109:8080  #新增监听端口8080 使用长连接 长连接指的是tcp链接建立之后,每个资源获取完成后不全断开连接,而是继续等待其他资源请求;但是对于并发访问量较大的服务器,长连接的使用会使得后续某些请求无法得到正常的响应。对于这种情况, 可通过使用较短的长连接超时时长和设置较少的长连接请求数来缓解。 其配置命令为:     keepalive On|off  #是否启动长连接 keepAliveTimeout 15  #长连接超时时间 MaxKeepAliveRequests 100  #最多保持多少个长连接请求   定义Web目录 在httpd服务的主配置文件中,默认情况下DocumentRoot "/var/www/html"定义了默认web站点目录的路径。 如需自定义默认的目录,需要找如下格式进行添加: httpd-2.2: Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all httpd-2.4: Options Indexes FollowSymLinks AllowOverride None Require all granted   options包括以下可选参数:    
  • AllowOverride AllowOverride选项用于定义每个目录下.htaccess文件中的指令类型,但通常设置None。
  • Order Order选项用于定义缺省的访问权限与Allow和Deny语句的处理顺序。
  • Allow/Deny Allow和Deny语句可以针对客户机的域名或IP地址进行设置,以决定哪些客户机能够访问服务器。如:Allow from all或者Deny from 172.16.0.0/24等等。
  • Require all granted 此为http-2.4中的允许所有人访问的格式。除此还可以禁止某个IP或域名的访问,如:Require not ip 1.1.1.1、Require not host host.example.com或者禁止所有人访问Require all denied。
  httpd的访问控制  
1、在Directory中基于IP地址实现访问控制
在http-2.2中基于IP地址的访问控制是利用allow和Deny参数来实现的,如下例子:     Options Indexes FollowSymLinks     AllowOverride None     Order allow,deny     Allow from  [IP|NetAddr]       Deny from  [IP|NetAddr]   其中NetAddr的格式可类似:172.16、172.16.0.0、172.16.0.0/16、172.16.0.0/255.255.0.0。 而httpd-2.4中基于Ip地址访问的控制是利用Require参数来实现的,其中Require参数可混合使用,如下例子:     AllowOverride none     Options none            Require host google.com  #只允许来自域名为google.com的主机访问;        Require not host www.magedu.com #不允许来自域名为www.magedu.com的主机访问;        使用案例: 禁止主机IP192.168.0.100和109访问相应的主机页面: [root@localhost ~]# vim /etc/httpd/conf/httpd.conf         DocumentRoot "/data/html"                          AllowOverride none                 Options none                                          Require all granted  #允许所有主机访问                         Require not ip 192.168.0.110 192.168.0.100  #禁止匹配的Ip访问                            
2、在Directory中基于用户的访问控制
在Directory中支持的认证方式有两种Basic明文认证和digest消息摘要认证,由于并不是所有浏览器都支持摘要认证,因此一般来说用的较多的是明文认证 首先利用htpasswd命令生成认证的配置文件: [root@localhost ~]# htpasswd -cb /data/userpasswd charlie 123456 Adding password for user charlie [root@localhost ~]# htpasswd -b /data/userpasswd wch magedu Adding password for user wch [root@localhost ~]# cat /data/userpasswd charlie:$apr1$1.t1GT7Z$HFMLZT7SR5eF6i51efMo90 wch:$apr1$nzfsSQ4g$qvo8tPvRV5uwnAehOCmr9.   随后编辑httpd的主配置文件,设置用户认证: [root@localhost ~]# vim /etc/httpd/conf/httpd.conf DocumentRoot "/data/html"  #修改默认的web目录                 AllowOverride none                 Options none                 AuthType Basic  #设置认证类型为Basic                 AuthName "welcome to my server."  #设置认证提示                 AuthUserFile "/data/userpasswd"  #指定认证文件的路径                 Require user charlie wch  #指定允许访问的认证用户 httpd服务除了根据用户做访问控制之外,还能将用户划分为相应的域组,并根据域组来做相应的访问控制。下面为以刚才演示的用户控制为背景做的域组访问控制示列: 首先创建域组文件: [root@localhost ~]# vim /data/Usergroupgroup1:charlie group2:wch   编辑httpd的主配置文件: [root@localhost ~]# vim /etc/httpd/conf/httpd.conf DocumentRoot "/data/html"         AllowOverride none         Options none         AuthType Basic         AuthName "welcome to my server"         AuthUserFile "/data/userpasswd"         AuthGroupFile "/data/Usergroup"  #添加域组文件         Require group group1  #选择允许认证访问的域组  

四、httpd的虚拟主机VirtualHost

学习了如何在定义httpd的web目录后,大家肯定都会跃跃欲试。但是经历实操之后,大家可能就会去想着创建第二个web目录,然后就发现创建的第二个web目录无法被正常读取访问。此时就需要利用到httpd服务的VirtualHost功能来帮助大家完成这个需求。 Apache虚拟主机就是在一个Apache服务器上配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。 虚拟主机支持三种访问方式:
  • 基于IP的方式,需为每个虚拟主机准备至少一个Ip地址,其配置方式如下:
      ServerName www.a.com       DocumentRoot "/www/a.com/htdocs"  #虚拟主机的web目录   基于port的方式,需要为每个虚拟主机使用至少一个独立的port,其配置方式如下: Listen 8080 #在指定其他端口时,需添加监听语句   #指定不同的port     ServerName www.a.com     DocumentRoot "/www/a.com/htdocs"   基于FQDN的方式,为每个虚拟主机使用至少一个FQDN,其配置方式如下: NameVirtualHost 172.16.100.6:80 #如果是httpd-2.2,需要在配置文件中添加此句     ServerName www.a.com  #指定FQDN     DocumentRoot "/www/a.com/htdocs"     ServerName www.b.net  #指定FQDN     DocumentRoot "/www/b.net/htdocs"