apache Httpd.conf虚拟主机配置教程 - sqlgun

时间:2024-02-20 09:46:24

apache Httpd.conf虚拟主机配置教程

Httpd.conf虚拟主机配置教程

原创:朱品子

一、introduce

httpd.conf是Apache的配置文件,Apache中的常见配置主要都是通过修改该文件来实现的,该文件更改后需要重启Apache服务使更改的配置生效(CLI下面:httpd.exe -k restart -n Apache2.2 )。下面是httpd.conf文件在安装后的默认设置,与Apache网络和系统相关的选项如下所示。

 

1.ServerRoot:设置Apache安装目录

 

俺的os是win2003

ServerRoot "d:/AppServ/Apache2.2"

 

该参数用于指定Apache软件安装的根目录,如果安装时不指定其他目录的话,则Apache默认就是安装在x:/AppServ/Apache2.2目录下。参数格式如下所示。

 

ServerRoot [目录的绝对路径]

 

2.Listen:设置Apache默认监听端口

如果你装了iis,80端口会冲突,系统会报错,因此你可以使用>1024的保留端口。

 

Listen 8080

 

该参数用于指定Apache所监听的端口,默认情况下Apache的监听端口为80,即WWW服务的默认端口。在服务器有多个IP地址的情况下,Listen参数还可以用于设置监听的IP地址。参数格式如下所示。

 

Listen [端口/IP地址:端口]

 

下面是一个示例。

 

#设置Apache服务监听IP192.168.1.111的80端口

 

Listen 192.168.1.111:80

 

3.使用ServerAdmin参数设置网站管理员的邮箱地址

ServerAdmin xiaoqumo@gmail.com

 

该参数用于指定Web管理员的邮箱地址,这个地址会出现在系统连接出错的时候,以便访问者能够及时通知Web管理员。参数格式如下所示。

 

ServerAdmin [邮箱地址]

 

4.DocumentRoot参数

该参数用于指定Web服务器上的文档存放的位置,在未配置任何虚拟主机或虚拟目录的情况下,用户通过http访问Web服务器,所有的输出资料文件均存放在这里。DocumentRoot参数的格式如下所示。

 

DocumentRoot [目录的绝对路径]

 

二、与Apache文件和目录权限相关的选项如下所示:

1.使用DocumentRoot参数设置网站默认根目录

LINUX下:DocumentRoot "/usr/local/apache2/htdocs"

WINNT下:DocumentRoot "d:/AppServ/www"

2.使用Directory段设置根目录权限

注意“/”是表示根目录

<Directory />

    Options FollowSymLinks ExecCGI Indexes

    AllowOverride None

    Order deny,allow

Deny from all

    Satisfy all

</Directory>

 

这个设置里面包含5大属性:

u       Options

      可以设置:

  •  All:用户可以在此目录中做任何事情。
  •  FollowSymLinks :服务器可以使用符号链接指向文件和目录
  •  ExecCGI:允许在此目录执行CGI程序。
  •  Indexes:服务器可生成此文件夹的目录列表。
  •  None:不允许访问此目录。

u       AllowOverride根据设定的值决定是否读取.htaccess文件,来改变原来所设置的权限:

      可以设置:

  • None:不读取.htaccess文件
  • All:读取.htaccess文件,修改原来的访问权限。         

u       Order :用于指定allow  和deny的先后秩序。

u       Allow|:设定允许访问apache服务器的主机

  • Allow from all:允许所有主机的访问。
  • Allow from 127.0.0.1:这是允许访问主机的ip。

u       Deny:设定禁止访问apache服务器的主机

  • Deny from all:禁止所有主机的访问。
  • Deny from 192.168.0.1:这是允许访问主机的ip。

3.使用Directory段设置"d:/AppServ/www"目录权限

<Directory ""d:/AppServ/www"">

 

    Options Indexes FollowSymLinks MultiViews ExecCGI

    AllowOverride All

    Order allow,deny

    Allow from all

</Directory>

 

4.设置默认首页依次为index.html、index.php、index.htm

<IfModule dir_module>

 

    DirectoryIndex index.html index.php index.htm

 

</IfModule>

5.ht后缀文件的访问权限控制

 

<FilesMatch "^/.ht">

 

    Order allow,deny

 

    Deny from all

 

</FilesMatch>

 

 

