Apache的介绍

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器软件

那什么是Web服务器,以及Web服务器的用处有哪些?

大多数人都是通过访问网站而开始接触互联网的吧。我们平时访问的网站服务就是Web网络服务,一般是指允许用户通过浏览器访问互联网中各种资源的服务。如下图所示,Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7voiBgU-1647703934590)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641375234433.png)]

关于更多Apache的内容,访问官网:https://httpd.apache.org/

Apache的安装

Apache安装的方式有两种:

  • 使用本地磁盘镜像做本地Yum源进行安装
  • 使用网络Yum源做软件仓库进行安装

下面逐一介绍

使用本地磁盘镜像做本地Yum源进行安装

前提:做此类实验时,需要关闭防火墙,Iptables,Selinux

[root@node3 ~]# systemctl stop firewalld            #关闭防火墙
[root@node3 ~]# systemctl enable firewalld          #设置开机自动关闭

[root@node3 ~]# iptables -F
[root@node3 ~]# iptables -X                         #请说出Iptables规则
[root@node3 ~]# iptables -Z
[root@node3 ~]# /usr/sbin/iptables-save 

[root@node3 ~]# setenforce 0          #关闭Selinux
[root@node3 ~]# vi /etc/selinux/config 
...
SELINUX=disabled              #修改为此条件
...

1、连接本地镜像设备

1641375620411

2、挂载系统镜像,并使用文本编辑器创建软件仓库的配置文件

[root@node3 ~]# rm -rf /etc/yum.repos.d/*        #先删除系统自带的仓库

[root@node3 ~]# mkdir /media/cdrom
[root@node3 ~]# mount /dev/sr0 /media/cdrom/     #挂载系统镜像
mount: /dev/sr0 is write-protected, mounting read-only       #提示

[root@node3 ~]# cd /etc/yum.repos.d/         #进入到仓库目录下
[root@node3 yum.repos.d]# vim local.repo
[local]
name=local
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

[root@node3 yum.repos.d]# yum repolist          #查看配置的仓库信息

3、安装Apache

[root@node3 ~]# yum install -y httpd
...
Installed:
  httpd.x86_64 0:2.4.6-80.el7.centos                                                                                                  

Dependency Installed:
  apr.x86_64 0:1.4.8-3.el7_4.1 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-80.el7.centos mailcap.noarch 0:2.1.41-2.el7

Complete!             #由以上信息,表示安装成功

4、查看httpd版本

[root@node3 ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)          #这个属于新版本
Server built:   Apr 20 2018 18:10:38 

5、开启Httpd服务,并测试

[root@node3 ~]# systemctl restart httpd            #开启Httpd服务
[root@node3 ~]# systemctl enable httpd             #设置Httpd服务开机自启

在浏览器中输出本机器的IP,如本机IP:192.168.9.132

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3PqZwnN-1647703934591)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641376115009.png)]

使用阿里云的Epel源进行安装

前提:虚拟机需要能上网

1、首先下载Epel源

进入到阿里云镜像站:

https://developer.aliyun.com/mirror/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmM38hCC-1647703934592)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641376248139.png)]

找到对应的系统版本(本机是7版本),复制到系统上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbeMneL1-1647703934592)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641376293197.png)]

#没有wget命令的直接下载
[root@node3 ~]# yum install -y wget
[root@node3 ~]# yum install -y httpd      #安装

配置服务文件参数

要想真正发挥Httpd的作用,上面的操作只是九牛一毛,我们需要通过配置它的配置文件,进而实现更高级的功能

查看httpd服务相关的配置文件,可以看到非常多,因此介绍几个常用的

[root@node3 ~]# rpm -ql httpd  
...
作用	文件名称
/etc/httpd      服务目录	
/etc/httpd/conf/httpd.conf      主配置文件	
/var/www/html        网站数据目录	
/var/log/httpd/access_log     访问日志	
/var/log/httpd/error_log      错误日志	
...

主配置文件中保存的是最重要的服务参数,一般会被保存到/etc目录中以软件名称命名的一个文件夹之中,名字为“服务名称.conf”,例如这里的“/etc/httpd/conf/httpd.conf”

查看主配置文件

[root@node3 ~]# vim /etc/httpd/conf/httpd.conf
#可以发现有三百多行,但是细看发现大部分都是注释
#我们可以过滤除“#”以外的内容
[root@node3 ~]# cat /etc/httpd/conf/httpd.conf | grep -v "#"

ServerRoot "/etc/httpd"             #全局配置
 
Listen 80                           #全局配置

