注册
登录
搜索
帮助
中国Linux公社论坛
»
服务器与网络安全
» Apache配置虚拟主机
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
Apache配置虚拟主机
moonsky
高级会员
发短消息
加为好友
当前离线
1
#
大
中
小
发表于 2002-12-3 12:30
只看该作者
Apache配置虚拟主机
虚拟主机使得一台服务器可以运行多个网站。本文介绍如何配置服务器使其支持虚拟主机,包括基于IP的虚拟主机和基于名称的虚拟主机,以及通过运行多个服务daemon实现一台机器运行多个网站的方法。
一、虚拟主机及其应用(1月15日)
虚拟主机就是运行在同一物理服务器上的具有不同名字的多个Web网站。它的基本思想是:即使所有网站都运行在同一个服务器上,Apache也知道用户访问的是哪一个网站,而且能够正确地返回用户所请求的内容。
虚拟主机是这样一种特殊的技术:它使得我们可以在一台机器上运行多个Web网站,支持许多不同的域名和一个域之内的多个名字,从而使得一台通过DSL接入的家用计算机看起来象是一屋子的服务器。这是一种非常巧妙的技术。
为什么要使用虚拟主机
或许你现在已经有了自己的应用虚拟主机的设想。下面是本人通常使用虚拟主机的情况。我在一家Web设计公司工作。为客户开发Web网站时,我们总是为该客户配置一个专用的虚拟主机。这些虚拟主机往往是基于名称的虚拟主机,因为这设置起来比较快,而且几乎总是只在内部进行。也就是说,在内部DNS服务器上设置一下名称,这样内部的主机就可以看到这个Web网站,而外面的浏览器只能看到我们开发服务器上公开的内容。
这种做法有着许许多多的好处。它使得我们能够设置网站的目录结构,其设置方法又和开发完成后实际运行的网站完全一样。它使得我们能够完全地分离不同网站的文件,不会出现搞不清某个文件属于哪个网站的混乱。此外,从开发者的角度来看,它使得我们能够在DreamWeaver中设置完全独立的网站,而不仅仅是设置同一网站的不同子目录。
最后,如果使用虚拟主机,不论我们同时开发的客户项目有多少,都无需分别为每个网站配置一个新的服务器。在任何时候这都是使用虚拟主机最主要的理由。
二、基于IP的虚拟主机(1月15日)
我们可以用两种方法设置虚拟主机。这两种方法只是服务器上配置的不同,对客户来说没有什么区别——也就是说,用户无法知道他们所使用的虚拟主机属于哪一种类型,甚至不会知道自己正在使用虚拟主机。
这两种类型分别是基于IP的(IP-based)虚拟主机和基于名称的(Name-Based)虚拟主机。简单地说,两者的区别在于:使用基于IP的虚拟主机时,每一个虚拟主机都有一个不同的IP地址,而基于名称的虚拟主机都有相同的IP地址,但它们的名称不同。两种类型各有优点,但它们的实现方法并没有什么大的差别。
在基于IP的虚拟主机环境中,同一个服务器机器上运行着多个Web网站,但每一个Web网站都有其自己的IP地址。为了实现这一点,我们首先要在操作系统上设置这些IP地址。大多数现代操作系统都允许我们为一台机器设置任意多的IP地址,具体的设置方法对每种操作系统来说都不同。本文不准备在方面作深入的介绍。如果你不熟悉如何在自己的操作系统上进行设置,请向熟悉的专家请教。一般这种设置并不是很困难。或者,你也可以跳过这种基于IP的虚拟主机,直接转入下面介绍的基于名称的虚拟主机。
有些老式的操作系统要求每个NIC(network interface card,网卡)对应一个IP地址,但现在一般不再有这种限制。
在机器上设置好多个IP地址之后,我们还要在DNS(域名服务器)中设置这些IP地址,这样DNS就能够解析我们赋予这些IP地址的名称。这里我们不准备介绍DNS记录的具体设置方法,你可以要求DNS服务器的管理员设置这些记录。
接下来要做的工作就直接和Apache有关了。假定我们已经将所有的IP地址设置到了机器上,每一个IP地址都有相应的DNS记录,要在Apache的httpd.conf配置文件中增加的内容如下所示。
这里我们假定有三个IP地址,对应的名称分别为name1.mydomain.com、name2.mydomain.com和name3.mydomain.com。当然,这里指定的名称也可以属于完全不同的域,例如www.mydomain.com 和 www.myotherdomain.com。
加入httpd.conf配置文件的内容如下所示:
DocumentRoot /usr/local/apache/name1_www
ServerName name1.mydomain.com
ErrorLog /usr/local/apache/logs/name1_logs/error_log
TransferLog /usr/local/apache/logs/name1_logs/access_log
ServerAdmin webmaster@name2.mydomain.com
DocumentRoot /usr/local/apache/name2_www
ServerName name2.mydomain.com
ServerAlias name2
DocumentRoot /usr/local/apache/name3_www
ServerName name3.mydomain.com
ScriptAlias /use/local/apache/name3_cgi
注意我们并不需要为每个虚拟主机指定所有的配置细节。凡是没有指定的配置细节都将从服务器主配置文档继承。例如在上面的第二个虚拟主机中,我们没有指定记录日志的地方,这个虚拟主机将把日志信息写入主服务器日志文件。
另外也请注意在第三部分中我们指定了一个CGI目录。对于其他两个部分来说,当用户访问一个包含/cgi-bin/的URL时,都默认使用主服务器配置中所指定的CGI目录,这是因为它们的虚拟主机配置中都没有指定CGI目录。
几乎所有的配置指令都可以用于区。在服务器说明文档中,我们可以注意到每一个指令都有其合法应用场所的说明,某个指令是否可以在虚拟主机配置中使用应该已经相当清楚。
请记住务必在重新启动服务器之前测试一下新的配置文件:
/usr/local/apache/bin/apachectl configtest
另外一个方便的技巧是使用SeverAlias指令,它对基于名称的虚拟主机同样适用。在LAN内访问内部服务器时,我们往往希望使用比较简单的服务器名字,例如“name2”,而不是它的全称“name2.mydomain.com”。Apache无法知道“name2”和“name2.mydomain.com”实际上是同一个Web网站,使用ServerAlias指令可以确保我们在使用简称时不会得到意想不到的页面。
重新启动服务器应用新的配置文件之后,Apache就能够根据URL判断用户访问的是哪一个Web网站,在此基础上提供正确的页面。即使所有网站在同一物理服务器上也绝不会出错。
三、基于名称的虚拟主机(1月15日)
当然,许多时候我们不能奢侈到给一台机器指定多个IP地址的地步。IP地址已经越来越紧张,而且在很多时候,例如象我是通过DSL接入,我们只能占有一个IP地址。在这种情况下,基于名称的虚拟主机正好适用。
使用基于名称的虚拟主机时,我们无需为机器设定多个IP地址,但仍旧涉及到DNS服务器的管理员,要由他们为我们的机器设置一个以上的DNS记录。这些额外的记录称为C-record,或者CName(指向某台机器的主记录称为AName,或A-record)。我们可以让任意数量的CName指向一台特定的机器。
配置DNS服务器使它将所有指定的名称解析为服务器的IP地址之后,我们还要将下面的内容加入Apache服务器的配置文件:
NameVirtualHost 192.168.1.1
ServerName name1.mydomain.com
DocumentRoot /usr/local/apache/name1docs
ServerAlias name1
ServerName name2.mydomain.com
DocumentRoot /usr/local/apache/name2docs
ServerAlias name2
ServerName name3.mydomain.com
DocumentRoot /usr/local/apache/name3docs
ServerAlias name3
正如配置基于IP的虚拟主机,我们可以在这里使用任何适用的配置指令,本例的配置应该说是相当简单的。
下面是一些注意事项。
首先,我们必须用NameVirtualHost指令指定哪个IP地址负责响应对虚拟主机的请求。我们可以联合运用基于IP和基于名称的虚拟主机——也就是说,可以在同一服务器上同时地配置这两种虚拟主机,因此我们必须指定哪一个IP地址用于基于名称的虚拟主机。如果我们要在服务器的内部接口和外部接口(即Intranet服务器和Internet服务器)上设置虚拟主机,必须同时指定这两个地址:
NameVirtualHost 192.168.1.1
NameVirtualHost 208.32.54.7
此外,除了不同的地址之外,我们还可以在不同的端口上运行虚拟主机,当然这会使系统变得非常复杂:
NameVirtualHost 192.168.1.1:80
NameVirtualHost 192.168.1.1:90
注意确保所有的名称都已经在DNS中登记,否则用户将不能访问到自己想要访问的页面。
虚拟主机能够正确发挥作用的窍门之一在于浏览器告诉了服务器它正在向谁请求内容。有些仍在使用的较老的浏览器不能正确地做到这一点,它们会从机器上的“默认”服务器读取内容。不过我们几乎无需为此担心,因为至少在最近5年来(或更早)发布的浏览器都具有这个能力。在Apache里,针对那些不能好好配合的浏览器,我们还有相应的解决办法,不过这就留给你自己去研究。如果你对此感兴趣,请从http://www.apache.org/docs/manual/vhosts/index.html开始。
四、运行多个daemon(1月15日)
事实上我们还有第三种在一个服务器上运行多个Web网站的方法,这就是在同一机器上运行多个完全独立的服务daemon,每个daemon提供一个Web网站的服务。这种方法的缺点在于每个daemon必须在不同的端口上运行,这是因为我们无法让多个服务同时监听同一端口。
我们可以用-f命令行选项让Apache服务器使用指定的配置文件:
/usr/local/apache/bin/apache -f /usr/local/apache/conf/name2_httpd.conf
这使得我们可以运行任意数量(只要机器能够支持)的服务daemon,每一个服务都以不同的配置运行。当然,此时应当确保每一个配置文件都有一个端口指令指向不同端口,否则自第一个以后的其他服务daemon都将不能启动并提示下列错误信息:
Could not bind to port 80: Port already in use.
结束语:虚拟主机使得我们可以在同一服务器机器上运行多个Web网站,它有着许多好处。总而言之,它使得你可以对上司说:“我们并不需要为了运行其他18个网站去购买新的机器”。
萝卜青菜,各有所爱,我就爱Linux! 神话有3种,第一种神话,第二种台湾独立,第三种台湾反攻大陆.
UID
4963
帖子
645
精华
37
积分
1798
阅读权限
50
来自
上海
在线时间
0 小时
注册时间
2002-11-9
最后登录
2007-4-25
查看详细资料
TOP
adminxp
注册会员
发短消息
加为好友
当前离线
2
#
大
中
小
发表于 2003-9-11 08:46
只看该作者
好!
UID
59659
帖子
42
精华
0
积分
105
阅读权限
20
来自
湖南长沙
在线时间
0 小时
注册时间
2003-9-7
最后登录
2004-12-23
查看个人网站
查看详细资料
TOP
qtal110
注册会员
发短消息
加为好友
当前离线
3
#
大
中
小
发表于 2004-8-14 13:37
只看该作者
解决了困扰我许久的困惑,真是太好了,不过还有许多地方不是很明白,慢慢研究了
UID
138095
帖子
148
精华
0
积分
354
阅读权限
20
来自
China.gif
在线时间
4 小时
注册时间
2004-7-4
最后登录
2008-12-11
查看详细资料
TOP
51photoshop
注册会员
发短消息
加为好友
当前离线
4
#
大
中
小
发表于 2004-11-3 13:35
只看该作者
知识的道路上真是无止尽啊
UID
59182
帖子
97
精华
0
积分
241
阅读权限
20
来自
China
在线时间
1 小时
注册时间
2003-9-4
最后登录
2008-12-30
查看详细资料
TOP
honourcyc
新手上路
发短消息
加为好友
当前离线
5
#
大
中
小
发表于 2004-11-3 17:55
只看该作者
能否據體說說在局域網如何配置虚拟主机,我總做不成功.我在局域網的電腦上只要打上我所配置的網站名稱如:www.test.com,它就會自動去internet去查找,直到查不到而提示沒有此網頁.我已在linux主機的/etc/host內寫入了 www.test.com 192.168.1.10 的對應關系,請問是否還要其它特殊配置?
UID
148636
帖子
26
精华
0
积分
65
阅读权限
10
来自
China.gif
在线时间
0 小时
注册时间
2004-8-26
最后登录
2004-11-5
查看详细资料
TOP
gugong
公社版主
发短消息
加为好友
当前离线
6
#
大
中
小
发表于 2004-11-3 21:57
只看该作者
你的局域网的机器,如何知道 www.test.com ?
高举马列主义毛泽东思想 !!!
UID
1082
帖子
9875
精华
24
积分
12644
阅读权限
225
来自
深圳 - 上海
在线时间
108 小时
注册时间
2002-7-7
最后登录
2008-11-3
查看个人网站
查看详细资料
TOP
jerry_cym
中级会员
发短消息
加为好友
当前离线
7
#
大
中
小
发表于 2004-11-3 22:52
只看该作者
大家说说,相对来说LINUX下哪种服务器相对比较难配置啊?
正在成长中ing!
UID
156224
帖子
252
精华
0
积分
630
阅读权限
30
来自
上海
在线时间
2 小时
注册时间
2004-9-27
最后登录
2008-3-23
查看详细资料
TOP
honourcyc
新手上路
发短消息
加为好友
当前离线
8
#
大
中
小
发表于 2004-11-4 09:26
只看该作者
[quote:78f652b9df="gugong"]你的局域网的机器,如何知道 www.test.com ?[/quote]
初學linux,這正是我不解的地方,請多多指點.是否關系到dns服務器的安裝?應如何安裝?
UID
148636
帖子
26
精华
0
积分
65
阅读权限
10
来自
China.gif
在线时间
0 小时
注册时间
2004-8-26
最后登录
2004-11-5
查看详细资料
TOP
honourcyc
新手上路
发短消息
加为好友
当前离线
9
#
大
中
小
发表于 2004-11-4 16:53
只看该作者
終於裝好dns,順便解決了apache的虛擬主機問題.
UID
148636
帖子
26
精华
0
积分
65
阅读权限
10
来自
China.gif
在线时间
0 小时
注册时间
2004-8-26
最后登录
2004-11-5
查看详细资料
TOP
hualng
新手上路
发短消息
加为好友
当前离线
10
#
大
中
小
发表于 2005-11-19 01:21
只看该作者
我来补充一点,在做基于端口的虚拟主机时,需要在httpd.conf里写入Listen这一行,例如:
当有这两行时
Listen:80
Listen:90
下面的虚拟主机才会生效
NameVirtualHost 192.168.1.1:80
NameVirtualHost 192.168.1.1:90
UID
106088
帖子
16
精华
0
积分
40
阅读权限
10
来自
China.gif
在线时间
0 小时
注册时间
2004-3-20
最后登录
2006-3-23
查看个人网站
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
版块跳转
社区公告专栏:最新通知和公告
公告区
基础技术支持专栏:
系统安装
硬件配置
Magic Linux专版:
Magic Linux技术支持区
Magic Linux开发培训版
一般应用技巧专栏:
中文化与桌面美化
桌面使用小技巧
命令行使用小技巧与SHELL编程
应用解决方案专栏:
网络工具
办公软件
多媒体应用
游戏乐园
服务器与网络安全
Linux资源共享区
高级技术学习专栏:
Debian/LFS/Gentoo专题版
Linux高质量字体研究
easyright计算机研究所
Linux认证考试专题版
社区开源项目专栏
应用编程技术与项目孵化
网站开发技术与项目孵化
参与国际开源项目
翻译汉化
中文GNOME用户交流区
Skyeye项目专栏
lumit项目专栏
eva项目专栏
fanx及slax中文专栏
连连看for Linux项目专栏
OurLinux杂志专区
BitStorm项目专栏
RT-Thread实时操作系统
EGui开源项目
AVS项目专栏
VirgoFTP项目专栏
Linux内核研读区:公社内核阅读小组
内核源代码阅读交流
内核安装和升级
嵌入式开发
社区文化活动专栏:我们是一家人!
校园行动联盟
Linux与公社文化杂谈
请进公社总部:
公社接待中心
控制面板首页
编辑个人资料
积分交易
积分记录
公众用户组
访问推广
基本概况
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队
管理统计