0 准备实验环境

为CentOS配置本地软件仓库(光盘)
(1)给CentOS虚拟机放入CentOS安装光盘镜像(ISO光盘)
image.png
(2)完成如下的文件操作

  1. [root@localhost ~]# cd /etc/yum.repos.d/
  2. [root@localhost yum.repos.d]# ls
  3. CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
  4. CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-kernel.repo
  5. [root@localhost yum.repos.d]# mkdir backup
  6. [root@localhost yum.repos.d]# ls
  7. backup CentOS-Debuginfo.repo CentOS-Sources.repo
  8. CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
  9. CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
  10. [root@localhost yum.repos.d]# mv *.repo ./backup/
  11. [root@localhost yum.repos.d]# ls
  12. backup
  13. [root@localhost yum.repos.d]# cp ./backup/CentOS-Media.repo ./
  14. [root@localhost yum.repos.d]# ls
  15. backup CentOS-Media.repo

(3)编辑CentOS-Media.repo文件,内容如下
[root@localhost yum.repos.d]# vi CentOS-Media.repo,修改如下两项内容,然后保存

  1. gpgcheck=0
  2. enabled=1

(4)创建/meida/cdrom目录,并将/dev/cdrom挂在到这个目录下

  1. [root@localhost yum.repos.d]# cd /media
  2. [root@localhost media]# ls
  3. [root@localhost media]# mkdir ./cdrom
  4. [root@localhost media]# mount /dev/cdrom /media/cdrom
  5. mount: /dev/sr0 写保护,将以只读方式挂载

(5)更新YUM仓库配置信息

  1. [root@localhost media]# yum clean all
  2. [root@localhost media]# yum list

1 Apache httpd的安装

1.1 使用如下的命令之一来完成httpd的安装

  1. [root@localhost media]# yum install -y httpd

也采用组件的安装方法。

  1. #yum group install “Web Server”
  2. #yum group install “Basic Web Server”

1.2 开始以使用下列命令之一来启动httpd服务和查询运行状态

  1. [root@localhost media]# systemctl start httpd
  2. #httpd是apache webserver的服务程序名,start表示启动该服务
  3. [root@localhost media]# systemctl enable httpd
  4. #enable表示将httpd设置为开机自启动服务
  5. [root@localhost media]# systemctl status httpd
  6. #status用来查询服务程序的运行状态,active(running)表示服务正常
  7. httpd.service - The Apache HTTP Server
  8. Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  9. Active: active (running) since 2022-05-10 08:36:20 CST; 1min 53s ago
  10. Docs: man:httpd(8)
  11. man:apachectl(8)
  12. Main PID: 4424 (httpd)
  13. Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
  14. Tasks: 6
  15. CGroup: /system.slice/httpd.service
  16. ├─4424 /usr/sbin/httpd -DFOREGROUND
  17. ├─4425 /usr/sbin/httpd -DFOREGROUND
  18. ├─4426 /usr/sbin/httpd -DFOREGROUND
  19. ├─4427 /usr/sbin/httpd -DFOREGROUND
  20. ├─4428 /usr/sbin/httpd -DFOREGROUND
  21. └─4429 /usr/sbin/httpd -DFOREGROUND
  22. 5 10 08:36:20 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
  23. 5 10 08:36:20 localhost.localdomain httpd[4424]: AH00558: httpd: Could not reliably determine ...age
  24. 5 10 08:36:20 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
  25. Hint: Some lines were ellipsized, use -l to show in full.

或者
#apachectl start //启动httpd服务
#apachectl stop //停止httpd 服务
#apachectl graceful //重新加载配置文件

1.3 关闭防火墙(为了简化服务配置)

  1. [root@localhost media]# systemctl stop firewalld
  2. #stop表示关闭防火墙
  3. [root@localhost media]# systemctl disable firewalld
  4. #disable表示开机时防火墙不启动

1.4 关闭SELinux服务

  1. [root@localhost media]# setenforce 0
  2. #使用这种方式修改selinux后,重启之后selinux会自动启动

或者
修改/etc/selinux/config配置文件,将如下内容进行修改,并保存。这样就会持久关闭selinux

  1. SELINUX=disabled

1.5 网站的访问测试

在客户端的浏览器上输入http://服务器的IP地址,能够看到apache的测试页面则表示httpd安装成功。
image.png
说明:
(1)默认的RHEL/CentOS的Apahce httpd服务器包含基本的设置,不需要做任何的修改即可使用。
(2) 默认的网站根目录是/var/www/html。
(3)如果默认网站没有index.html,则显示/usr/share/httpd/noindex/index.html,此项目有/etc/httpd/conf.d/welcome.conf来确定。

可以在/var/www/html目录中发布index.html来发布自己的网页,如下

  1. [root@localhost media]# cd /var/www/html
  2. [root@localhost html]# ls
  3. [root@localhost html]# touch index.html
  4. [root@localhost html]# ls -l
  5. 总用量 0
  6. -rw-r--r--. 1 root root 0 5 10 08:53 index.html
  7. [root@localhost html]# vi index.html

编辑index.html网页的内容如下,然后保存

  1. <h1>WELCOME TO MY WEB SITE!!!!</h1>

从客户端浏览器访问网站
image.png

2.了解httpd的配置文件

2.1 httpd配置文件的基本内容

(1)httpd服务器程序的配置文件包含在一下三个目录中:/etc/httpd/conf、/etc/httpd/conf.d、/etc/httpd/conf.modules.d。
(2)httpd服务程序的主配置文件/etc/httpd/conf/httpd.conf,另外/etc/httpd/conf.d/ssl.conf也是一个主要的配置文件。
(3)在主配置文件httpd.conf中,通过如下指令(IncludeOptional )将外部配置文件的配置指令导入进来:
IncludeOptional conf.d/.conf
Include conf.modules.d/
.conf
(4)在配置文件中使用“容器”概念来容纳诸如“目录”、“虚拟主机”、“文件”、“模块”等内容,以便对他们来进行设置。

  1. <容器名称>
  2. 配置的内容
  3. </容器名称>

(5)配置文件中包含大量的httpd程序可以理解的配置指令。
(6)配置文件的内容可以归纳三个部分:全局配置、主服务配置、虚拟机主机配置。
(7)如果想要了解httpd配置文件的详细细节,可以参考如下的网址:https://httpd.apache.org/docs/2.4/

2.2 httpd.conf中的常用指令介绍

2.2.1 常用全局配置指令和主服务配置指令

(1)ServerRoot
这个指令用来定义httpd的配置文件、错误文件、日志文件的根目录。后续出现的相对路径都是以此目录为根目录的。注意定义了目录是不能使用/来结尾。默认值是:/etc/httpd。
(2)Timeout
超时设置。用来设置接受和发送数据时的超时设置,默认时间单位是秒。例如:
Timemout 300
(3) ServerAdmin
设置管理员邮件地址,例如:ServerAdmin root@lzy.edu.cn
(4) ServerName
设置主机名称和端口号,可以使用IP地址,例如:
ServerName www.xyz.com:80
ServerName 192.168.8.201:80
(5) Linsten
设置监听端口,可以写多个,语法如下:
Listen [ IP-ADDRESS:] portnumber [ protocol ]
例如:
Listen 80
Listen 8000
Listen 192.168.8.201:80
Listen 192.168.8.202:8000
(6) DocumentRoot
设置主页文档,默认是/var/www/html。如果要指定DocumentRoot,在没有掌握SELinux配置之前,请关闭SELinux(#setenforce 0),否则会出现访问权限错误问题。
例如:DocumentRoot /webroot
(7) DirectoryIndex
设置首页,可以有多个,空格分隔,例如:
DirectoryIndex index.html index.php start.html
(8) AddDefaultCharset
设置网页编码,默认是UTF-8,中文可以是GB2312或GB10830。如果网页是多种编码混用,可将这条指令注释掉。

2.2.2 httpd.conf配置文件中的目录设置

1 目录设置的要点
(1)需要对目录进行配置之后才能正确访问网站目录的文件内容。
(2)目录的访问权限是在容器中进行设定的。

  1. <Directory “目录名称”>
  2. 控制语句
  3. </Directory>

(3)详细的控制指令说明可以在官方的说明文档中查阅得到。
2 常用的目录设置指令
(1)Options指令
Options FollowSymLinks | Indexes | MultiViews | ExecCGI | Includes | IncludesNoExec | ALL
FollowSymLinks 允许在目录中使用符号连接
Indexes 允许查看目录列表
ALL 除了MultiViews之外所有特性
(2)AllowOverride指令
用于指定.htaccess文件中可以覆盖的指令类型,其语法:
AllowOverride All | None | 指令类型1 [指令类型2]
例如:
AllowOverride None
AllowOverride All
(3)Order指令
用于设置Allow和Deny的处理顺序,它的设置有两种形式。

  • Order allow,deny(白名单制)

    默认为deny,先匹配allow,再匹配deny,若allow和deny均匹配,则为deny。

  • Order deny,allow(黑名单制)

    默认为allow,先匹配deny,再匹配allow,若allow和deny均匹配,则为allow。
    示例:
    1)允许所有客户端访问
    Order allow,deny
    Allow from all
    2)拒绝IP地址为10.20.30.40和来自hei.com域的客户端访问,其他客户端可以正常访问
    Order deny,allow
    Deny from 10.20.30.40
    Deny from hei.com
    (3)仅允许192.168.8.0/24网段的客户端·访问,但其中的192.168.8.100不能访问。
    Order allow,deny
    Allow from 192.168.8.0/24
    Deny from 192.168.8.100
    (4)Require指令
    Require指令用于判断目录的授权访问方式,常见的授权访问方式有:
    Require all granted #无条件允许访问
    Require all denied #无条件拒绝访问
    Require user userid [userid] … #需要用户userid的身份认证
    Require group group-name [group-name] #需要组用户的身份认证
    Require valid-user #需要合法用户的身份认证
    Require ip 10 172.20 192.168.2 #允许特定IP网段的客户端访问

    2.2.3 httpd.conf配置文件的测试命令

    可以使用如下命令来测试httpd.conf配置文件的语法是否正确

    1. [root@localhost conf]# apachectl -t
    2. Syntax OK

    或者

    1. [root@localhost conf]# apachectl configtest
    2. Syntax OK

    可以使用如下命令查看httpd的配置情况

    1. [root@localhost conf]# httpd -S
    2. VirtualHost configuration:
    3. ServerRoot: "/etc/httpd"
    4. Main DocumentRoot: "/wwwroot"
    5. Main ErrorLog: "/etc/httpd/logs/error_log"
    6. Mutex authdigest-opaque: using_defaults
    7. Mutex proxy-balancer-shm: using_defaults
    8. Mutex rewrite-map: using_defaults
    9. Mutex authdigest-client: using_defaults
    10. Mutex proxy: using_defaults
    11. Mutex authn-socache: using_defaults
    12. Mutex default: dir="/run/httpd/" mechanism=default
    13. Mutex mpm-accept: using_defaults
    14. PidFile: "/run/httpd/httpd.pid"
    15. Define: _RH_HAS_HTTPPROTOCOLOPTIONS
    16. Define: DUMP_VHOSTS
    17. Define: DUMP_RUN_CFG
    18. User: name="apache" id=48
    19. Group: name="apache" id=48

    2.2.4 httpd的日志文件

    1 httpd的日志文件存放在/etc/httpd/logs(实际连接到/var/log/httpd)。
    2 标准的日志文件有: access_log、error_log。
    3 日志的格式是可以自定义。

    2.2.5 练习题1

    搭建一台内部Web服务器(网页目录压缩包为www.xyz.com.rar),采用服务器名称和端口号为www.xyz.com:8080,首页面为start.html,管理员邮箱为root@xyz.com,网页采用默认编码为UTF-8,网站根目录在/wwwroot,httpd配置根目录在/etc/httpd,连接超时间设置为180s,只允许192.168.8.0/24网段的客户端访问。

3 设置虚拟目录的指令

3.1 设置虚拟目录的指令

Alias 虚拟目录名 “实际目录名”
说明:
(1)虚拟目录名的根目录是DocumentRoot指定的目录。
(2)设置好虚拟目录的定义后,还要定义虚拟目录对应的实际目录的访问授权。