Include conf.modules.d/*.conf

User apache
Group apache


ServerAdmin root@localhost


<Directory />                   #区域配置
    AllowOverride none
    Require all denied
</Directory>                    #区域配置


DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>

EnableSendfile on
IncludeOptional conf.d/*.conf

这里主要讲解全局配置参数与区域配置参数的区别:

  • 顾名思义,全局配置参数就是一种全局性的配置参数,可作用于所有的子站点,既保证了子站点的正常访问,也有效降低了频繁写入重复参数的工作量。

  • 区域配置参数则是单独针对每个独立的子站点进行设置的。

    就像在大学食堂里面打饭,食堂负责打饭的阿姨先给每位同学来一碗标准大小的米饭(全局配置),然后再根据每位同学的具体要求盛放他们想吃的菜(区域配置)。

    在httpd服务程序主配置文件中,最为常用的参数如下:

ServerRoot服务目录
ServerAdmin管理员邮箱
User运行服务的用户
Group运行服务的用户组
ServerName网站服务器的域名
DocumentRoot网站数据目录
Listen监听的IP地址与端口号
DirectoryIndex默认的索引页页面
ErrorLog错误日志文件
CustomLog访问日志文件
Timeout网页超时时间,默认为300秒

DocumentRoot 参数讲解

从上表可知 DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是/var/www/html(即把网站数据存放到这个目录中);而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html/index.html文件中写入一段内容,替换掉httpd服务程序的默认首页面。该操作会立即生效。

[root@node3 ~]# echo "Welcome To zhengbo" > /var/www/html/index.html 

进入浏览器查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-msu3MazW-1647703934593)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641377516278.png)]

1、 在默认情况下,网站数据保存在/var/www/html目录中,如果想把保存网站数据的目录修改为/home/bo目录,该怎么操作呢?这时就需要修改主配置文件中的DocumentRoot参数了,如下操作:

[root@node3 ~]# mkdir /home/bo       #先创建网页目录
[root@node3 ~]# vi /etc/httpd/conf/httpd.conf      #编辑主配置文件
#将约第119行用于定义网站数据保存路径的参数DocumentRoot修改为/home/bo,同时还需要将约第124行用于定义目录权限的参数Directory后面的路径也修改为/home/bo。配置文件修改完毕后即可保存并退出。
...
119 DocumentRoot "/home/bo"
120 
121 #
122 # Relax access to content within /var/www.
123 #
124 <Directory "/home/bo">
125     AllowOverride None
126     # Allow open access:
127     Require all granted
128 </Directory>
...

2、在/home/bo创建网页文件

[root@node3 ~]# echo "This is kkk" >> /home/bo/index.html

浏览器访问测试,可以看到

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EqQtYYnc-1647703934594)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641378278450.png)]

个人用户功能

现在网上大部分记录的都是httpd2.4的版本,现在默认安装的是2.4.6版本,因此在配置中会有些不同(包括个人用户功能的配置)

简单说明配置“个人用户功能”的作用

Linux支持多用户同时工作,那如果想在系统中为 每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。 但是当用户数量比较多时,这是个不小的工程, 而且在用户自行管理网站时,还会碰到各种权限限制,需要为此做很多额外的工作。 那这时httpd的服务程序提供的个人用户主页功能就可以完美的解决此类问题 而且访问起来也非常容易。 大大提高了工作效率

配置个人用户功能

先来查看httpd的版本

[root@node3 conf.d]# httpd -v 
Server version: Apache/2.4.6 (CentOS)        #可以看到httpd的版本为2.4.6
Server built:   Apr 20 2018 18:10:38

可以看到httpd的版本为2.4.6,因此在配置个人用户功能时比这2.4版本的有所不同

在2.4.6版本中关于个人用户功能的配置文件在:

/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.d/userdir.conf

1、首先来进入/etc/httpd/conf.modules.d/00-base.conf, 必须要有userdir_module模块

[root@node3 conf.d]# vi /etc/httpd/conf.modules.d/00-base.conf
...
LoadModule userdir_module modules/mod_userdir.so
...

2、修改/etc/httpd/conf.d/userdir.conf配置文件,将第17行的 UserDir disabled 加上注释

​ 并取消24行UserDir public的注释(可以更改UserDir后面文件夹的名字,比如UserDir www)

[root@node3 httpd]# vi /etc/httpd/conf.d/userdir.conf 
11 <IfModule mod_userdir.c>
12     #
13     # UserDir is disabled by default since it can confirm the presence
14     # of a username on the system (depending on home directory
15     # permissions).
16     #
17     #UserDir disabled
18 
19     #
20     # To enable requests to /~user/ to serve the user's public_html
21     # directory, remove the "UserDir disabled" line above, and uncomment
22     # the following line instead:
23     #
24     UserDir public_html
25 </IfModule>

3、重启服务

[root@node3 conf.d]# systemctl restart httpd

4、创建名为:tt的用户,(密码可以不设置)

[root@node3 ~]# useradd tt
[root@node3 ~]# su - tt        #登录tt用户
Last login: Wed Jan  5 05:48:13 EST 2022 on pts/1
[tt@node3 ~]$ pwd
/home/tt
[root@node3 ~]# mkdir public_html
[root@node3 ~]# echo "This is tt website" > public_html/index.html
[root@node3 ~]# chmod -R 755 /home/tt
[root@node3 ~]# exit

5、在浏览器中测试

在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户 名之间没有空格)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TiUYcZjf-1647703934595)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641380825357.png)]

通过身份验证实现个人用户功能

上面虽然实现了个人用户功能,但是会发现不太安全,毕竟也没啥密码验证啥的,因此有时 网站的拥有者并不希望直接将网页内容显示出来, 而只想让通过身份验证的用户看到里面的内容,这时就可以在网站中添加密码功能了。

1、 先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以 及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。

[root@node3 httpd]# htpasswd -c /etc/httpd/passwd tt
New password:此处输入用于网页验证的密码      我输入:000
Re-type new password:再输入一遍进行确认
Adding password for user linuxprobe

这是我们可以查看/etc/httpd/passwd这个文件,里面存放的就是用户和编码后的密码

[root@node3 httpd]# vi passwd 
tt:$apr1$Kg7Qv/Pj$NaCp8.njdCua4dJLw17.f0

2、继续编辑/etc/httpd/conf.d/userdir.conf文件

继续编辑个人用户主页功能的配置文件。把第31~44行的参数信息修改成下列内容,其中以井号(#)开头的内容为添加的注释信息,可将其忽略。随后保存并退出配置文件,重启httpd服务程序即可生效。

<Directory "/home/*/public_html">
32     #AllowOverride FileInfo AuthConfig Limit Indexes
33     #Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
34     #Require method GET POST OPTIONS
35     AllowOverride all
36     #刚刚生成出的密码验证文件保存路径
37     authuserfile "/etc/httpd/passwd"
38     #当用户访问网站时的提示信息
39     authname "My privately website"
40     #验证方式为口令模式
41     authtype basic
42     #访问网站时需要验证的用户名称
43     require user tt
44 </Directory>

