阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7中httpd服务构建虚拟Web主机与虚拟目录设置详解

182次阅读
没有评论

共计 6083 个字符,预计需要花费 16 分钟才能阅读完成。

虚拟 Web 主机指的是在同一台服务器中运行多个 Web 站点,其中的每个站点实际并不独立占用整个服务器,因此被称为“虚拟”Web 主机。通过虚拟 Web 主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。

使用 httpd 服务可以非常方便地构建虚拟主机服务器,只需要运行一个 httpd 服务就能同事支撑大量的 Web 站点。

httpd 服务支持的虚拟主机类型包括以下三种:

基于域名:为每个虚拟主机使用不同的域名,但是其对应的 IP 地址是相同的;

基于 IP 地址:为每个虚拟主机使用不同的域名,其各自对应的 IP 地址也不相同;

基于端口:这种方式并不使用域名、IP 地址来区分不同的站点内容,而是使用不同的 TCP 端口,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问。

这几种虚拟 Web 主机中,基于域名的虚拟主机是使用最为广泛的;基于 IP 地址和基于端口的虚拟主机一般只适用于公司内部。

基于域名主机的虚拟主机实现步骤:

1. 为虚拟主机提供域名解析

首先需要搭建 DNS 服务以便提供域名解析,搭建 DNS 服务详细步骤可以参考博文 CentOS 7 搭建 DNS 服务,这里只介绍关键配置信息:

 [root@localhost /]# vim /etc/named.conf
// 修改 DNS 服务主配置文件
                               …………    // 省略部分内容
zone "a.com" IN {
        type master;
        file "a.com.zone";
};
zone "b.com" IN {
        type master;
        file "b.com.zone";
};
[root@localhost /]# vim /var/named/a.com.zone
// 编写 a.com 区域配置文件

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      www.a.com.
www     IN      A       192.168.1.1
[root@localhost /]# vim /var/named/b.com.zone
// 编写 b.com 区域配置文件

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      www.b.com.
www     IN      A       192.168.1.1
[root@localhost /]# systemctl start named
// 启动 DNS 服务
[root@localhost /]# nslookup
> www.a.com
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   www.a.com
Address: 192.168.1.1
> www.b.com
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   www.b.com
Address: 192.168.1.1
// 测试解析

2. 为虚拟主机准备网页文档

[root@localhost /]# mkdir -p /var/www/html/acom
[root@localhost /]# mkdir -p /var/www/html/bcom
[root@localhost /]# echo "<h1>www.a.com</h1>" > /var/www/html/acom/index.html
[root@localhost /]# echo "<h1>www.b.com</h1>" > /var/www/html/bcom/index.html
// 文件存放位置可以自定义

3. 添加虚拟主机配置
当虚拟 Web 主机的数量较多时,建议使用独立的虚拟主机配置文件,然后在 httpd 服务的主配置文件通过 Include 加载这些配置。这样可以将对 httpd 服务的主配置文件的修改减至最少,更方便配置内容的维护。

root@localhost /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 
// 创建独立的配置文件
<VirtualHost *:80>                                          //* 表示所有地址
    ServerAdmin webmaster@a.com              // 管理员邮箱地址       
    DocumentRoot "/var/www/html/acom"       // 设置 a 虚拟站点区域 
    ServerName www.a.com                           // 域名
    ServerAlias www.dummy-host.example.com       // 别名
    ErrorLog "logs/www.a.com.error_log"                  // 错误日志
    CustomLog "logs/www.a.com.access_log" common    // 访问日志
    <Directory "/var/www/html">
      Require  all granted              // 允许所有主机访问
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@b.com
    DocumentRoot "/var/www/html/bcom"
    ServerName www.b.com
    ServerAlias www.dummy1-host.example.com
    ErrorLog "logs/www.b.com.error_log"
    CustomLog "logs/www.b.com.access_log" common
    <Directory "/var/www/html">
      Require  all granted
    </Directory>
</VirtualHost>
[root@localhost /]# vim /usr/local/httpd/conf/httpd.conf 
// 编写 httpd 服务的主配置文件
                  …………              // 省略部分内容
Include conf/extra/httpd-vhosts.conf
// 加载独立的配置文件
[root@localhost /]# systemctl start httpd
// 启动 httpd 服务

4. 客户机访问测试
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解

基于 IP 地址的虚拟主机实现步骤
实验环境中,所以在服务器上模拟一个 IP 地址