3.2 设置虚拟目录的示例

Alias /vdir “/xyz”

Options FollowSymLinks Indexes
AllowOverride None
Allow from all
Require all granted

3.3 练习题2

在练习题1的基础上完成下面的操作。将connection.rar中的网页文件复制到/connection目录中,然后将/connection目录作为网站的虚拟目录/vd。通过网站首页的“案例展示”链接到/vd/index.html页面。

4 设置目录访问的身份认证

4.1 设置目录访问的身份认证的过程

1 可以通过用户名和口令来验证对Web页面的访问。
2 创建口令访问需要先创建用户(用户组)和口令数据库。
3 在需要口令保护的目录容器中添加口令验证指令。

4.2 创建httpd访问用户名(用户组)和口令数据库

1 使用htpasswd命令来创建用户名和口令数据库
#htpasswd [-c] 口令数据库文件名 用户名
其中, -c 用于创建口令数据库文件,如果已经创建了口令数据库文件,则取消-c选项。
例如:
#htpasswd –c /etc/httpd/webpass user01
#htpasswd /etc/httpd/webpass user02
2 创建用户组
建立 /etc/httpd/grouppass(其中/etc/httpd/grouppass为组文件名),按如下方式添加行。
组名称:用户名1 用户名2
例如:
webgroup: user01 user02
3 在目录容器中添加访问控制指令
在需要口令认证的目录容器中添加访问控制指令,其形式如下:

AuthType Basic #指定认证类型为Basic类型
AuthBasicProvider file #指定基本认证类型提供者是文件
AuthName “Access Authentication” #设置认证的名称
AuthUserFile “/etc/httpd/webpass” #指定用户认证的文件名
AuthGroupFile “/etc/httpd/grouppass” #指定定义组的文件名
Require user user01 #指定允许访问的用户名
Require valid-user #指定允许访问的合法定义的用户
Require group webgroup #指定允许访问的组名

4.3 练习题3

在练习题2的基础上完成下面的操作。要求进入/vd虚拟目录是要进行用户身份和口令的认证。要求设置用户组webusers,其中包括用户名user01、user02、user03。

5 配置虚拟主机(一台主机发布多个网站)

5.1 配置基于不同IP地址的虚拟主机

1 为主机配置多个IP地址
(1)可以是多张网卡,也可是是一张网卡。
(2)可以使用ifconfig命令来配置IP地址,例如:
ifconfig <网卡名称> :<子接口号> IP地址/前缀 up
(3)可以使用ip address命令来配置IP地址,例如:
ip address add dev <网卡名称:[子接口号]>
(4)可以通过创建网卡子接口的配置文件,然后配置IP地址。
2 为各虚拟主机准备网站根目录和网页文件

