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]
此语句的使用有以下几点注意事项:
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
httpd-2.4:
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
options包括以下可选参数:
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访问
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 #选择允许认证访问的域组
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"
- IP-address可省略,表示0.0.0.0匹配全部IP;
- 此指令Listen可重复出现多次监听多个IP地址和端口;
- 修改监听的socket后,需重启服务进程方可生效;
- 若限制其必须通过ssl通信时,protocol需定义为https;
- 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。
1、在Directory中基于IP地址实现访问控制
在http-2.2中基于IP地址的访问控制是利用allow和Deny参数来实现的,如下例子: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目录四、httpd的虚拟主机VirtualHost
学习了如何在定义httpd的web目录后,大家肯定都会跃跃欲试。但是经历实操之后,大家可能就会去想着创建第二个web目录,然后就发现创建的第二个web目录无法被正常读取访问。此时就需要利用到httpd服务的VirtualHost功能来帮助大家完成这个需求。 Apache虚拟主机就是在一个Apache服务器上配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。 虚拟主机支持三种访问方式:- 基于IP的方式,需为每个虚拟主机准备至少一个Ip地址,其配置方式如下: