Zerlinda's Blog

Apache 配置虚拟主机三种方式

好久没碰自己的个人网站了,这几天心血来潮对域名解析开始感兴趣,于是在网上各种搜集资源。一番折腾又给网站添加了两种不同的访问方式:二级域名访问和端口号访问,当然,为了让读者能看到域名解析的效果,这里为不同的访问方式匹配了不同的目录,只有主站才能访问到本站,端口号和二级域名访问的是子目录下的一个静态页面。

可能有人会好奇,增加这些访问方式有何意思?其实在项目开发中这种访问方式很常见,比如说一个项目在上线前需要测试,所谓的测试站,也不过是指定了一个特定的目录和端口或者几级的域名来测试运行项目。还是那句话,虽然你在开发中用不到,但是技多永远不压身。

.ren是我的顶级域名,你可以通过其他方式来访问,在浏览器直接输入或者点击访问:

       ilovecc.ren 一级域名

       blog.ilovecc.ren 二级域名

       www.ilovecc.ren 二级域名

       ilovecc.ren:8024 端口号访问

首先对服务器有一些基础我们要了解,之前写了一篇关于centos下Apache的配置的文章,包括更改网站目录和访问权限,可以作为此片文章的基础:centOS下更改网站根目录

因为网站主机是采用的是阿里云的ecs,所以对于二级域名的解析可以在控制台的云解析中完成,这里就不赘述,读者可以自行谷歌或者百度。除了服务器上域名的解析,其他都在Apache的配置文件httpd.conf中完成。下面来讲如何在Apache中完成虚拟主机的配置。

一、基于域名的解析

1. 首先确定要解析的域名

	123.56.247.44   www.ilovecc.ren
	123.56.247.44   blog.ilovecc.ren

当然因为我只有一台主机,所有的域名配置都是基于一台云主机的。

2. 建立虚拟主机存放网页的根目录

	/home/cuijingjing/html       //www.ilovecc.ren域名对应的目录
	/var/www/html                //blog.ilovecc.ren域名对应的目录

3. 配置httpd.conf

  为了使用基于域名的虚拟主机,必须指定服务器IP地址(和可能的端口)来使主机接受请求。可以用NameVirtualHost指令来进行配置。 如果服务器上所有的IP地址都会用到, 你可以用*作为NameVirtualHost的参数。在NameVirtualHost指令中指明IP地址并不会使服务器自动侦听那个IP地址。 这里设定的IP地址必须对应服务器上的一个网络接口。

  下一步就是为你建立的每个虚拟主机设定<VirtualHost>配置块,<VirtualHost>的参数与NameVirtualHost指令的参数是一样的。每个<VirtualHost>定义块中,至少都会有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容存在于文件系统的什么地方。

  如果在现有的web服务器上增加虚拟主机,必须也为现存的主机建造一个<VirtualHost>定义块。其中ServerName和DocumentRoot所包含的内容应该与全局的保持一致,且要放在配置文件的最前面,扮演默认主机的角色。

   NameVirtualHost *:80
   <VirtualHost *:80>
    DocumentRoot /home/cuijingjing/html
    ServerName www.ilovecc.ren   
   </VirtualHost>
   <VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName blog.ilovecc.ren
  </VirtualHost> 

一定注意NameVirtualHost *:80和后面的virtualHost配置要统一。接下来配置文件的访问权限:

  <Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>

大功告成,测试下每个虚拟主机,分别访问www.ilovecc.ren、blog.ilovecc.ren,测试通过。

二、基于端口的解析

1. 在原来监听80端口的基础上添加8024端口

     Listen 8024

2. 更改虚拟主机设置,同样,如果为端口指定了不一样的目录,我们还是要配置目录的访问权限,在此与域名目录权限配置是一样的:

<VirtualHost *:8024>
    DocumentRoot /var/www/html
    ServerName www.ilovecc.ren   
</VirtualHost>

三*、基于IP的解析

这种方法我也没有亲自试验过,写出来未免有些不严谨。所以仅仅作为参考

1. 假设服务器有个IP地址为192.168.1.10,使用ifconfig在同一个网络接口eth0上绑定2个IP:

	[root@localhost root]# ifconfig eth0:1 192.168.1.11
	[root@localhost root]# ifconfig eth0:2 192.168.1.12

2. 域名与之一一对应:

	192.168.1.11   www.test1.com
	192.168.1.12   www.test2.com

3. 建立目录:

	/www/test1/1.html
	/www/test2/2.html

4. 在httpd.conf中写入如下配置,目录权限不在赘述:

	<VirtualHost 192.168.1.11:80>
	 ServerName www.test1.com
 	 DocumentRoot /www/test1/
	</VirtualHost>

	<VirtualHost 192.168.1.12:80>
	  ServerName www.test1.com
	  DocumentRoot /www/test2/
	</VirtualHost>

以上就是虚拟主机配置的全部内容了。总而言之,这种配置十分简单,相信看完这篇文章你也是这么认为的吧!有时候技术并不难,一通百通,最难的是如何去学习。

发表评论

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