黑海豚的直觉 VistaPC.CN

2007年11月1日

Apache虚拟主机和虚拟目录的设置

归类于: Apache, HTTP, Server, Web — 黑海豚 @ 21:40下午

 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 % !^/cgi-bin/
# 对www.home.com不重写,其他的重写
RewriteCond $} !^www.home.com(.*)$
RewriteCond $} ^[a-z0-9-]+.home.com(.*)$
# 首先把机器名改为小写,添加到请求的文件路径前,并继续处理
RewriteRule ^(.+) $} [C]
# 重写请求
RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]).home.com([.]*)/(.*) /member////
RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]*)([a-z0-9])([a-z0-9]).home.com([.]*)/(.*) /member////
———————————————————————————
优点:只要一个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// [T=application/x-httpd-cgi,L]
————————————————————————————
其中,nph-redirect.cgi为一个CGI程序,为了实现自动重定向,它需要产生完整的HTTP 应答头信息。该程序通过环境变量PATH_INFO得到用户请求的URL,通过环境变量REMOTE_ADDR得到用户的IP地址,并根据网络拓扑情况生成重定向信息,返回给客户。
======================================
apache增加主机米名 泛解析的两种方法 , 2006-09-29 17:13:16 by Johnny

1. 虚拟主机配置文件里加ServerName 或者 ServerAlias均可

< VirtualHost *>
ServerName *.upsdn.net
#ServerAlias *.upsdn.net
DocumentRoot /var/www/
< /VirtualHost>

2.用脚本读取 客户端 提交的 Host:
判断后做相应的跳转

=======================================
ReWrite 可用 .htaccess 实现

在 httpd.conf 的最后,添加以下内容:

RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/usr/local/etc/apache/vhost.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1

其中的 /usr/local/etc/apache 是你的 apache 服务器配置文件所在路径,根据实际情况更改。
然后,在这个所在路径的目录下创建一个文件: vhost.map
内容为:

http://www.domain.com /usr/local/www/data-dist/domain
bbs.domain.com /usr/local/www/data-dist/bbs
anyname.domain.com /usr/local/www/data-dist/anyname

以上部分都是:” 域名+空格+绝对路径” 的形式。

最后,在你的网站根目录 /usr/local/www/data-dist 下,创建对应目录:
domain , bbs , anyname 等等,理论上可以无限。

这样,通过浏览器,访问 http://www.domain.com 时,实际上访问的就是 /usr/local/www/data-dist/domain目录下的文件。同理,访问 bbs.domain.com 实际上访问的就是 /usr/local/www/data-dist/bbs 目录下的文件。而且,你可以
随时更改 vhost.map 来增加、删除、修改你的二级域名和所指向的实际路径,不用重启 apache。

================================

第一步:打开apache的配置文件httpd.conf,去掉LoadModule rewrite_module modules/mod_rewrite.so前面的#号。
第二步:打配置文件尾部加上
RewriteEngine on
RewriteMap lowercase int:tolower
#定义映像文件
RewriteMap vhost txt:/apache/vhost/vhost.map
#处理变名
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
这里做基于文件的重新映射
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/cgi-bin/$1

注意:vhost.map文件是域名和空间映像的文件,格式如下: 
http://www.abc.com /vhostusr/www.abc.com
http://www.xyz.com /vhostuser/www.xyz.com
http://www.cccbbbb.net /vhostuser/www.ccbbbb.net
.
.
.
.
(你不会连/vhostuser/www.abc.com目录也没建吧,会报错的哟)
第三步:保存配置文件,重启apache。在开设可绑定域名的空间时,只要在vhost.map文件里添加相应记录,并建立相应文件夹就OK了
其实这个可以用php脚本来完成的,很简单的
注意啊:php_admin_value open_basedir “path,这个选项要配好啊~~新手如果不懂的,就不要动这个了

============================

< VirtualHost ip:80>
rewriteengine on
rewritecond %{HTTP_HOST} [^.]+\.域名\.com$
rewriterule ^(.+) %{HTTP_HOST}$1 [C]
rewriterule ([^.]+)\.域名\.com(.*) /$1$2
其他配置文件
< /VirtualHost>

直接建立子域名名称的文件夹即可使用。不需重启apache。
======================================
  二、基于IP地址的虚拟主机设置(原Web站点10.2.1.102)

  1. 用“记事本”程序打开“httpd.conf”配置文件。此文件存放在Apache服务器安装路径下的“conf”文件夹内。
  2. 光标定位到文件的最后,回车换行,写入如下内容,注意括号及括号内的内容不要写入。
  (设置虚拟主机名和监听端口,方法为:主机地址:端口)

  ServerAdmin bdwjh@163.com
  (设置管理员信箱,就写自己的信箱吧)

  DocumentRoot d:/wwwroot
  (设置网站根目录,原静态网站根目录)

  ServerName www.little.com
  (设置网站域名,没有就随便设置一个)

  ErrorLog logs/ www.little.com -error_log
  (设置日志位置,可以在行首加“#”注释)

  CustomLog logs/ www.little.com -access_log common
  (同上一行说明)

  3. 重复以上内容,可以加入更多虚拟主机。
  4. 保存以上内容,重新启动Apache服务器。

三、虚拟目录设置(显示学校FTP站点内容)

  1. 用“记事本”程序打开“httpd.conf”配置文件。

  2. 找到以下内容,括号内容为笔者所加。

  Alias /icons/ “D:/Apache2/icons/”

  (设置虚拟目录名为“icons”,放到网站根目录的“icons”内,其真实地址为“D:/Apache2/icons/”。请注意,“/icons/”以斜线结束,这就要求输入访问地址时也要输入最后的斜线,如“http://10.2.1.103/icons/”,如果这里省略的话,就可以输入访问地址时省略,不过系统会自动给加上这一斜线。真实地址“D:/Apache2/icons/”因安装位置而不同,需要注意)

  (设置虚拟目录属性)

  Options Indexes MultiViews

  (当没有主页时以是否显示文件及文件夹)

  AllowOverride None

  Order allow,deny

  Allow from all

  3. 回车换行后输入修改的以上内容如下。

  Alias /ziyuan “D:/ftproot/” (访问时可以省略最后的斜线)

  Options Indexes MultiViews

  AllowOverride None

  Order allow,deny

  Allow from all

  4. 保存以上内容,重新启动Apache服务器。

1条评论 »

  1. These products daidaihua slimbionic are not intended to diagnose, treat, cure or prevent any disease. Those seeking treatment for a specific disease should consult a qualified integrative physician prior to using our products if possible. This product slimbionic should be taken as part of a healthy lifestyle and individual results may vary. All of the testimonial statements are genuine. The experience of the customers who have submitted these testimonials are unique and do not guarantee or predict any outcome.

    评论 作者: slimbionic — 2008年04月16日 @ 1:42上午

评论 RSS Feed。 引用 URL

发表评论

Powered by WP Hashcash

Powered by WordPress