3、浏览器测试

注意: 验证时使用的账户和密码是用htpasswd命令生成的专门用于网站登录的账户和密码,而不是系统中的账户和密码,请不要搞错了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f03Ws2iP-1647703934595)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641381854104.png)]

验证成功之后的页面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UWXXnu3E-1647703934596)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641381877264.png)]

虚拟网站主机功能

在上面的实验中我们实现了,最基本的httpd测试网页,也实现了基于多用户对应多网页的个人用户功能,但是上面的这些操作,实际上还是一个IP地址去接收用户的请求,换句话说用户发送请求都会只交给192.168.9.132这个IP地址,那么这样一来一个服务器就只能运行一个网站,从而造成硬件资源的浪费。那我们能不能同一台服务器上运行多个网站呢?能,这就是虚拟网站主机功能

在虚拟专用服务器(Virtual Private Server,VPS)与云计算技术诞生以前,IDC服务供应商为了能够更充分地利用服务器资源,同时也为了降低购买门槛,纷纷启用了虚拟主机功能。

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离,而只能让这些虚拟的服务器共同使用物理服务器的硬件资源,供应商只能限制硬盘的使用空间大小。出于各种考虑的因素(主要是价格低廉),目前依然有很多企业或个人站长在使用虚拟主机的形式来部署网站。

网络基础的应该知道,请求不同的网站,可以有不同的方式,主要有三种:

  • 基于用户请求的不同IP地址
  • 基于用户请求的不同主机域名
  • 基于用户请求的不同端口号

那同样,既然Apache是实现网页响应和请求的,那它的虚拟网站主机功能也能基于以上三种方式进行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sorw81w1-1647703934597)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641383195389.png)]

基于用户请求的不同IP地址

何种条件适用于基于不同IP的情况?

如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。而且,每个网站都有一个独立的IP地址,这对搜索引擎优化也大有裨益。

实验环境前提:虚拟机有三块网卡(两块也行,不能少于两块网卡)