3 修改httpd.conf配置文件
(1)添加对多个IP地址的的监听,例如:
Listen IP地址:端口号
(2)添加导入虚拟主机配置文件的指令
IncludeOptional conf.d/*.conf
4 创建虚拟主机的配置文件
在conf.d/目录中创建配置文件vhost.conf,为不同的虚拟主机创建对应的配置信息,其格式可以参考以下形式:

ServerName <服务器名称>
DocumentRoot <虚拟主机网站的根目录>

Options Indexes FollowSymLinks
AllowOverride None
Require all granted


5 测试配置文件和重启httpd服务
#apachectl –t
#systemctl restart httpd
#firewall-cmd —permanent —add-interface=<网卡名称>:<子接口号>

5.2 配置基于不同端口的虚拟主机

1 为主机配置一个IP地址

2 为各虚拟主机准备网站根目录和网页文件

3 修改httpd.conf配置文件
(1)添加对多个端口的监听,例如:
Listen IP地址:端口号
(2)添加导入虚拟主机配置文件的指令
IncludeOptional conf.d/*.conf
4 创建虚拟主机的配置文件
在conf.d/目录中创建配置文件vhost.conf,为不同的虚拟主机创建对应的配置信息,其格式可以参考以下形式:

ServerName <服务器名称>
DocumentRoot <虚拟主机网站的根目录>

Options Indexes FollowSymLinks
AllowOverride None
Require all granted


5 测试配置文件和重启httpd服务
#apachectl –t
#systemctl restart httpd
#firewall-cmd —permanent —add-port=端口/tcp

5.3 配置基于域名的虚拟主机

1 为主机配置一个IP地址和一个端口

2 为各虚拟主机准备网站根目录和网页文件

3 修改httpd.conf配置文件
(1)添加对IP和端口的监听,例如:
Listen IP地址:端口号
(2)添加导入虚拟主机配置文件的指令
IncludeOptional conf.d/.conf
*4 创建3个网站

  1. [root@webserver yum.repos.d]# mkdir /www
  2. [root@webserver yum.repos.d]# mkdir /www/site1
  3. [root@webserver yum.repos.d]# mkdir /www/site2
  4. [root@webserver yum.repos.d]# mkdir /www/site3
  5. [root@webserver yum.repos.d]# echo "<h1>WELCOME TO SITE 1 </h1>" > /www/site1/index.html
  6. [root@webserver yum.repos.d]# echo "<h1>WELCOME TO SITE 2 </h1>" > /www/site2/index.html
  7. [root@webserver yum.repos.d]# echo "<h1>WELCOME TO SITE 3 </h1>" > /www/site3/index.html
  8. [root@webserver yum.repos.d]# cat /www/site2/index.html
  9. <h1>WELCOME TO SITE 2 </h1>
  10. [root@webserver yum.repos.d]# cat /www/site3/index.html
  11. <h1>WELCOME TO SITE 3 </h1>
  12. [root@webserver yum.repos.d]# cat /www/site1/index.html
  13. <h1>WELCOME TO SITE 1 </h1>
  14. [root@webserver yum.repos.d]# tree /www
  15. /www
  16. ├── site1
  17. └── index.html
  18. ├── site2
  19. └── index.html
  20. └── site3
  21. └── index.html

4 创建虚拟主机的配置文件
在conf.d/目录中创建配置文件vhost.conf,为不同的虚拟主机创建对应的配置信息,其格式可以参考以下形式:

  1. <VirtualHost IP地址:端口号>
  2. ServerName <服务器名称>
  3. DocumentRoot <虚拟主机网站的根目录>
  4. <Directory “虚拟主机网站的根目录”>
  5. Options Indexes FollowSymLinks
  6. AllowOverride None
  7. Require all granted
  8. </Directory>
  9. </VirtualHost>

例如:虚拟机主机1的vhost1.conf配置文件如下:

  1. <VirtualHost 192.168.237.202:80>
  2. ServerName web1.xyz.com
  3. DocumentRoot "/www/site1"
  4. <Directory "/www/site1">
  5. Options Indexes FollowSymLinks
  6. AllowOverride None
  7. Require all granted
  8. </Directory>
  9. DiretoryIndex "index.html"
  10. </VirtualHost>

虚拟机主机2的vhost2.conf配置文件如下:

  1. <VirtualHost 192.168.237.202:80>
  2. ServerName web2.xyz.com
  3. DocumentRoot "/www/site2"
  4. <Directory "/www/site2">
  5. Options Indexes FollowSymLinks
  6. AllowOverride None
  7. Require all granted
  8. </Directory>
  9. DiretoryIndex "index.html"
  10. </VirtualHost>

虚拟机主机3的vhost3.conf配置文件如下:

  1. <VirtualHost 192.168.237.202:80>
  2. ServerName web3.xyz.com
  3. DocumentRoot "/www/site3"
  4. <Directory "/www/site3">
  5. Options Indexes FollowSymLinks
  6. AllowOverride None
  7. Require all granted
  8. </Directory>
  9. DiretoryIndex "index.html"
  10. </VirtualHost>

5 测试配置文件和重启httpd服务
#apachectl –t
#systemctl restart httpd

5.4 练习题 4

使用提供的三个网站素材,通过以下三种不同方式实现虚拟主机的配置:

  1. 使用多个不同的IP地址来实现
  2. 使用同一个IP地址,通过多个端口来实现
  3. 使用一个IP地址和80端口,通过多个域名来实现。