6.使用Directory段设置d:/AppServ/www/cgi-bin目录权限

 

<Directory "d:/AppServ/www/cgi-bin">

 

    AllowOverride None

 

    Options None

 

    Order allow,deny

 

    Allow from all

 

</Directory>

 

DefaultType text/plain

 

三、虚拟主机

一个web server可以支持多个站点,apache在这个方面也不会落后。在apache里,使用<virtualhost>来配置标识的虚拟主机。

Apache支持两种类型的虚拟主机,一种是基于ip的一种是基于域名的。

 

1.NameVirtualHost:

设置一个虚拟主机,记住每个虚拟主机的名称都是唯一的。

格式:NameViryualHost [URL]

 

2.基于域名的虚拟主机

假设你只有一个ip地址,如果你想支持多个站点,怎么办?如果你用过IIS,那么你会有使用主机头来对应站点的经验。那么apache同样也能这样设置,但是需要在httpd.conf里用记事本设置。

下面来看一个配置的例子:(我这里不使用80端口是由于我安装的iis占用了80)

ServerName:sf.myproject:8080

Listen:8080

#以上是服务器默认的

#以下是自己配置的部分

NameVirtualHost  *:8080

<VirtualHost *.8080>

  ServerName www.myproject.com

  DocumentRoot "d:\develop\myproject"

  DirectoryIndex index.php

  < Directory>

     AllowOverride All

     Allow from all

  </ Directory>

<VirtualHost>

 

<VirtualHost *.8080>

  ServerName www.yourproject.com

  DocumentRoot "d:\develop\yourproject"

  DirectoryIndex index.php

  < Directory>

     AllowOverride All

     Allow from all

  </ Directory>

<VirtualHost>

 

    VirtualHost参数必须和NameVirtualHost相一致。*.8080,是指对应运行于本服务器的所有ip地址(一般为多网卡服务器)。

    本例中的documentroot都没有放在网站默认根目录,而放在自定义的文件夹中,这样的目的也是出于安全性考虑。

    本例中在virtualhost中分别设置了两个serverName。这个就等同于iis中的主机头。当外部通过www.myproject.com来访问本服务器web时,会自动分配到DocumentRoot为d:\develop\myproject这个虚拟主机,而通过www.yourproject.com来访问本服务器web时,会  自动分配到DocumentRoot为d:\develop\yourproject这个虚拟主机,而通过www.yourproject.com来访问本服务器web时,会自动分配到DocumentRoot为d:\develop\yourproject这个虚拟主机。当外部通过域名访问到本服务器时,首先会对应serverName,再决定访问哪个站点,如果都不对应,则访问第一个站点(第一个为默认站点)。

当然,由于我们的端口是8080,那么访问myproject 站点时,必须使用http://www.myproject.com:8080/这个url才能访问,否则会访问到80端口。

虚拟主机的配置会导致我们的主服务器不能访问了,很多人都发现了。如果要想能够访问,你必须添加一台虚拟主机,配置与主服务器相同。如果你想让它成为默认虚拟主机的话,把它放在第一个。

当然,通过外部访问的url,需要在dns中设置,如果在internet上,需要向isp申请相应的域名,然后解析到本服务器。如果不想看见端口号,可以使用url转发。

有些本地开发环境下的用户,使用host文件解析一个域名到127.0.0.1,这里注意,ip后面不要带端口号哦。

3.基于ip的虚拟主机

   写到这里更正一下,这里说的基于ip实质是采用的一种基于端口的,由于很多用户的服务器都是租用的,那么基于多ip不是很现实,单ip多端口成为现实。

  下面看个例子:

Listen 8081

<virtualHost  192.168.0.1:8081>

  DocumentRoot "d:\develop\yourproject"

  DirectoryIndex index.php

  < Directory>

     AllowOverride All

     Allow from all

  </ Directory>

</VirtualHost>

 

Listen 8082

<virtualHost  192.168.0.1:8082>

  DocumentRoot "d:\develop\myproject"

  DirectoryIndex index.php

  < Directory>

     AllowOverride All

     Allow from all

  </ Directory>

</VirtualHost>

 

这里很清楚了,当使用192.168.0.1:8081和使用192.168.0.1:8082将分别访问到yourproject站点和myproject站点。如果只有一个ip,80端口又无法使用,又无法将主机名称加入dns,或者开发环境,都适用这种方式。