[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
// 复制网卡配置文件
[root@localhost network-scripts]# vim ifcfg-ens33:0
// 修改刚才复制的网卡配置文件
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0                          // 必须修改
UUID=fddc7556-c28d-4149-afb8-13356cdeb279
DEVICE=ens33:0                       // 必须修改
ONBOOT=yes
IPADDR=192.168.1.11               // 必须修改
[root@localhost network-scripts]# ifdown ens33:0;ifup ens33:0
// 重新加载 ens33:0 网卡的配置文件
[root@localhost network-scripts]# ifconfig ens33:0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 00:0c:29:98:42:5d  txqueuelen 1000  (Ethernet)
[root@localhost /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 
// 修改虚拟主机配置文件
<VirtualHost 192.168.1.1:80>                              // 把 * 改为 IP 地址
    ServerAdmin webmaster@a.com
    DocumentRoot "/var/www/html/acom"
    ServerName www.a.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/www.a.com.error_log"
    CustomLog "logs/www.a.com.access_log" common
    <Directory "/var/www/html">
      Require  all granted
    </Directory>
</VirtualHost>

<VirtualHost 192.168.1.11:80>                    // 把 * 改为 IP 地址
    ServerAdmin webmaster@b.com
    DocumentRoot "/var/www/html/bcom"
    ServerName www.b.com
    ServerAlias www.dummy1-host.example.com
    ErrorLog "logs/www.b.com.error_log"
    CustomLog "logs/www.b.com.access_log" common
    <Directory "/var/www/html">
      Require  all granted
    </Directory>
</VirtualHost>
[root@localhost /]# systemctl restart httpd
// 重新加载 httpd 服务

客户机访问测试
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解

基于端口的虚拟主机实现步骤
修改虚拟主机配置文件

root@localhost /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    ServerAdmin webmaster@a.com
    DocumentRoot "/var/www/html/acom"
    ServerName www.a.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/www.a.com.error_log"
    CustomLog "logs/www.a.com.access_log" common
    <Directory "/var/www/html">
      Require  all granted
    </Directory>
</VirtualHost>

<VirtualHost *:8080>                              // 修改端口信息
    ServerAdmin webmaster@b.com
    DocumentRoot "/var/www/html/bcom"
    ServerName www.b.com
    ServerAlias www.dummy1-host.example.com
    ErrorLog "logs/www.b.com.error_log"
    CustomLog "logs/www.b.com.access_log" common
    <Directory "/var/www/html">
      Require  all granted
    </Directory>
</VirtualHost>
Listen 8080             // 监听 8080 端口,写在主配置文件或虚拟主机配置文件都可以

[root@localhost /]# systemctl restart httpd
// 重新加载 httpd 服务

强烈建议,修改端口信息的时候,千万不能修改为 1~1024 之间的端口,因为这些端口已经被系统服务使用!

客户机访问测试
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解

虚拟目录实现步骤

[root@localhost httpd-2.4.25]# mkdir /yum
[root@localhost httpd-2.4.25]# echo "<h1>www.yum.com</h1>" > /yum/index.html
// 创建虚拟目录测试文件
[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf 
// 编写 httpd 服务主配置文件
                        …………     // 省略部分内容
Alias /test "/yum"        // 定义虚拟目录“/test”,物理路径为“/yum”<Directory "/yum">        // 定义目录访问权限
Options Indexes MultiViews FollowSymLinks      // 固定格式,这项可以忽略
AllowOverride None             // 固定格式。这项可以忽略
Order allow,deny    // 匹配顺序为先允许,后拒绝,这项可以忽略
Allow from all        // 设置允许所有人访问,这项可以忽略
Require all granted    // 对这个目录给予授权
</Directory>
[root@localhost httpd-2.4.25]# systemctl restart httpd
// 重新启动 httpd 服务

客户机测试访问
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解

如果想针对虚拟目录开启身份验证
将上面的配置做如下修改:

[root@localhost httpd]# vim /usr/local/httpd/conf/httpd.conf 
// 修改 httpd 服务主配置文件
                           …………               // 省略部分内容
Alias /test "/yum"
<Directory "/yum">
Options Indexes MultiViews FollowSymLinks                // 固定格式可以省略
AllowOverride None                                                      // 固定格式可以省略                                                 
AuthName "test"                               // 定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示
AuthType Basic                                // 设置认证的类型,Basic 为基本的认证
AuthUserFile /usr/local/httpd/user    // 设置用于保存用户账号、密码的认证文件路径
Require valid-user                            // 要求只有认证文件中的合法用户才能访问。valid-user 表示所有合法用户
</Directory>
[root@localhost htdocs]# cd /usr/local/httpd/
[root@localhost httpd]# bin/htpasswd -c /usr/local/httpd/conf/123.txt xiaozhang
New password: 
Re-type new password: 
Adding password for user xiaozhang
[root@localhost httpd]# systemctl restart httpd
// 重新启动 httpd 服务

针对 Web 网站设置用户限制,可以参考博文:CentOS 7 中 httpd 服务的用户限制详解
客户机访问测试
CentOS 7 中 httpd 服务构建虚拟 Web 主机与虚拟目录设置详解

如果虚拟目录针对虚拟主机,请在虚拟主机配置文件中添加。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6083字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中