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,或者开发环境,都适用这种方式。