看看我的网卡信息

[root@node3 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d6:ee:76 brd ff:ff:ff:ff:ff:ff
    inet 192.168.9.132/24 brd 192.168.9.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::24a2:37ab:1c57:5b4f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d6:ee:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.9.134/24 brd 192.168.9.255 scope global noprefixroute dynamic ens37
       valid_lft 1556sec preferred_lft 1556sec
    inet6 fe80::3cc4:1335:7c51:10d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d6:ee:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.9.133/24 brd 192.168.9.255 scope global noprefixroute dynamic ens38
       valid_lft 1568sec preferred_lft 1568sec
    inet6 fe80::c15c:8801:b369:3df2/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
######并且需要ping测试看啊可能网卡的连通性
[root@node3 ~]# ping -c 4 192.168.9.132
PING 192.168.9.132 (192.168.9.132) 56(84) bytes of data.
64 bytes from 192.168.9.132: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 192.168.9.132: icmp_seq=2 ttl=64 time=0.034 ms

[root@node3 ~]# ping -c 4 192.168.9.133
PING 192.168.9.133 (192.168.9.133) 56(84) bytes of data.
64 bytes from 192.168.9.133: icmp_seq=1 ttl=64 time=0.013 ms
64 bytes from 192.168.9.133: icmp_seq=2 ttl=64 time=0.042 ms

[root@node3 ~]# ping -c 4 192.168.9.134
PING 192.168.9.134 (192.168.9.134) 56(84) bytes of data.
64 bytes from 192.168.9.134: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 192.168.9.134: icmp_seq=2 ttl=64 time=0.041 ms

1、分别 在/home/bo中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文 件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。

[root@node3 ~]# mkdir -p /home/bo/132
[root@node3 ~]# mkdir -p /home/bo/133
[root@node3 ~]# mkdir -p /home/bo/134
[root@node3 ~]# echo "IP:192.168.9.132" > /home/bo/132/index.html
[root@node3 ~]# echo "IP:192.168.9.133" > /home/bo/133/index.html
[root@node3 ~]# echo "IP:192.168.9.134" > /home/bo/134/index.html

2、修改配置文件:vi /etc/httpd/conf/httpd.conf

分别追加写入3个基于IP地址的虚拟主机网站参数

[root@node3 ~]# vi /etc/httpd/conf/httpd.conf      #随便找空白处,添加如下内容:
...
<VirtualHost 192.168.9.132>
     DocumentRoot /home/bo/132   #网页路径
     ServerName www.bo.com       #网站的域名,如果此服务器没有域名,那就不用写,有域名也可以选择不写
     <Directory /home/bo/132>    #对上面网页文件做授权,表示允许的动作
     AllowOverride None
     Require all granted         #在httpd2.4.6版本中如果允许返回问此网页改成这样写的了
     </Directory>
</VirtualHost>

<VirtualHost 192.168.9.133>
     DocumentRoot /home/bo/133
     ServerName www.bo.com
     <Directory /home/bo/133>
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>

<VirtualHost 192.168.9.134>
     DocumentRoot /home/bo/134
     ServerName www.bo.com
     <Directory /home/bo/134>
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>
...

3、重启服务

[root@node3 ~]# systemctl restart httpd

6、浏览器测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3OM7IO8A-1647703934597)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641383908669.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QX7tMXrU-1647703934598)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641383917350.png)]

基于用户请求的不同主机域名

当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的IP地址(这里以192.168.9.132为例)就可以了。

1、做域名解析

[root@node3 ~]# vi /etc/hosts
192.168.9.132 node3 www.bo1.com www.bo2.com www.bo3.com

######测试其连通性
[root@node3 ~]# ping www.bo1.com
PING node3 (192.168.9.132) 56(84) bytes of data.
64 bytes from node3 (192.168.9.132): icmp_seq=1 ttl=64 time=0.013 ms

[root@node3 ~]# ping www.bo2.com
PING node3 (192.168.9.132) 56(84) bytes of data.
64 bytes from node3 (192.168.9.132): icmp_seq=1 ttl=64 time=0.011 ms

[root@node3 ~]# ping www.bo3.com
PING node3 (192.168.9.132) 56(84) bytes of data.
64 bytes from node3 (192.168.9.132): icmp_seq=1 ttl=64 time=0.011 ms

2、 分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。

