欢迎您,零度科技专业海外服务器租用
公司电话: 24小时电话: 

当前位置:首页>新闻动态>服务器配置与维护

目录导航

apache 配置虚拟主机教程

香港高防(5G)机房 发布于 2010-07-13  
服务器配置与维护

基于IP的虚拟主机使用链接的IP地址来决定相应的虚拟主机。 这样,你就需要为每个主机设定一个独立的IP地址。 而基于域名的的虚拟主机是根据客户端提交的HTTP头中的关于主机名的部分决定的。 使用这种技术,很多虚拟主机可以享用同一个IP地址。

基于域名的虚拟主机相对比较简单, 因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址, 然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。 基于域名的服务器也可以缓解IP地址不足的问题。 所以,如果没有特殊原因使你必须用一个基于IP的虚拟主机, 您最好还是使用基于域名的虚拟主机。 下列情况下,你可能会想要使用基于IP的虚拟主机:

一些古董级的客户端与基于域名的虚拟主机不兼容。 为了与基于域名的虚拟主机兼容,客户端必须发送HTTP Host头。HTTP/1.1规范中对此做了要求。 而所有现在流行的支持HTTP/1.0的浏览器都以附加的方式实现了这个要求。 如果你又想支持这些老浏览器,又想使用基于域名的虚拟主机。 我们提供了一个技术方案,你可以在本文末尾看到它。
由于SSL协议先天决定了基于域名的虚拟主机无法成为SSL安全服务器。
一些操作系统和网络设备实现的带宽管理技术无法在主机共享一个IP的情况下区别它们。

使用基于域名的虚拟主机
相关模块 相关指令
core
DocumentRoot
NameVirtualHost
ServerAlias
ServerName
ServerPath
VirtualHost


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

下一步就是为你建立的每个主机设定配置块。 的参数与NameVirtualHost指令的参数是一样的 (比如说,一个IP地址,或是*代表的所有地址)。 在每个定义块中,至少都会有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容存在于文件系统的什么地方。

取消中心主机(Main host)
如果你想在现有的web服务器上增加虚拟主机, 你必须也为现存的主机建造一个定义块。 这个虚拟主机中ServerName和DocumentRoot 所包含的内容应该与全局的ServerName和DocumentRoot保持一致。 还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。
比如说,假设你正在为域名www.domain.tld提供服务, 而你又想在同一个IP地址上加一个名叫www.otherdomain.tld的虚拟主机, 你只需在httpd.conf中加入以下内容:

NameVirtualHost *



ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain





ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain




当然,你可以用一个固定的IP地址来代替NameVirtualHost和 指令中的*号,以达到一些特定的目的。 比如说,你可能会希望在一个IP地址上运行一个基于域名的虚拟主机, 而在另外一个地址上运行一个基于IP的或是另外一套基于域名的虚拟主机。

很多服务器希望自己能通过不只一个域名被访问。 我们可以把ServerAlias指令放入 小节中来解决这个问题。比如说在上面的第一个配置块中ServerAlias 指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:

ServerAlias domain.tld *.domain.tld

这样,所有对域domain.tld的访问请求都将为虚拟主机 www.domain.tld所处理。通配符标记 * 和 ? 可以用于域名的匹配。 当然你不能仅仅搞个名字然后把它放到ServerName或 ServerAlias里就算完了。你必须先在你的DNS服务器上进行配置, 将这些名字和您服务器上的一个IP地址建立映射关系。

最后,你可以用把其他一些指令放入 配置段中的方法来更好的配置一个虚拟主机。 大部分指令都能放入这些配置段中而改变相应虚拟主机的配置。 如果您想了解一个特定的指令是否可以这样运用, 请参见指令的上下文。 主服务器上下文中的配置指令 (在所有配置段之外的指令) 仅在它们没有被虚拟主机的配置覆盖时才起作用。

如此,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和 NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。 如果找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。

综上所述,第一个列出的虚拟主机在这里充当了默认虚拟主机的角色。 当一个IP地址与NameVirtualHost指令中的配置相符的时候, 主服务器中的DocumentRoot将永远不会被用到。 所以,如果你想做一个处理不对应任何一个特定虚拟主机的请求的特殊配置的话, 你只要简单的把它的配置放到配置段中, 并把它放到配置文件的最前面就可以了。


与旧版浏览器的兼容性
前面提过,有些浏览器无法对基于域名的虚拟主机发送必要的数据, 从而使其无法正常工作。这些浏览器将会收到由配置中符合那个IP 地址的第一个列出的虚拟主机发出的页面(基于域名的主虚拟主机)。

究竟什么算旧?
请注意,当我们说到旧的时候,我们并不是真的说它们很古老。 其实现实中您未必就能用上这些浏览器。 现在几乎所有的浏览器都会发送基于域名的虚拟主机所必须的Host头了。
虽然有点麻烦。但您还是有可能会用到ServerPath指令:

配置实例:

NameVirtualHost 111.22.33.44



ServerName www.domain.tld
ServerPath /domain
DocumentRoot /web/domain




以上这些说明了什么呢?它说明一个具有"/domain"开头的任何URI 都会为www.domain.tld这个虚拟主机所伺服。 这意味着这个页面可以由http://www.domain.tld/domain/的形式为所有的浏览器所访问。 能够发送Host:头的浏览器也能使用 http://www.domain.tld/这种形式来访问它。

为了达到这样的目的。您先要在您的主虚拟主机的页面上放一个到 http://www.domain.tld/domain/的链接。 然后,确保在虚拟主机的页面中使用的全是相对链接(诸如: "file.html"或"../icons/image.gif")或者是包含 /domain/这个前缀(比如: "http://www.domain.tld/domain/misc/file.html"或" /domain/misc/file.html")。

完成这些可能需要一些尝试, 但遵照上述指导将会确保你的页面能够为所有的浏览器所正确显示,不论新旧。
 

到零度科技查看原文:http://www.ldisp.com/a/server-manage/2010/353.shtml

上一篇:远程桌面提示“超过了最大允许连接数”的解决办法
下一篇:启动IIS 提示“另一个程序正在使用此文件,进程无法访问”

 
了解零度?

零度科技主营全球服务器租用,如果您有服务器租用需求请联系

海外服务器租用

推荐香港、美国、韩国。提供站群服务器、高防服务器租用

海外特价服务器

关注零度特价服务器频道,了解全球特价服务器。

65

业务咨询

    技术服务

      特价活动
        全站搜索
        热门搜索:
        会员
        0通知
        客服
        0特价
        搜索
        TOP
        香港高防服务器,远程桌面,韩国服务器,nginx,反向代理