Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830324
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: 架构设计与优化

2013-05-23 00:53:37

Httpd.conf虚拟主机配置教程 

一、introduce 

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

1.ServerRoot:设置Apache安装目录 

ServerRoot "d:/AppServ/Apache2.2"  

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

ServerRoot [目录的绝对路径]  


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

如果你装了iis80端口会冲突,系统会报错,因此你可以使用>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段设置根目录权限 
注意“/”是表示根目录
 
Options FollowSymLinks
ExecCGI Indexes    
AllowOverride None    
Order deny,allow 
Deny from all    
Satisfy all
 
这个设置里面包含5大属性:
1 Options   
可以设置: 
?  All:用户可以在此目录中做任何事情。 
?  FollowSymLinks :服务器可以使用符号链接指向文件和目录

2 ExecCGI:允许在此目录执行CGI程序   可以设置: 
?  Indexes:服务器可生成此文件夹的目录列表。
?  None:不允许访问此目录。 

3 AllowOverride根据设定的值决定是否读取.htaccess文件,来改变原来所设置的权限   可以设置: 
? None:不读取.htaccess文件
? All:读取.htaccess文件,修改原来的访问权限。
          
4 Order :用于指定Allow和Deny的先后秩序。
    Allow:设定允许访问apache服务器的主机 
    ? Allow from all:允许所有主机的访问。 
    ? Allow from 127.0.0.1:这是允许访问主机的ip。
    Deny:设定禁止访问apache服务器的主机 
    ? Deny from all:禁止所有主机的访问。 
    ? Deny from 192.168.0.1:这是禁止访问主机的ip。 

3.使用Directory段设置"d:/AppServ/www"目录权限 
 
Options Indexes FollowSymLinks
MultiViews ExecCGI    
AllowOverride All    
Order allow,deny    
Allow from all

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

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

   
    Order allow,deny  
    Deny from all  
  

6.使用Directory段设置d:/AppServ/www/cgi-bin目录权限 
   
    AllowOverride None  
    Options None  
    Order allow,deny  
    Allow from all  
 
DefaultType text/plain  
三、虚拟主机 
一个web server可以支持多个站点,apache在这个方面也不会落后。在apache里,使用来配置标识的虚拟主机。 
Apache支持两种类型的虚拟主机,一种是基于ip的一种是基于域名的。
 
1.NameVirtualHost: 
设置一个虚拟主机,记住每个虚拟主机的名称都是唯一的。 
格式:NameViryualHost [URL]  

2.基于域名的虚拟主机 
假设你只有一个ip地址,如果你想支持多个站点,怎么办?如果你用过IIS,那么你会有使用主机头来对应站点的经验。那么apache同样也能这样设置,但是需要在httpd.conf里用记事本设置。 
下面来看一个配置的例子:(我这里不使用80端口是由于我安装的iis占用了80) ServerName:sf.myproject:8080 Listen:8080 
#以上是服务器默认的 #以下是自己配置的部分 NameVirtualHost  *:8080  
  ServerName
  DocumentRoot "d:\develop\myproject"   DirectoryIndex index.php   < Directory> 
     AllowOverride All      Allow from all    
 
  ServerName
  DocumentRoot "d:\develop\yourproject"   DirectoryIndex index.php   < Directory> 
     AllowOverride All      Allow from all    
    VirtualHost参数必须和NameVirtualHost相一致。*.8080,是指对应运行于本服务器的所有ip地址(一般为多网卡服务器)。 
    本例中的documentroot都没有放在网站默认根目录,而放在自定义的文件夹中,这样的目的也是出于安全性考虑。 
    本例中在virtualhost中分别设置了两个serverName。这个就等同于iis中的主机头。当外部通过来访问本服务器web时,会自动分配到DocumentRoot为d:\develop\myproject这个虚拟主机,而通过来访问本服务器web时,会  自动分配到DocumentRoot为d:\develop\yourproject这个虚拟主机,而通过来访问本服务器web时,会自动分配到DocumentRoot为
d:\develop\yourproject这个虚拟主机。当外部通过域名访问到本服务器时,首先会对应
serverName,再决定访问哪个站点,如果都不对应,则访问第一个站点(第一个为默认站点)。 
当然,由于我们的端口是8080,那么访问myproject 站点时,必须使用http://:8080/这个url才能访问,否则会访问到80端口。 
虚拟主机的配置会导致我们的主服务器不能访问了,很多人都发现了。如果要想能够访问,你必须添加一台虚拟主机,配置与主服务器相同。如果你想让它成为默认虚拟主机的话,把它放在第一个。 
当然,通过外部访问的url,需要在dns中设置,如果在internet上,需要向isp申请相应的域名,然后解析到本服务器。如果不想看见端口号,可以使用url转发。 
有些本地开发环境下的用户,使用host文件解析一个域名到127.0.0.1,这里注意,ip后面不要带端口号哦。
 
3.基于ip的虚拟主机 
   写到这里更正一下,这里说的基于ip实质是采用的一种基于端口的,由于很多用户的服务器都是租用的,那么基于多ip不是很现实,单ip多端口成为现实。   下面看个例子: Listen 8081 
 
  DocumentRoot "d:\develop\yourproject"   DirectoryIndex index.php   < Directory> 
     AllowOverride All      Allow from all  
 
Listen 8082 
 
  DocumentRoot "d:\develop\myproject"   DirectoryIndex index.php   < Directory> 
     AllowOverride All      Allow from all  
 
这里很清楚了,当使用192.168.0.1:8081和使用192.168.0.1:8082将分别访问到yourproject站点和myproject站点。如果只有一个ip,80端口又无法使用,又无法将主机名称加入dns,或者开发环境,都适用这种方式。
阅读(1794) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~