[root@node3 ~]# mkdir -p /home/bo/bo1
[root@node3 ~]# mkdir -p /home/bo/bo2
[root@node3 ~]# mkdir -p /home/bo/bo2
[root@node3 ~]# echo "www.bo1.com" > /home/bo/bo1/index.html
[root@node3 ~]# echo "www.bo2.com" > /home/bo/bo2/index.html
[root@node3 ~]# echo "www.bo3.com" > /home/bo/bo3/index.html

3、修改配置文件:vi /etc/httpd/conf/httpd.conf

分别追加写入3个基于主机名的虚拟主机网站参数

[root@node3 ~]# vi /etc/httpd/conf/httpd.conf
...
<VirtualHost 192.168.9.132>
     Documentroot /home/bo/bo1
     ServerName www.bo1.com           #相关参数含义参考上面的
     <Directory /home/bo/bo1>
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>

<VirtualHost 192.168.9.132>
     Documentroot /home/bo/bo2
     ServerName www.bo2.com
     <Directory /home/bo/bo2>
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>

<VirtualHost 192.168.9.132>
     Documentroot /home/bo/bo3
     ServerName www.bo3.com
     <Directory /home/bo/bo3>
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>
...

4、重启服务

[root@node3 ~]# systemctl restart httpd

基于用户请求的不同端口号

基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。

1、 分别在/home/bo中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个 首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。

[root@node3 ~]# mkdir -p /home/bo/6111
[root@node3 ~]# mkdir -p /home/bo/6222
[root@node3 ~]# mkdir -p /home/bo/6333
[root@node3 ~]# echo "port:6111" > /home/bo/6111/index.html
[root@node3 ~]# echo "port:6222" > /home/bo/6222/index.html
[root@node3 ~]# echo "port:6333" > /home/bo/6333/index.html

2、修改配置文件:vi /etc/httpd/conf/httpd.conf

在httpd服务配置文件的第43行~45行分别添加用于监听6111、6222和6333端口的参数。

[root@node3 ~]# vi /etc/httpd/conf/httpd.conf
...
Listen 6111
Listen 6222
Listen 6333
...

3、修改配置文件:vi /etc/httpd/conf/httpd.conf

从httpd服务的配置文件中大约第134行处开始,分别追加写入3个基于端口号的虚拟主机网站参数,然后保存并退出。

[root@node3 ~]# vi /etc/httpd/conf/httpd.conf
...
<VirtualHost 192.168.9.132:6111>       #标明端口
     DocumentRoot /home/bo/6111        #网站页面文件
     ServerName www.bo.com
     <Directory /home/bo/6111>         #对网站页面授权
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>

<VirtualHost 192.168.9.132:6222>
     DocumentRoot /home/bo/6222
     ServerName www.bo.com
     <Directory /home/bo/6222>
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>

<VirtualHost 192.168.9.132:6333>
     DocumentRoot /home/bo/6333
     ServerName www.bo.com
     <Directory /home/bo/6333>
     AllowOverride None
     Require all granted
     </Directory>
</VirtualHost>
...

4、重启服务

[root@node3 ~]# systemctl restart httpd

5、浏览器测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fLQHUbz-1647703934598)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641393275589.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-834L8Lhs-1647703934599)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641393285992.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SqpfFzCA-1647703934599)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641393296026.png)]

Apache的访问控制

Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。

在httpd2.4版本之前,所使用的指令是: Allow , Deny , Order ,比如: Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。

但在2.4之后我们应该写成这样的形式:

#表示允许的动作:
Require host address
Require ip ip.address
#表示拒绝的动作:
<RequireAll>           #注意在表示拒绝时,需要将规则放在<RequireAll>~</RequireAll>里面
    Require not host host.example.com
    Require not ip 10.252.46.165
</RequireAll>
#表示全部允许:
Require all granted
#表示全部拒绝:
Require all denied

1、创建网页文件

[root@node3 ~]# mkdir /var/www/html/bo/
[root@node3 ~]# echo "This is aabb" > /var/www/html/bo/index.html

2、编辑/etc/httpd/conf/httpd.conf 著配置文件

[root@node3 ~]# vi /etc/httpd/conf/httpd.conf 
#找到空白处添加如下内容:
<Directory />
    <RequireAll>
    Require not ip 192.168.9.132
    Require all granted          #允许全部主机
    </RequireAll>
</Directory>

3、重启服务

[root@node3 ~]# systemctl restart httpd

6、浏览器测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YrXAWqtM-1647703934607)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641433657999.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i4kSBydK-1647703934608)(C:\Users\郑波\AppData\Roaming\Typora\typora-user-images\1641433670356.png)]

Centos 7.5 1804 镜像普通版

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