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

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

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

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

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

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

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

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

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

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

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

 [[email protected] /]# 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";  };  [[email protected] /]# 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  [[email protected] /]# 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  [[email protected] /]# systemctl start named  //启动DNS服务  [[email protected] /]# 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.为虚拟主机准备网页文档

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

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

[email protected] /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf   //创建独立的配置文件  <VirtualHost *:80>                                          //*表示所有地址      ServerAdmin [email protected]              //管理员邮箱地址             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 [email protected]      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>  [[email protected] /]# vim /usr/local/httpd/conf/httpd.conf   //编写httpd服务的主配置文件                    …………              //省略部分内容  Include conf/extra/httpd-vhosts.conf  //加载独立的配置文件  [[email protected] /]# systemctl start httpd  //启动httpd服务

4.客户机访问测试基于IP地址的虚拟主机实现步骤实验环境中,所以在服务器上模拟一个IP地址

[[email protected] /]# cd /etc/sysconfig/network-scripts/  [[email protected] network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0  //复制网卡配置文件  [[email protected] 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               //必须修改  [[email protected] network-scripts]# ifdown ens33:0;ifup ens33:0  //重新加载ens33:0网卡的配置文件  [[email protected] 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)  [[email protected] /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf   //修改虚拟主机配置文件  <VirtualHost 192.168.1.1:80>                              //把*改为IP地址      ServerAdmin [email protected]      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 [email protected]      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>  [[email protected] /]# systemctl restart httpd  //重新加载httpd服务

客户机访问测试基于端口的虚拟主机实现步骤修改虚拟主机配置文件

[email protected] /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf   <VirtualHost *:80>      ServerAdmin [email protected]      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 [email protected]      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端口,写在主配置文件或虚拟主机配置文件都可以    [[email protected] /]# systemctl restart httpd  //重新加载httpd服务

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

客户机访问测试虚拟目录实现步骤

[[email protected] httpd-2.4.25]# mkdir /yum  [[email protected] httpd-2.4.25]# echo "<h1>www.yum.com</h1>" > /yum/index.html  //创建虚拟目录测试文件  [[email protected] 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>  [[email protected] httpd-2.4.25]# systemctl restart httpd  //重新启动httpd服务

 

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

[[email protected] 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>  [[email protected] htdocs]# cd /usr/local/httpd/  [[email protected] httpd]# bin/htpasswd -c /usr/local/httpd/conf/123.txt xiaozhang  New password:   Re-type new password:   Adding password for user xiaozhang  [[email protected] httpd]# systemctl restart httpd  //重新启动httpd服务

针对Web网站设置用户限制,可以参考博文:CentOS 7 中httpd服务的用户限制详解如果虚拟目录针对虚拟主机,请在虚拟主机配置文件中添加。

郑重声明:本网站发布的内容(图片、视频和文字)以及用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注