在同一台Apache服务器中运行多个web站点,其中的每一个站点实际上不会占用着整个服务器,通过虚拟web主机服务可以充分利用服务器的硬件资源,从而降低网站构建以及运行成本。虚拟主机主要类型分为三种:
1、基于IP端口
对每个不同域名的虚拟主机设置单独IP,因此,在服务器中需要设置多个网卡,对于硬件成本和IP成本要求都高,此种方式在实际中不常用,本文暂且略过;
2、基于端口IP
使用TCP不同端口来区分不同的站点内容,需要在用户访问站点时跟上指定端口号才可实现访问;
3、基于主机名
每个服务器主机可以构建多个不同域名服务器,但都使用相同IP地址;此种方式在实际中较为常用!

当网页分类内容较多,对于后台运维数据处理与更新压力较大,因此需要建立分类管理的目录,方便管理,称为虚拟目录;

实验描述:

  • 实验环境Redhat6.5版本
  • 服务器IP地址:192.168.100.107
  • Redhat镜像挂载至/mnt下
  • 本实验使用Apache2.2版本

rpm -q httpd //查看Apache版本

环境部署

rpm -q httpd //检查是否安装Apache
service iptables stop //关闭防火墙
setenforce 0 //关闭增强安全×××

建立Apache虚拟目录(用户访问控制)

1、虚拟目录访问

rpm -ivh /mnt/Packages/httpd-2.2.15-29.el6_4.x86_64.rpm // 安装Apache2.2
vim /etc/httpd/conf/httpd.conf //编辑主配置文件

Listen 192.168.100.107:80  //更改监听地址和监听端口
#Listen 80   //注释IPV6的监听
...
ServerName www.yun.com:80  //打开主机域名

vim /etc/httpd/conf.d/vdir.conf
//在子配置文件目录下创建虚拟目录配置文件 vdir.conf

在vdir.conf中写入以下内容:

Alias /test "/opt/test/"   //指定虚拟目录名称为test,并指定目录站点在/opt/test

<Directory "/opt/test/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    AuthName "hello" //认证名称
    authtype basic //用户认证方式为基本认证方式
    authuserfile /etc/httpd/user  //指定用户认证文件存放位置
    #authgroupfile /etc/httpd/group
    #require Valid-user  //设置用户访问权限,取消注释时即可实现用户授权访问; 
    #require user test 
    #Require group admin
</Directory>

mkdir -p /opt/test //创建虚拟目录站点
vim /opt/test/index.html //创建虚拟目录首页
service httpd start //开启httpd服务

Apache搭建web虚拟主机

2、用户授权访问

vim /etc/httpd/conf.d/vdir.conf //编辑服务子配置文件

Alias /test "/opt/test/"   //指定虚拟目录名称为test,并指定目录站点在/opt/test

<Directory "/opt/test/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    AuthName "hello" //认证名称
    authtype basic //用户认证方式为基本认证方式
    authuserfile /etc/httpd/user  //指定用户认证文件存放位置
    #authgroupfile /etc/httpd/group
    #require Valid-user  //取消注时即可实现用户授权访问; 
    #require user test 
    #Require group admin
</Directory>

htpasswd -c /etc/httpd/user zhangsan //创建授权访问用户
service httpd restart //重启httpd服务

当再一次访问网页时变成了需要授权的用户才可访问:
Apache搭建web虚拟主机

相同IP不同端口

1、配置DNS

可参见:DNS域名解析服务配置

rpm -ivh /mnt/Packages/bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm //首先安装DNS域名解析服务
vim /etc/named.conf //配置域名解析主配置文件

options {
        listen-on port 53 { 192.168.100.107; }; //监听端口主机IP
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };   //允许任意网段主机都可解析
        recursion yes;

vim /etc/named.rfc1912.zones //编辑区域配置文件

zone "yun.com" IN {
        type master;
        file "yun.com.zone";
        allow-update { none; };
};

cd /var/named //切换到区域数据配置目录下
cp -p named.localhost yun.com.zone //复制区域数据配置文件模板
vim yun.com.zone //配置区域数据配置文件

$TTL 1D
@       IN SOA  @ admin. (     //修改管理员邮箱
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
www IN  A       192.168.100.107   //设置解析地址

service named start //开启DNS服务

2、不同端口不同内容

vim /etc/httpd/vhost.conf //创建虚拟主机端口配置文件

写入以下内容:

NameVirtualHost 192.168.100.107:80   //设置主机IP及端口号
<VirtualHost 192.168.100.107:80>
   ServerAdmin webmaster@dummy-host.example.com
   DocumentRoot /opt/yun/  //设置80端口网页站点
   ServerName www.yun.com  //解析域名
   ErrorLog logs/yun.com-error_log  //错误日志存放位置
   CustomLog logs/yun.com-access_log common  //访问日志存放位置
</VirtualHost>

NameVirtualHost 192.168.100.107:250
<VirtualHost 192.168.100.107:250>
   ServerAdmin webmaster@dummy-host.example.com
   DocumentRoot /opt/yun01/  //设置80端口网页站点
   ServerName www.yun.com   //解析域名
   ErrorLog logs/yun01.com-error_log  //错误日志存放位置
   CustomLog logs/yun01.com-access_log common  //访问日志存放位置
</VirtualHost>

mkdir -p /opt/yun //创建80端口站点
echo "yun port 80 test web" > /opt/yun/index.html // 创建 www.yun.com:80的首页内容

mkdir -p /opt/yun01 //创建250端口站点
echo "yun port 250 test web" > /opt/yun01/index.html // 创建 www.yun.com:250的首页内容

vim /etc/httpd/conf/httpd.conf //编辑httpd服务主配置文件

Listen 192.168.100.107:80   //原有监听端口
Listen 192.168.100.107:250  //添加监听端口

service httpd restart //重启httpd服务
service named restart //重启DNS服务

当访问相同IP域名不同端口时出现不同内容:

Apache搭建web虚拟主机
Apache搭建web虚拟主机

相同IP不同主机

1、配置DNS解析服务

vim /etc/named.rfc1912.zones //编辑区域配置文件

zone "yun.com" IN {
        type master;
        file "yun.com.zone";
        allow-update { none; };
};
zone "abc.com" IN {         //添加新的解析域名
        type master;
        file "abc.com.zone";
        allow-update { none; };
};      

cd /var/named
cp -p yun.com.zone abc.com.zone //复制区域数据配置文件模板
vim abc.com.zone

$TTL 1D
@       IN SOA  @ admin. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
www IN  A       192.168.100.107

2、不同主机

vim /etc/httpd/conf.d/vhost.conf

加入以下内容:

<VirtualHost 192.168.100.107:80>
   ServerAdmin webmaster@dummy-host.example.com
   DocumentRoot /opt/abc/
   ServerName www.abc.com
   ErrorLog logs/abc.com-error_log
   CustomLog logs/abc.com-access_log common
</VirtualHost>

mkdir -p /opt/abc //创建 www.abc.com的站点
echo "this is abc" > /opt/abc/index.html //创建内容

service httpd restart //重启httpd服务
service named restart //重启DNS服务

Apache搭建web虚拟主机
Apache搭建web虚拟主机