`
modun
  • 浏览: 148602 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

apache 虚拟主机(vhost)配置(转)

阅读更多

 

 

 

在一个IP地址上运行多个基于域名的web站 点。

您的服务器有一个IP地址,而在DNS中有很多映射(CNAMES)到这个机器。 您而您想要在这个机器上运行www.example1.comwww.example2.org两个站点。

注意

在您Apache服务器的配置中创建一个虚拟主 机并不会自动在您的DNS中对主机名做相应更新。您必须自 己在DNS中添加域名来指向您的IP地址。否则别人是无法看到您的web 站点的。您可以在您的hosts文件中添加这一条目来进 行测试,但这种方法仅适用于那些有这些条目的机器来使用。

服务器配置

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here

</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here

</VirtualHost>

因为星号匹配所有的地址,所以主服务器不接收任何请求。因为 www.example1.com首先出现在配置文件中,所以它拥有最高 优先级,可以认为是默认首要服务器。这意 味着如果一个接受的请求不能与某个ServerName指令相匹配, 它将会由第一个VirtualHost所伺服。

注意

如果您愿意,您可以用确定的IP地址来取代*。 在这种情况下,VirtualHost的参数必须 与NameVirtualHost的参数相符:

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# etc ...

不论如何,当您的IP地址无法确定的时候,使用* 是很方便的——比如说,您的ISP给您配置的是动态IP地址,而您有 使用了某种动态域名解析系统时。因为*匹配任何IP 地址,所以在这样的情况下,不论IP地址如何变化,您都不需要另 外进行配置。

上述配置就是您在绝大多数情况下使用基于域名的虚拟主机时将要用到 的。事实上,仅在一种情况下这样的配置不会让您满意:当您想为不同的IP 地址或是端口提供不同的内容时。

top

在多于一个IP的情况下使用基于域名的虚拟 主机。

注意

在这里讨论的任何技术都可以推广到使用任意数量的IP 地址。

服务器有两个IP地址。一个(172.20.30.40)用于“主”服务器—— server.domain.com而另外一个 (172.20.30.50),我们将用于构建两个或多个虚拟主机。

服务器配置

Listen 80

# This is the "main" server running on 172.20.30.40
ServerName server.domain.com
DocumentRoot /www/mainserver

# This is the other address
NameVirtualHost 172.20.30.50

<VirtualHost 172.20.30.50>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here ...

</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here ...

</VirtualHost>

任何不是针对172.20.30.50的请求都将由主服务器来伺服。 而提交给172.20.30.50却没有主机名或没有 Host:头的请求,都将为www.example1.com伺 服。

top

在不同的IP的地址(比如一个内部和一个外部地址) 上提供相同的内容。

服务器有两个IP地址(192.168.1.1和 172.20.30.40)。这个机器位于内部(局域网)网络和外部 (广域网)之间。在外部,域名server.example.com指向 外部地址(172.20.30.40),而在内部,同样的域名指向内 部地址(192.168.1.1)。

服务器可以配置为向来自内部和外部的请求提供同样的内容,您只需要 一个VirtualHost配置段就可以达到这个目的。

服务器配置

NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40

<VirtualHost 192.168.1.1 172.20.30.40>
DocumentRoot /www/server1
ServerName server.example.com
ServerAlias server
</VirtualHost>

现在,从不同的网络提交的请求都会由同一个 VirtualHost来伺服。

注意:

在内网中,您可以使用 server这个名字来代替 server.example.com全名。

跟上面一样,在上述的例子里,您可以用*来取代 具体的IP地址,这样就可以对所有的地址返回相同的内容了。

top

在不同的端口上运行不同的站点。

如果您想让同一IP的不同端口伺服多个域名。您可以借助在 “NameVirtualHost”标签中定义端口这样的方法来达到这个目的。如果您 想使用不带NameVirtualHost name:port的<VirtualHost name:port>或是直接用Listen指令,您的配置将无法生效。

服务器配置

Listen 80
Listen 8080

NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080

<VirtualHost 172.20.30.40:80>
ServerName www.example1.com
DocumentRoot /www/domain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example1.com
DocumentRoot /www/domain-8080
</VirtualHost>

<VirtualHost 172.20.30.40:80>
ServerName www.example2.org
DocumentRoot /www/otherdomain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example2.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>

top

建立基于IP的虚拟主机

一个有两个IP地址(172.20.30.40和 172.20.30.50)分别对应域名 www.example1.comwww.example2.org的服务 配置如下:

服务器配置

Listen 80

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

如果存在主服务器(main server),那么对没有出现在任一个 <VirtualHost>指令中的请求(比如,对 localhost的请求)都会由主服务器来伺服。

top

混用基于端口和基于IP的虚拟主机

如果您的服务器有两个IP地址(172.20.30.40和 172.20.30.50)分别对应域名 www.example1.comwww.example2.org。对每 个域名,您都希望在80端口和8080端口发布您的网站。您可以这样配置:

服务器配置

Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080

<VirtualHost 172.20.30.40:80>
DocumentRoot /www/example1-80
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
DocumentRoot /www/example1-8080
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.50:80>
DocumentRoot /www/example2-80
ServerName www.example1.org
</VirtualHost>

<VirtualHost 172.20.30.50:8080>
DocumentRoot /www/example2-8080
ServerName www.example2.org
</VirtualHost>

top

混用基于域名和基于ip的虚拟主机

如果您想在一些地址上配置基于域名的虚拟主机而在另外一些配置基于 IP的虚拟主机。

服务器配置

Listen 80

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
</VirtualHost>

# IP-based
<VirtualHost 172.20.30.50>
DocumentRoot /www/example4
ServerName www.example4.edu
</VirtualHost>

<VirtualHost 172.20.30.60>
DocumentRoot /www/example5
ServerName www.example5.gov
</VirtualHost>

top

使用_default_虚拟主机

为所有端口配置 _default_虚拟主机

这样配置,以捕获任何指向没指定的IP地址和端口的请求。比如 说:一个没被任何虚拟主机使用的地址/端口对。

服务器配置

<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>

使用这样一个使用通配符端口的默认虚拟主机可以有效的防止请求被主 服务器接收。

如果一个地址/端口对已经被一个基于域名的虚拟主机使用,那么默认虚 拟主机决不会处理发向这个地址/端口的请求。如果一个请求的Host:头中包含未知信息,或者干脆就没有,那么它会被第一 个基于域名的虚拟主机(就是在配置文件中首先出现的使用了那个地址/端 口对的虚拟主机)处理。

您可以用AliasMatch或 RewriteRule来重写任何 请求,使它指向一个简单信息页面(a single information page)(或脚 本)。

为不同的端口部署 _default_虚拟主机

与第一种一样,但我们想让服务器侦听很多端口而第二个 _default_虚拟主机单独侦听80端口。

服务器配置

<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>

<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>

侦听80端口的默认虚拟主机(必须出现在所有使用通配符端口 的虚拟主机之前)会捕获所有发向一个没有指定的IP地址的请求。主服务器 将不会用于伺服任何请求。

为一个端口配置 _default_虚拟主机

如果我们只想在80端口上建立唯一的一个默认虚拟主机,我们应该这样 配置:

服务器配置

<VirtualHost _default_:80>
DocumentRoot /www/default
...
</VirtualHost>

发向一个未进行设定的地址的80端口的请求将会为这个虚拟主机伺服; 而发向未进行设定的地址的其他端口的请求为主服务器伺服。

top

将一个基于域名的虚拟主机移植为一个基于 IP的虚拟主机

如果一个具有www.example2.org域名的虚拟主机(就是基于域名配置示例中的第二个)得到了自己的IP地址。 为了避免一些域名服务器或代理服务器在移植期间仍对这个域名做老的解析, 我们可以采用一种过渡方法:同时提供新旧两个IP地址的解析。
达到这个目的很简单。因为我们只要简单的把新地址 (172.20.30.50)加入VirtualHost指令就行 了。

服务器配置

Listen 80
ServerName www.example1.com
DocumentRoot /www/example1

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
ServerAlias *.example3.net
# ...
</VirtualHost>

现在这个虚拟主机就可以用新地址(表现为一个基于IP的虚拟主机)和 旧地址(表现为一个基于域名的虚拟主机)同时进行访问了。

top

使用ServerPath指令

如果我们在一个服务器上运行了两个基于域名的虚拟主机。为了匹配正 确的虚拟主机,客户端必须发送正确的Host:头。而旧的使用 HTTP/1.0的客户端无法发送这样的头,这样,Apache就无法辨别客户端想要 连接哪个虚拟主机(会用主虚拟主机来伺服这个请求)。为了尽量提供向下 兼容性,我们可以可以提供一个主虚拟主机来返回一个页面,在页面中加入 指向基于域名的虚拟主机的URL前缀的链接。

Server configuration

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# primary vhost
DocumentRoot /www/subdomain
RewriteEngine On
RewriteRule ^/.* /www/subdomain/index.html
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub1
ServerName www.sub1.domain.tld
ServerPath /sub1/
RewriteEngine On
RewriteRule ^(/sub1/.*) /www/subdomain$1
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub2
ServerName www.sub2.domain.tld
ServerPath /sub2/
RewriteEngine On
RewriteRule ^(/sub2/.*) /www/subdomain$1
# ...
</VirtualHost>

由于ServerPath指令的作用, 发送到http://www.sub1.domain.tld/sub1/的请求总会 被sub1-vhost所伺服。
如果客户端发送了正确的Host:头,发送到 http://www.sub1.domain.tld/的请求指挥被sub1-vhost伺服。 如果没有发送Host:头,客户端会得到从主虚拟主机发送的信 息页面。
请注意,这里还有一点小问题:如果客户端没有发送Host:头, 发送到http://www.sub2.domain.tld/sub1/的请求还是会被 sub1-vhost伺服。
RewriteRule指令用以确 保正确发送了Host:头的客户端可以任意使用这两种URL变量, 比如说:使用或不使用URL前缀。

 

 

分享到:
评论

相关推荐

    虚拟主机配置教程,包括apache mod_vhost_alias模块

    本教程将详细介绍如何使用Apache的`mod_vhost_alias`模块进行虚拟主机配置。 Apache `mod_vhost_alias`模块允许动态地配置虚拟主机,根据请求的域名来决定哪个目录提供服务,这在处理多域名或者共享主机环境时非常...

    apache配置虚拟主机

    Apache 虚拟主机配置是Web服务器管理中的一个重要环节,允许在一个单一的Apache实例上运行多个独立的网站。...遵循这些原则,可以有效地配置和管理Apache虚拟主机,确保各个站点的正常运行和访问。

    Apache虚拟主机配置

    ### Apache虚拟主机配置详解 在IT领域,Apache服务器作为最流行的Web服务器软件之一,其功能强大,稳定性高,尤其在虚拟主机配置方面表现卓越。本文将深入解析如何在Apache下配置虚拟主机,涵盖从基本设置到高级...

    062901apache 虚拟主机1

    Apache虚拟主机技术是Apache HTTP服务器实现多站点共存的关键特性,允许在单个服务器上配置多个独立的网站,每个网站可以有不同的域名、IP地址或端口号。这使得资源管理更加高效,尤其对于托管服务提供商或者拥有多...

    如何实现apache动态虚拟主机和激活mod_vhost_alias.so模块

    本文详细介绍了如何使用Apache httpd-2.2.15版本实现动态虚拟主机的配置过程,包括编译安装、添加`mod_vhost_alias`模块、配置Apache服务、创建站点文件夹、设置用户认证等关键步骤。通过这些步骤,您可以轻松地在同...

    快捷配置apache虚拟目录和HOSTS文件

    配置虚拟目录通常涉及修改Apache的配置文件httpd.conf或通过创建额外的vhost(虚拟主机)配置文件。 以下是配置Apache虚拟目录的基本步骤: 1. **打开配置文件**:找到Apache的配置文件,通常是`/etc/httpd/conf/...

    VHost虚拟主机管理系统 v2.6

    VHost虚拟主机管理系统v2.6是一款专为Linux/Unix操作系统设计的高效、便捷的Web管理工具,旨在简化和优化虚拟主机的配置和管理工作。它允许用户通过网页界面轻松搭建和管理Apache服务器上的PHP和MySQL环境,从而创建...

    lampp 配置 vhost

    ### LAMPP中配置虚拟主机(VHost)的详细说明 #### 概述 在LAMPP环境下配置虚拟主机(Virtual Hosts,简称VHost)是一项非常实用的功能,它允许在同一台服务器上运行多个不同的网站,并且每个网站都有独立的域名、...

    VHost虚拟主机系统 v2.6.6

    VHost的所有操作都是通过web实现,用户可以方便地通过VHost实现一个由Apache+PHP+MySQL构成的虚拟主机环境。增加了Webmail功能;增加了对MySQL数据库空间的单独控制功能;增加了虚拟主机空间和数据库空间的微调功能...

    lampp之vhost配置

    在LAMPP(Linux、Apache、MySQL、PHP和Perl)环境下设置虚拟主机(vhost)是一种常见的做法,它允许用户在同一台服务器上运行多个不同的网站或应用程序。通过配置虚拟主机,可以有效地将一台物理服务器分割为多个...

    vhost:为 apache 创建虚拟主机的脚本

    为 apache 创建虚拟主机的脚本 安装: 只需将此脚本放置到~/bin 。 它将在带有vhost终端中可用。 检查一下vhost -h 。 可用选项: 选项 描述 -h 帮助画面 -pub 在~/www/name/public/创建虚拟主机根目录 -url ...

    vhost-creator:一个简单的bash脚本,可在Ubuntu或CentOS上使用apache创建虚拟主机vhost

    总之,vhost-creator是一个实用的工具,它极大地简化了在Ubuntu和CentOS系统上设置Apache虚拟主机的过程,对于经常需要处理多站点部署的系统管理员来说,这是一个非常有价值的资源。了解并掌握这个脚本的工作原理和...

    测试虚拟主机配置不当.docx

    例如,Apache服务器可以通过设置不同的`ServerName`和`DocumentRoot`来配置多个虚拟主机: ```apacheconf *&gt; ServerName wahh-app1.com DocumentRoot /www/app1 *&gt; ServerName wahh-app2.com DocumentRoot /...

    windows下apache2.4虚拟主机配置本机域名以及报403的处理方法

    windows下apache2.4虚拟主机配置本机域名 1.首先,找到hosts文件,C:\Windows\System32\drivers\etc\hosts,打开hosts,IP指向一个域名: 如127.0.0.1 www.tp5.com 2.打开Apache配置文件 httpd.conf,位于Apache\...

    VHost:在Linux平台上管理Apache服务器虚拟主机的工具

    在Linux平台上,Apache服务器是广泛使用的Web服务器,它支持虚拟主机功能,通过VHost(Virtual Host)配置,可以轻松管理多个独立的网站。 **Apache服务器虚拟主机** Apache服务器的虚拟主机功能是通过解析不同...

    apache配置虚拟主机的方法详解

    下面将详细讲解如何配置Apache虚拟主机。 首先,开启Apache的虚拟主机功能。在Apache的主配置文件(通常为`httpd.conf`)中,你需要找到并启用虚拟主机模块。通常,这涉及到加载`mod_vhost_alias`模块。在配置文件...

    linux的Apache(http)与PHP的结合配置及Apache默认虚拟主机1

    修改Apache的配置文件:编辑配置文件,搜索httpd-vhost,去掉#号,然后保存配置文件: [root@gary-tao

    vhosting:在单个服务器上管理Linux用户和Apache虚拟主机-开源

    "vhost.conf" 文件是Apache虚拟主机配置文件的一部分,用于定义每个虚拟主机的特定设置,如绑定的域名、文档根目录(即这里的 "public_html")和访问权限等。描述中还提到了一个利用Python脚本(vhost.py)来实现...

Global site tag (gtag.js) - Google Analytics