现在的位置: 首页 > 综合 > 正文

Apache Virtual Host Configuration

2014年10月02日 ⁄ 综合 ⁄ 共 2958字 ⁄ 字号 评论关闭

Preface

在浏览本文之前,请保证已经安装好Apache HTTP Server。

Environment

OS: Windows XP

Web Server: Apache HTTP Server 2.2.4

Introduction

本文主要讲述在Apache HTTP Server上如何设置Virtual Host(虚拟主机),使得同一IP通过不同域名访问可以访问到Server上的不同站点。

 

Section 1 - Requirement:

如果通过正常的IP只能仅仅访问Host上的一个Website的话,Resource将会大量浪费。例如你正用自己的Host来跑一个WordPress的Blog System,同时你也想打算用同一台Host来跑一个C2C的System,Host的IP只有一个,如何让两种不同的visitor通过同一IP访问到两个不同的System呢?这就需要我们在Server上通过设置Virtual Host(虚拟主机)来实现。


Section 2 - Solution:

(1) 首先refer以下这个Website:

      http://httpd.apache.org/docs/2.2/vhosts/

      大概了解一下Virtual Host的原理以及相关的设置步骤。实际上offical的document已经写得很到位,请细心琢磨。

(2) 如果你利用Apache2.2/conf/extra/httpd-vhosts.conf来进行设置,必须记得要把httpd.conf中Include conf/extra/httpd-vhosts.conf前的#号去掉,使其生效。

(3) 你很可能会遇到403 Forbidden的问题,因为在httpd.conf中有如下directives

  1. <Directory />
  2.     Options FollowSymLinks
  3.     AllowOverride None
  4.     Order deny,allow
  5.     Deny from all
  6.     Satisfy all
  7. </Directory>

      Deny from all就是引致问题的元凶,但是我们这里就不去修改httpd.conf中的这段。因为我们可以针对不同的Virtual Host上设置不同的访问权限,具体步骤请看下一段。

(4) 为了更清晰地说明问题,所以举一具体例子说明。现在打算设置两台Virtual Host,使得visitor可以通过evilkiller.com这个域名来访问"E:/Project/wordpress"目录下的Blog System,通过evilkiller.net这个域名来访问"E:/Project/c2c"目录下的C2C System。首先打开httpd-vhosts.conf,根据已有的两个默认范例修改成如下代码。第一台VH实际上是本人用于作默认指向,www.default.com只是虚名,当visitor通过IP或者其它非本人指定的域名访问我的Host的时候,将其转向本人设定的默认Website,即在"D:/Apache Software Foundation/Apache2.2/htdocs"这个目录下的Website,非关键可省略。而关键的两台HV其实就如下一样简单,对DocumentRoot(Website存放的位置)和ServerName(所用域名)进行设置就可以了,而Directory段就是用于权限控制的,关于deny和allow的order问题以及安全性问题就不在这里讨论了,总之将之前的Deny from all改成Allow from all就不会遇到403 Forbidden问题了。另外*号代表Sever接受通过任何IP地址对Host的访问,主要是针对部分使用Dynamic IP的Host。

  1. <VirtualHost *:80>
  2. #   ServerAdmin webmaster@dummy-host.evilkiller.com
  3.     DocumentRoot "D:/Apache Software Foundation/Apache2.2/htdocs"
  4.     ServerName www.default.com
  5.     <Directory />
  6.         Options FollowSymLinks
  7.         AllowOverride None
  8.         Order allow,deny
  9.         Allow from all
  10.         Satisfy all
  11.     </Directory>
  12. #   ServerAlias www.dummy-host.evilkiller.com
  13. #   ErrorLog logs/dummy-host.evilkiller.com-error_log
  14. #   CustomLog logs/dummy-host.evilkiller.com-access_log common
  15. </VirtualHost>
  16. <VirtualHost *:80>
  17. #   ServerAdmin webmaster@dummy-host.evilkiller.com
  18.     DocumentRoot "E:/Project/wordpress"
  19.     ServerName evilkiller.com
  20.     <Directory />
  21.         Options FollowSymLinks
  22.         AllowOverride None
  23.         Order allow,deny
  24.         Allow from all
  25.         Satisfy all
  26.     </Directory>
  27. #   ServerAlias www.dummy-host.evilkiller.com
  28. #   ErrorLog logs/dummy-host.evilkiller.com-error_log
  29. #   CustomLog logs/dummy-host.evilkiller.com-access_log common
  30. </VirtualHost>
  31. <VirtualHost *:80>
  32. #   ServerAdmin webmaster@dummy-host2.evilkiller.com
  33.     DocumentRoot "E:/Project/c2c"
  34.     ServerName evilkiller.net
  35.     <Directory />
  36.         Options FollowSymLinks
  37.         AllowOverride None
  38.         Order allow,deny
  39.         Allow from all
  40.         Satisfy all
  41.     </Directory>
  42. #   ErrorLog logs/dummy-host2.evilkiller.com-error_log
  43. #   CustomLog logs/dummy-host2.evilkiller.com-access_log common
  44. </VirtualHost>

PS:如有漏洞或者问题请在这里提出,方便进行探讨。

抱歉!评论已关闭.