📄 examples.html
字号:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="Apache, 中文, 手册, 中文版, 中文手册, 中文版手册, 参考手册, 中文参考手册, 金步国" />
<meta name="description" content="Apache 2.2 中文版参考手册" />
<meta name="author" content="金步国" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>虚拟主机示例 - Apache 2.2 中文版参考手册</title>
</head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./index.html"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path"><a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">文档</a> > <a href="../index.html">版本2.2</a> > <a href="./index.html">虚拟主机</a></div>
<div id="translation-info"> <a href="../translator_announcement.html#thanks">致谢</a> | <a href="../translator_announcement.html#announcement">译者声明</a> | 本篇译者:<a href="mailto:csfrank@citiz.net">金步国</a> | 本篇译稿最后更新:2006年1月17日 | <a href="../translator_announcement.html#last_new">获取最新版本</a></div>
<div id="page-content"><div id="preamble"><h1>虚拟主机示例</h1>
<p>本文档试图解释一些在设置虚拟主机时经常问及的问题。这些示例向你展示了如何在一个服务器上通过<a href="name-based.html">基于域名</a>的或是<a href="ip-based.html">基于IP</a>的虚拟主机来部署多个web站点。另一份关于如何在一个代理服务器后构建基于多个服务器的站点的说明文档也很快就会出来。</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="purename" id="purename">在一个IP地址上运行多个基于域名的web站点</a></h2>
<p>您的服务器有只一个IP地址,而在DNS中有很多域名(CNAMES)映射到这个机器。您而您想要在这个机器上运行<code>www.example.com</code>和<code>www.example.org</code>两个站点。</p>
<div class="note"><h3>注意</h3>
<p>在您的Apache服务器配置中创建一个虚拟主机并不会自动在您的DNS中对主机名做相应更新。您<em>必须</em>自己在DNS中添加域名来指向您的IP地址。否则别人是无法看到您的web站点的。您可以在您的<code>hosts</code>文件中添加这一条目来进行测试,但这种方法仅适用于那些有这些<code>hosts</code>文件的机器来使用。</p>
</div>
<div class="example"><h3>服务器配置</h3><p><code>
# 确保Apache在监听80端口<br />
Listen 80<br />
<br />
# 为虚拟主机在所有IP地址上监听<br />
NameVirtualHost *:80<br />
<br />
<VirtualHost *:80><br />
<span class="indent">
DocumentRoot /www/example1<br />
ServerName www.example.com<br />
<br />
# 你可以在这里添加其他指令<br />
<br />
</span>
</VirtualHost><br />
<br />
<VirtualHost *:80><br />
<span class="indent">
DocumentRoot /www/example2<br />
ServerName www.example.org<br />
<br />
# 你可以在这里添加其他指令<br />
<br />
</span>
</VirtualHost>
</code></p></div>
<p>因为星号匹配所有IP地址,所以主服务器不接收任何请求。因为<code>www.example.com</code>首先出现在配置文件中,所以它拥有最高优先级,可以认为是<cite>默认</cite>或<cite>主</cite>服务器。这意味着如果一个请求不能与某个<code>ServerName</code>指令相匹配,它将会由第一个<code><VirtualHost></code>段所伺服。</p>
<div class="note">
<h3>注意</h3>
<p>如果您愿意,您可以用确定的IP地址来取代"<code>*</code>"。在这种情况下,<code>VirtualHost</code>的参数<em>必须</em>与<code>NameVirtualHost</code>的参数相符:</p>
<div class="example"><p><code>
NameVirtualHost 172.20.30.40<br />
<br />
<VirtualHost 172.20.30.40><br />
# 其他 ...
</code></p></div>
<p>然而,当您的IP地址无法确定的时候,使用"<code>*</code>"是很方便的,比如说,您的ISP给您配置的是动态IP地址,而您又使用了某种动态域名解析系统时。因为"<code>*</code>"匹配任何IP地址,所以在这种情况下,不论IP地址如何变化,您都不需要另外进行配置。</p>
</div>
<p>上述配置就是您在绝大多数情况下使用基于域名的虚拟主机时将要用到的。事实上,仅在一种情况下这样的配置不会让您满意:您想为不同的IP地址或是端口提供不同的内容。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="twoips" id="twoips">在多于一个IP的情况下使用基于域名的虚拟主机。</a></h2>
<div class="note">
<h3>注意</h3><p>在这里讨论的任何技术都可以推广到使用任意数量的IP地址。</p>
</div>
<p>服务器有两个IP地址。一个(<code>172.20.30.40</code>)用于主服务器<code>server.domain.com</code> ,另外一个(<code>172.20.30.50</code>)用于构建两个或多个虚拟主机。</p>
<div class="example"><h3>服务器配置</h3><p><code>
Listen 80<br />
<br />
# "主"服务器运行于:172.20.30.40<br />
ServerName server.domain.com<br />
DocumentRoot /www/mainserver<br />
<br />
# 这是另外一个IP地址<br />
NameVirtualHost 172.20.30.50<br />
<br />
<VirtualHost 172.20.30.50><br />
<span class="indent">
DocumentRoot /www/example1<br />
ServerName www.example.com<br />
<br />
# 你可以在这里添加其他指令 ...<br />
<br />
</span>
</VirtualHost><br />
<br />
<VirtualHost 172.20.30.50><br />
<span class="indent">
DocumentRoot /www/example2<br />
ServerName www.example.org<br />
<br />
# 你可以在这里添加其他指令 ...<br />
<br />
</span>
</VirtualHost>
</code></p>
</div>
<p>任何不是针对<code>172.20.30.50</code>的请求都将由主服务器来伺服。而提交给<code>172.20.30.50</code>却没有主机名或没有"<code>Host:</code>"头的请求,都将由<code>www.example.com</code>伺服。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="intraextra" id="intraextra">在不同的IP的地址(比如一个内部和一个外部地址)上提供相同的内容</a></h2>
<p>服务器有两个IP地址(<code>192.168.1.1</code>和<code>172.20.30.40</code>)。这个机器位于内部(局域网)网络和外部(广域网)之间。在外部,域名<code>server.example.com</code>指向外部地址(<code>172.20.30.40</code>),而在内部则指向内部地址(<code>192.168.1.1</code>)。</p>
<p>服务器可以为来自内部和外部的请求提供同样的内容,您只需要一个<code><VirtualHost></code>配置段就可以了。</p>
<div class="example"><h3>服务器配置</h3><p><code>
NameVirtualHost 192.168.1.1<br />
NameVirtualHost 172.20.30.40<br />
<br />
<VirtualHost 192.168.1.1 172.20.30.40><br />
<span class="indent">
DocumentRoot /www/server1<br />
ServerName server.example.com<br />
ServerAlias server<br />
</span>
</VirtualHost>
</code></p></div>
<p>现在,从不同的网络提交的请求都会由同一个<code><VirtualHost></code>段来伺服。</p>
<div class="note">
<h3>注意</h3><p>在内网中,您可以使用<code>server</code>这个名字来代替<code>server.example.com</code>这个全名。</p>
<p>跟上面一样,在上述的例子里,您可以用"<code>*</code>"来代替具体的IP地址,这样就可以对所有的地址都返回相同的内容了。</p>
</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="port" id="port">在不同的端口上运行不同的站点</a></h2>
<p>如果您想让同一个IP的不同端口伺服多个域名。您可以借助在<code>NameVirtualHost</code>指令中定义端口的方法来达到这个目的。如果您想使用不带"<code>name:port</code>"的<code><VirtualHost name:port></code>或是直接用<code>Listen</code>指令,您的配置将无法生效。</p>
<div class="example"><h3>服务器配置</h3><p><code>
Listen 80<br />
Listen 8080<br />
<br />
NameVirtualHost 172.20.30.40:80<br />
NameVirtualHost 172.20.30.40:8080<br />
<br />
<VirtualHost 172.20.30.40:80><br />
<span class="indent">
ServerName www.example.com<br />
DocumentRoot /www/domain-80<br />
</span>
</VirtualHost><br />
<br />
<VirtualHost 172.20.30.40:8080><br />
<span class="indent">
ServerName www.example.com<br />
DocumentRoot /www/domain-8080<br />
</span>
</VirtualHost><br />
<br />
<VirtualHost 172.20.30.40:80><br />
<span class="indent">
ServerName www.example.org<br />
DocumentRoot /www/otherdomain-80<br />
</span>
</VirtualHost><br />
<br />
<VirtualHost 172.20.30.40:8080><br />
<span class="indent">
ServerName www.example.org<br />
DocumentRoot /www/otherdomain-8080<br />
</span>
</VirtualHost>
</code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="ip" id="ip">建立基于IP的虚拟主机</a></h2>
<p>一个有两个IP地址(<code>172.20.30.40</code>和<code>172.20.30.50</code>)分别对应域名<code>www.example.com</code>和<code>www.example.org</code>的配置如下:</p>
<div class="example"><h3>服务器配置</h3><p><code>
Listen 80<br />
<br />
<VirtualHost 172.20.30.40><br />
<span class="indent">
DocumentRoot /www/example1<br />
ServerName www.example.com<br />
</span>
</VirtualHost><br />
<br />
<VirtualHost 172.20.30.50><br />
<span class="indent">
DocumentRoot /www/example2<br />
ServerName www.example.org<br />
</span>
</VirtualHost>
</code></p></div>
<p>如果存在主服务器,那么对没有出现在任一个<code><VirtualHost></code>段中的请求(比如,对<code>localhost</code>的请求)都会由主服务器来伺服。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="ipport" id="ipport">混用基于端口和基于IP的虚拟主机</a></h2>
<p>如果您的服务器有两个IP地址(<code>172.20.30.40</code>和<code>172.20.30.50</code>)分别对应域名<code>www.example.com</code>和<code>www.example.org</code> 。对每个域名,您都希望在80端口和8080端口发布您的网站。您可以这样配置:</p>
<div class="example"><h3>服务器配置</h3><p><code>
Listen 172.20.30.40:80<br />
Listen 172.20.30.40:8080<br />
Listen 172.20.30.50:80<br />
Listen 172.20.30.50:8080<br />
<br />
<VirtualHost 172.20.30.40:80><br />
<span class="indent">
DocumentRoot /www/example1-80<br />
ServerName www.example.com<br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -