`
walksing
  • 浏览: 217668 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Apache下的开设虚拟主机设置--添加站点2008-01-07 20:27Apache下的开设虚拟主机设置--添加站点

 
阅读更多
Apache下的开设虚拟主机设置--添加站点2008-01-07 20:27Apache下的开设虚拟主机设置--添加站点

摘要:本文介绍了WWW服务器的虚拟主机的工作原理,讨论了在Apache WWW服务器下的各种虚拟主机、尤其是大规模虚拟主机的设置技术,并比较了各种方式的特点。
关键词:Apache WWW Virtual Hosting 虚拟主机

一、WWW服务器虚拟主机原理
WWW服务器虚拟主机是指使用一台物理机器,充当多个主机名的WWW服务器。比如由一台机器同时提供http://www.company1.com, http://www.company2.com 等的WWW服务,而浏览这些WWW站点的用户感觉不到这种方式下跟由不同的机器提供不同的服务有什么差别。

使用WWW虚拟主机的好处在于,一些小规模的网站,通过跟其他网站共享同一台物理机器,可以减少系统的运行成本,并且可以减少管理的难度。另外,对于个人用户,也可以使用这种虚拟主机方式来建立有自己独立域名的WWW服务器,目前国内有很多公司都提供这种免费的服务。


WWW虚拟主机有两种工作方式:

1.1 基于IP地址的虚拟主机方式
这种方式下,不同的主机名解析到不同的IP地址,提供虚拟主机服务的机器上同时设置有这些IP地址。服务器根据用户请求的目的IP地址来判定用户请求的是哪个虚拟主机的服务,从而进一步的处理。
缺点:基于IP地址的虚拟主机方式需要在提供虚拟主机服务的机器上设立多个IP地址,既浪费了IP地址,又限制了一台机器所能容纳的虚拟主机数目。因此这种方式越来越少使用。但是,这种方式是早期使用的HTTP 1.0协议唯一支持的虚拟主机方式。

1.2 基于主机名的虚拟主机方式
由于基于IP地址的虚拟主机方式有如上的缺点,HTTP 1.1协议中增加了对基于主机名的虚拟主机的支持。具体说,当客户程序向WWW服务器发出请求时,客户想要访问的主机名也通过请求头中的"Host:"语句传递给WWW服务器。比如,www.company1.com, www.company2.com 都对应于同一个IP地址(即由同一台机器来给这两个虚拟域名提供服务),客户程序要存取http://www.company1.com/index.html时,发出的请求头中包含有如下的内容:
GET /index.html HTTP/1.1
Host: www.company1.com
…..
WWW服务器程序接收到这个请求后,可以通过检查"Host:"语句,来判定客户程序请求是哪个虚拟主机的服务,然后再进一步的处理。
优点:提供虚拟主机服务的机器上只要设置一个IP地址,理论上就可以给无数多个虚拟域名提供服务,占用资源少,管理方便。目前基本上都是使用这种方式来提供虚拟主机服务。
缺点:在早期的HTTP 1.0版本下不能使用。实际上现在使用的浏览器基本上都支持基于主机名的虚拟主机方式。


二、Apache服务器下的虚拟主机设置技术

2.1 Apache WWW服务器简介
Apache WWW服务器是目前Internet上使用最广的WWW服务器软件。通过灵活的配置,它可以完成几乎您想得到的功能。本文主要介绍在Apache 下设置各种虚拟主机的方法。

2.2 Apache WWW服务器下基于IP地址的虚拟主机设置
使用这种虚拟主机方式,首先要在服务器上为每个虚拟主机单独设置一个IP地址。这些IP地址可以通过增加多个网卡或者在一个网卡上设立多个IP地址来完成。有了多个IP地址后,可以采用以下两种方式之一来设置Apache:
2.2.1 为每个虚拟主机运行一份Apache
采用这种方式,每一份Apache程序可以以单独的用户运行,因此各个虚拟主机之间互不影响。设置这种虚拟主机时,只要为每一份Apache设置一套配置 文件就可以了,唯一需要注意的是:必须使用"Listen"语句,强制每一份Apache 仅仅在属于"自己"的IP地址上接收服务请求。
优点:各个虚拟主机之间互不干扰,安全性高。
缺点:占用系统资源较多。

2.2.2多个虚拟主机共享同一份Apache
采用这种方式,各个虚拟主机共享同一份Apache,因此各个虚拟主机之间有一定的影响,尤其是执行CGI程序时,可能会带来一些严重的安全问题。设置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可

<VirtualHost www.company1.com>
DocumentRoot /home/company1

</VirrualHost>

优点:占用系统资源比上一种方式少。
缺点:安全性低,每个虚拟主机仍然需要占用一个IP地址。

2.3 Apache WWW服务器下简单的基于名字的虚拟主机设置
这种方式下,各个虚拟主机共享同一份Apache,因此有CGI程序运行时,安全性也不高。设置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可

NameVirtualHost 111.222.33.44 ; #在这个IP地址接收虚拟主机的服务
<VirtualHost 111.222.33.44>
ServerName www.company1.com
DocumentRoot /www/company1
</VirtualHost>
<VirtualHost 111.222.33.44>
ServerName www.company2.com
DocumentRoot /www/company2
</VirtualHost>

优点:只要一个IP地址就可以提供大量的虚拟主机服务。
缺点:安全性差。维护这些虚拟主机时需要更改配置文件,并且需要重新启动Apache进程才能起作用。因此不适合进行大规模的虚拟主机服务。

2.4 Apache WWW服务器下基于名字的大规模虚拟主机设置
所谓大规模虚拟主机,是指能够提供非常多的虚拟主机服务,比如能提供超过数十万个域名的虚拟主机服务。如果使用以上讨论的方法,是很难完成的。实现这种服务的一种方式是利用Apache 功能强大的URL重写功能。下面以一个实例来说明这种方式。

2.4.1 Apache中URL重写功能
Apache 1.2及以后版本都有URL重写(Rewrite)功能。简单的说,URL重写功能就是在Apache接收到请求后,在处理的过程中能根据预先设定的规 则,对请求中的URL进行修改。这些规则主要由正规表达式组成。重写依赖于输入的URL、各种服务器端环境变量、HTTP请求头中的内容、时间,甚至可以 通过外部的程序来使用数据库中的信息来帮助重写。
URL重写功能非常强大,通过URL重写,可以使Apache完成异常复杂的功能。当然,URL重写功能本身也比较复杂,关于URL重写功能的详细说明可以参看Apache 的随机文档。

2.4.2 使用Apache中URL重写功能实现基于名字的大规模虚拟主机设置
假设机器www.home.com提 供名字形如abcde.home.com、hijk.home.com等的大规模虚拟主机服务。其中虚拟主机名必须是字母或数字,并且长度至少为3。为了 防止一个目录下文件或子目录太多而对性能产生很大的负面影响,对用户的目录按照名字进行分级划分,如虚拟主机abcde.home.com的相关文件存放 在目录/member/ab/de/abcde下面。其中"ab"、"de"分别是"abcde"的前边两个字符和最后两个字符。当用户请求http://abcde.home.com时,系统应该返回/member/ab/de/abcde下面的文件。下面是为了完成这种功能需要进行的设置:

1. 对域名服务器的设置
假设www.home.com的IP地址为202.103.190.57,在域名服务器DNS的home.com数据文件中增加一行:
--------------------------------------------------------------------------------
* IN A 202.103.190.57
--------------------------------------------------------------------------------
这样,所有 *.home.com的IP地址都会被解析为202.103.190.57,就没有必要为各个虚拟主机分别进行设置。

2. 对Apache的设置
首先使用命令"httpd -l"检查mod_rewrite模块是否已经编译到Apache中,如果没有,重新编译Apache。
然后在Apache的配置文件httpd.conf中增加如下语句(其中以"#"开头的为注释):
--------------------------------------------------------------------------------

#禁止使用机器的正式名
UseCanonicalName off
#使能重写功能
RewriteEngine on
RewriteMap lowercase int:tolower
# 为安全考虑,对CGI程序不进行重写
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# 对www.home.com不重写,其他的重写
RewriteCond ${lowercase:%{HTTP_HOST}} !^www.home.com(.*)$
RewriteCond ${lowercase:%{HTTP_HOST}} ^[a-z0-9-]+.home.com(.*)$
# 首先把机器名改为小写,添加到请求的文件路径前,并继续处理
RewriteRule ^(.+) ${lowercase:%{HTTP_HOST}}$1 [C]
# 重写请求
RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]).home.com([.]*)/(.*) /member/$1$2/$2$3/$1$2$3/$5
RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]*)([a-z0-9])([a-z0-9]).home.com([.]*)/(.*) /member/$1$2/$4$5/$1$2$3$4$5/$7

---------------------------------------------------------------------------------
优点:只要一个IP地址就可以提供大量的虚拟主机服务,维护方便。
缺点:安全性低。上例为了增强安全性,禁止运行用户自己的CGI程序。

2.5 Apache WWW服务器下的重定向虚拟主机设置
重定向虚拟主机是指仅仅提供重定向功能,而不实际存放用户主页数据的虚拟主机。比如,某站点有多个镜像服务器,假设为www1.user.com、 www2.user.com,…wwwn.user.com。这些服务器放在不同的网络上,分布于各地的客户访问这些服务器的速度也互不相同。而站点www.home.com通过虚拟域名user.home.com为这些镜像的服务器提供虚拟主机服务。当客户访问http://user.home.com时,www.home.com根据用户的IP地址、收集到的网络拓扑结构信息,把客户重定向到对该客户来说访问速度最快的站点。
重定向虚拟主机服务也可以通过使用URL重写功能来完成。这里仅给出简单的重写规则:
------------------------------------------------------------------------------------

RewriteRule ^([a-z0-9]+).home.com([.]*)/(.*) /www/cgi-bin/nph-redirect.cgi/$1/$3 [T=application/x-httpd-cgi,L]

------------------------------------------------------------------------------------
其中,nph-redirect.cgi为一个CGI程序,为了实现自动重定向,它需要产生完整的HTTP 应答头信息。该程序通过环境变量PATH_INFO得到用户请求的URL,通过环境变量REMOTE_ADDR得到用户的IP地址,并根据网络拓扑情况生 成重定向信息,返回给客户。

参考文献:
1.Apache 1.3 User"s Guide http://www.apache.org

Virtual Hosting Setup Using Apache
Abstract:
There are two types of WWW Virtual Hosting, IP-based and Name-based. Those two types are introduced in this thesis, followed by some methods about WWW Virtual Hosting configuration under Apache and the difference between them is analyzed.


=======================================
在Windows上设置简单的虚拟主机(已经验证通过)  
[Apache]设置虚拟主机2007年08月09日 星期四 15:15在Windows上设置简单的虚拟主机。需要2个文件:

hosts - IP地址与主机对应表,相当于本机的DNS记录。通常位于C:/Windows/System32/drivers/etc下
httpd.conf - Apache服务器的配置文件。

在hosts文件下修改

127.0.0.1        localhost
127.0.0.1        www.test.com
127.0.0.1        admin.test.com
127.0.0.1        bbs1.test.com
127.0.0.1        bbs2.test.com

------------------------------------------------------------------

在httpd.conf下添加

DocumentRoot "D:/webserver/home"

<Directory />
     Options FollowSymLinks
     AllowOverride None
     Order deny,allow
     Deny from all
</Directory>

<Directory "D:/webserver/home">
     Options Indexes FollowSymLinks Includes ExecCGI

     AllowOverride All
     Order allow,deny
     Allow from all
</Directory>

# 以下是添加的虚拟主机部分,其中,DocumentRoot必须是可以访问的,
# 在前面已经配置了该目录及其子目录的可访问性。

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
     DocumentRoot D:/webserver/home/admin
     ServerName admin.test.com
</VirtualHost>

<VirtualHost 127.0.0.1>
     DocumentRoot D:/webserver/home/bbs1
     ServerName bbs1.test.com
</VirtualHost>

<VirtualHost 127.0.0.1>
     DocumentRoot D:/webserver/home/bbs1
     ServerName bbs1.test.com
</VirtualHost>

------------------------------------------------------------------

这里只是简单的设置,不过很有效。

分享到:
评论

相关推荐

    apache三种虚拟主机的配置

    根据给定文件的信息,本文将详细介绍Apache的三种虚拟主机配置方式:基于名称的虚拟主机(Name-based Virtual Hosts)、基于IP地址的虚拟主机(IP-based Virtual Hosts)以及基于端口的虚拟主机(Port-based Virtual...

    apache虚拟目录和虚拟主机设置详解

    ### Apache虚拟目录和虚拟主机设置详解 #### 一、虚拟目录(Alias) 在Apache服务器配置中,虚拟目录(也称为别名)是一种重要的技术,它允许我们定义一个URL路径,并将其映射到服务器上的实际物理目录。这不仅提高...

    apache虚拟主机配置

    ### Apache虚拟主机配置详解 #### 一、Apache虚拟主机配置概览 Apache是目前最流行的Web服务器之一,它支持多种类型的虚拟主机配置。通过虚拟主机技术,可以在同一台物理服务器上运行多个不同的网站,这对于节省...

    lamp环境配置apache虚拟主机

    此文档适用于lamp环境apache虚拟主机的搭建,使用lamp环境搭建虚拟主机的新手,可以参看此文档。

    linux下apache虚拟主机的配置方法

    在Linux环境下配置Apache虚拟主机是一项关键的服务器管理技能,它允许在同一台物理服务器上运行多个独立的网站,每个网站都拥有自己的域名、文档根目录、错误日志等配置。以下是对给定文件信息中提到的知识点进行的...

    Maven更新失败,Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.1

    在apache-maven-3.5.2/conf/setting.xml中加入以下配置即可解决 alimaven aliyun maven http://maven.aliyun.com/nexus/content/repositories/central/ central junit junit Address/ ...

    apache+svn服务器搭建apache_2.2.11-win32-x86-openssl-0.9.8i.msi、svn-win32-1.5.4

    然后,添加一个虚拟主机配置来托管SVN仓库: ```apache DAV svn SVNPath "C:/svn_repositories/my_repo" AuthType Basic AuthName "My SVN Repository" AuthUserFile "C:/path/to/your/passwd/file" ...

    apache配置虚拟主机代码

    Apache是世界上最流行的Web服务器软件之一,它支持在单个服务器上设置多个独立的域名或站点,这被称为虚拟主机。在Apache中配置虚拟主机允许你在一个物理服务器上运行多个网站,从而提高了资源利用率并降低了运维...

    本地机apache配置基于域名的虚拟主机

    在本教程中,我们将探讨如何在本地计算机上配置Apache以实现基于域名的虚拟主机,这对于开发多站点项目或者进行网站测试非常有用。 首先,我们需要了解什么是基于域名的虚拟主机。在一台物理服务器上,可以设置多个...

    ubuntu下配置apache虚拟主机(原创)

    Ubuntu 下配置 Apache 虚拟主机 在本文中,我们将详细介绍在 Ubuntu 操作系统中配置 Apache 虚拟主机的过程。虚拟主机是指在一台物理服务器上运行多个独立的虚拟服务器,每个虚拟服务器可以有自己的域名、IP 地址和...

    apache_2.0.55-win32-x86-no_ssl.rar

    - 配置Apache通常需要编辑`httpd.conf`配置文件,设置端口号、虚拟主机、日志文件位置等。 - 启动或停止Apache服务,可以在服务管理器中操作,或通过安装目录的`bin`文件夹下的批处理文件。 5. 扩展与安全: 尽管...

    apache_2.4.4-x64-openssl-1.0.1.rar

    3. **虚拟主机**:Apache支持多站点配置,通过虚拟主机功能可以在同一台服务器上运行多个独立的网站,每个网站有自己的域名和配置。 4. **安全设置**:集成OpenSSL意味着Apache可以处理加密连接,但必须正确配置SSL...

    apache_2.0.63-win32-x86-no_ssl.msi

    3. 配置SSL虚拟主机:编辑Apache配置文件(如httpd.conf),添加SSL相关指令,指定证书和私钥的位置。 4. 重启Apache服务:使新的配置生效。 请注意,对于生产环境,保持Apache服务器的更新至关重要,因为旧版本...

    apache_2.0.59-win32-x86-no_ssl

    - Linux下的Apache同样支持虚拟主机和多种工作模式。 4. **服务器软件**: - Apache不仅限于HTTP服务,还可以与其他服务器软件集成,如PHP和MySQL,形成LAMP(Linux, Apache, MySQL, PHP)或WAMP(Windows, ...

    apache_2.2.11-win32-x86-openssl-0.9.8i.zip

    4. **虚拟主机**:如果你打算在一台服务器上托管多个网站,需要配置虚拟主机设置。 5. **安全配置**:开启必要的安全选项,例如限制目录浏览,避免泄露敏感信息。 6. **日志文件**:设置日志文件的位置,以便监控...

    Apache服务器虚拟主机虚拟目录配置

    资源名称:Apache服务器虚拟主机虚拟目录配置   资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

Global site tag (gtag.js) - Google Analytics