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

【转】httpd.conf 详解

2013年12月06日 ⁄ 综合 ⁄ 共 15955字 ⁄ 字号 评论关闭

【转】 http://www.php100.com/html/webkaifa/apache/2009/0418/1192.html

    #. ServerRoot "/usr/local"
      ServerRoot用于指定守护进程httpd的运行目录,httpd启动之后将自动将进程的当前目录
    改变为这个目录。
    
    #. ScoreBoardFile /var/run/httpd.scoreboard
      httpd使用ScoreBoardFile来维护进程的内部数据,故通常不需要修改此参数。
      如果管理员想在一台计算机上运行几个apache服务器,这时每个apache服务器都需要独立
    设置文件httpd.conf,并使用不同的ScoreBoardFile。
    
    #. ResourceConfig conf/srm.conf
       AccessConfig conf/access.conf
      这两个参数用于设置conf/srm.conf和conf/access.conf,兼容老版本的apache。
      如果没有兼容的需要,可将对应的设置文件指定为/dev/null,表示不存在其他的设置文件,
    仅使用httpd.conf一个文件来保存所有的设置选项。
    
    #. PidFile /var/run/httpd.pid
      PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统
    中有多个httpd进程,但只有一个进程为最初启动的进程,它为其它进程的父进程,对这个进程
    发送信号将影响所有的httpd进程。PidFile定义的文件中记录httpd父进程的进程号。
    
    #. Timeout 300
      定义客户端程序和服务器连接的超时间隔,超过这个时间间隔(秒)后,服务器断开与客户机的链接。
      
    #. KeepAlive On
      在HTTP 1.0中,一次连接只能传输一次HTTP请求,而KeepAlive用户支持HTTP 1.1版本的一次连接
    多次传输的功能,即在一次连接中传递多个HTTP请求。
    
    #. MaxKeepAliveRequests 100
      一次连接可以进行的HTTP请求的最大请求次数。将其值设为0,表示在一次连接内进行无限次的传输请求。
      
    #. KeepAliveTimeout 15
      在同一次连接中,等待下一次客户程序请求时间间隔,如果超过了该间隔,服务器断开连接。
      
    #. ThreadsPerChild 50
      每个服务进程中工作线程的数目
      
    #. MaxRequestsPerChild 30
      定义每个子进程处理服务请求次数。默认为30,设置为0表示进行无限次的服务处理。
      使用子进程方式提供服务的web服务器,常用的方式是一个子进程为一次连接服务,带来的问题是每次连接
    都需要生产、退出子进程的系统操作,占用了计算机的大量处理能力。apache采用了一个子进程可以为多次
    连接请求服务的方式,一次连接后子进程并不退出,而是停留在系统中等待下一次服务请求,极大的提高了性能。
      由于在处理过程中子进程要不断的申请和释放内存,次数多了会造成一定的内存垃圾,会影响系统的
    稳定性,并影响系统资源的有效利用。因此在副本处理过一定次数的请求之后,就可以让这个子进程的副本
    退出,再从原始的httpd进程中重新复制一个干净的副本,提高系统的稳定性。
    
    #. Listen 3000
       Listen 12.34.56.78:80
       BindAddress *
      Listen参数指定服务器除了监听80端口之外的其他端口的HTTP请求。
      BindAddress指定服务器监听某个IP地址的HTTP请求,如果未设置,服务器会回应所有IP的请求。
      
    #. ExtendedStatus On
      apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开该选项可以让服务器报告更全面
    的运行状态信息。
    
    #. ServerAdmin you@your.address
      用于配置WWW服务器的管理员的email地址,将在HTTP服务出现错误的条件下返回给浏览器,以便web
    使用者和管理员联系,报告错误。习惯上使用服务器上的webmaster作为WWW服务器的管理员,通过邮件
    服务器的别名机制,将发送到webmaster的电子邮件发送给真正的web管理员。
    
    #. ServerName localhost
      缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解析过程来获得自己的名字,
    但是如果服务器的名字解析有问题(通常反向解析不正确),或者没有正式的DNS名字,可以在这里指定
    IP地址。当ServerName设置不正确的时候,服务器不能正常启动。
      通常一个Web服务器可以具有多个名字,客户浏览器可以使用所有这些名字或IP地址来访问这台服务器,
    但在没有定义虚拟主机的情况下,服务器总是以自己的正式名字回应浏览器。ServerName就定义了Web服务
    器承认的正式名字。如一台服务器名字(在DNS中定义了A类型)为freebsd.example.org.cn,同时为了方便
    记忆还定义了一个别名(CNAME记录)为www.example.org.cn,那么Apache自动解析得到的名字就为
    freebsd.example.org.cn。不管客户端浏览器使用哪个名字发送请求,服务器总是告诉客户程序自己为
    freebsd.example.org.cn。虽然一般不会造成什么问题,但是考虑到某天服务器可能迁移到其他计算机上,
    而只想通过更改DNS中的www别名配置就完成迁移任务,不想让客户在其书签中使用freebsd记录下这个服务器
    的地址,就必须使用ServerName来重新指定服务器的正式名字。、
    
    #. DocumentRoot "/usr/local/www/data"
      定义这个服务器对外发布的超文本文档存放的路径,客户程序请求的URL就被映射为这个目录下的网页文件。
    这个目录下的子目录,以及使用符号连接指出的文件和目录都能被浏览器访问,只是要在URL上使用同样的相
    对目录名。
      符号连接虽然逻辑上位于跟文档目录之下,但实际上可以位于计算机上的任意目录中,因此可以使客户程序
    能访问这些跟文档目录之外的目录,这增加了灵活性但减少了安全性。Apache在目录的访问控制中提供了
    FollowSymLinks选项来打开或关闭支持符号连接的属性。
       <Directory />
       Options FollowSymLinks
       AllowOverride None
       </Directory>
      Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两种方式来实现,一个是在设置文件
    httpd.conf(或access.conf)中针对每个目录进行设置,另一个方法是在每个目录下设置访问控制文件,通常
    访问控制文件名字为.htaccess。虽然使用这两种方式都能够用于控制浏览器的访问控制,然而使用配置文件的
    方法要求每次改动后重启httpd守护进程,比较不灵活,因此主要用于配置服务器系统的整体安全控制策略,而
    使用每个目录下的.htaccess文件配置具体目录的访问控制更为灵活方便。
    
    #. <Directory "H:/web001">
       Options Indexes FollowSymLinks
       AllowOverrid None
       Order allow,deny
       Allow from all
       </DIrectory>
      Directory语句是用来定义目录的访问控制限制的。对系统的根目录进行设置,设置了允许符号连接的选项
    FollowSymLinks,使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里的配置,即不用
    查看这个目录下的相应访问控制文件。
      由于Apache对一个目录的访问控制设置能够被下一级目录继承,因此对根目录的设置将影响到它的下目录。
    注意由于AllowOverride None的设置,使得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看
    以下各级目录下的访问控制文件,直至httpd.conf(或access.conf)中为某个目录指定了允许Allowrride,即
    允许查看访问控制文件。
      由于Apache对目录的访问控制采用继承的方式,如果从根目录就允许查看访问控制文件,那么Apache就必须
    一级一级的查看访问控制文件,会对系统性能造成影响。
      
      文件的访问控制权限可以通过两种方式设置,配置文件是由管理员设置的,每个目录下的访问控制文件是由
    目录的属主设置的,因此管理员可以规定目录的属主是否能覆盖系统在设置文件中的设置,需要使用AllowOverride
    参数进行设置。
      
      AllowOverride的设置值  作用:对每个目录访问控制文件作用的影响
        All 缺省值,使访问控制文件可以覆盖系统配置
        None 服务器忽略访问控制文件的配置
        Options 允许访问控制文件中可以使用Options参数定义目录的选项
        FileInfo 允许访问控制中可以使用AddType等参数设置
        AuthConfig 允许访问控制文件使用AuthName,AuthType等针对每个用户的认证机制,
                   使目录属主能用口令和用户名来保护目录
        Limit 允许对访问目录的客户机的IP地址和名字进行限制
      
      Options设置  服务器访问特性设置
        All 所有的目录特性都有效,缺省状态
        None 所有的目录特性都无效
        FollowSymLinks 允许使用符号连接,这将使浏览器有可能访问文档根目录(DocumentRoot)之外的文档
        SymLinksIfOwnerMatch 只有符号连接的目录与符号连接本身为同一用户所拥有时,才允许访问,增加一些安全性
        ExeCGI 允许这个目录下可以执行CGI程序
        Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得这个目录下没有index.html(或其他索引文件)
                时,能向浏览器发送这个目录下的文件列表
      该例子中还使用了Order、Allow、Deny等参数,这是Limit语句中用来根据浏览器的域名和IP地址来控制访问的一种
    方式。其中Order定义处理Allow和Deny的顺序,而Allow、Deny则是针对名字或IP进行访问控制设置,allow from all
    表示允许所有的客户机访问这个目录,而不进行任何限制。
      Limit语句就是用来针对具体的请求方法设定访问控制的,其中可以使用GET、POST等各种服务器支持的请求方法
    做Limit的参数,来设定不同请求方法的访问控制。一般打开GET、POST、HEAD三种请求方法,屏蔽其他请求方法,
    以增强安全性。Limit语句中可以使用Order、Allow、Deny、Allow和Deny中可以使用的匹配方法对域名和IP进行限制,
    只是对于域名是从后向前匹配,对于IP从前向后匹配。
    
    #. DirectoryIndex index.html
      很多情况下,URL中没有指定文档的名字,而只是给出了一个目录的名,那么Apache就自动返回这个目录下由
    DirectoryIndex定义的文件。可以指定多个文件名字,系统在这个目录下顺序搜索。当所有由DirectoryIndex
    指定的文件都不存在时,Apache可以根据系统的设置,生成这个目录下的所有文件列表,供用户选择。此时该
    目录的访问控制选择中的Indexes选项(Options Indexes)必须打开,以使得服务器能够生成目录列表,否则
    APache拒绝访问。
    
    #. AccessFileName .htaccess
      定义每个目录下的访问控制文件的文件名,缺省为.htaccess,可以通过更改这个文件,改变不同目录的访问
    控制限制。
    
    #. TypesConfig /usr/local/etc/apache/mime.types
      设置保存在不同MIME类型数据的文件名。
    
    #. DefaultType text/plain
      如果Web服务器不能决定一个文档的缺省类型,通常表示文档使用了非标准的后缀,那么服务器就使用
    DefaultType定义的MIME类型将文档发送给客户浏览器。
      这样设置的问题是,如果服务器不能判断出文档的MIME,那么大部分情况下这个文档为一个二进制文档,但
    使用text/plain格式发送回去,浏览器将在内部打开它而不会提示保存。建议将这个设置更改为
    application/octet-stream,这样浏览器将提示用户进行保存。
    
    #. MIMEMagicFile /usr/local/etc/apache/magic
      除了从文件的后缀出发判断文件的MIME类型外,Apache还可以进一步分析文件的一些特征,来判断文件的真实
    MIME类型。这个功能是由mod_mine_magic模块实现的,它需要一个记录各种MIME类型特征的文件,以进行分析判断。
    上面的设置是一个条件语句,如果载入了这个模块,就必须指定相应的标志文件magic的位置。
    
    #. HostnameLookups Off
      通常连接时,服务器仅仅可以得到客户机的IP地址,如果要想获得客户机的主机名,以进行日记记录和提供给
    CGI程序使用,就需要使用HostnameLookups选项,将其设置为On打开DNS反查功能。但是这将使服务器对每次客户
    请求都进行DNS查询,增加了系统开销,使得反应变慢,因此缺省设置为使用Off关闭此选项。关闭后,服务器不
    会获得客户机的主机名,而只能使用IP地址记录客户。
        
    #. ErrorLog /var/log/httpd-error.log
       LogLevel warn
       LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
      LogFormat "%h %l %u %t \"%r\" %>s %b" common
      LogFormat "%{Referer}i -> %U" referer
      LogFormat "%{User-agent}i" agent
      #CustomLog /var/log/httpd-access.log common
      #CustomLog /var/log/httpd-referer.log referer
      #CustomLog /var/log/httpd-agent.log agent
      CustomLog /var/log/httpd-access.log combined
      这里定义了系统日志的形式,对于服务器错误记录,由ErrorLog、LogLevel来定义不同的错误日志文件及记录内容
      对于系统的访问日志,缺省使用CustomLog参数定义日志的位置,缺省使用combined参数指定将所有的访问日志放
    在一个文件中,也可以将不同种类的访问日志放在不同的日志记录文件中,可通过在CustomLog中指定不同的记录类型
    来完成。
      common:普通的对单面请求访问记录
      referer:每个页面的引用记录,可以看出一个页面中包含的请求数
      agent:客户机的类型记录
      
      LogFormat用于定义不同类型的日志进行记录时使用的格式,使用以%开头的宏定义,以记录不同的内容。
      
    #. ServerSignature On
      当客户请求的网页不存在时,服务器将产生错误文档,缺省情况下由于打开了ServerSignature选项,错误文档
    的最后一行将包含服务器的名字、Apache的版本等信息。有的管理员更倾向于不对外显示这些信息,可以将该参数
    设置为Off,或者设置为Email,最后一行将替换为对ServerAdmin的Email提示。
    
    #. Alias /icons/ "/usr/local/www/icons"
    
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
        
      Alias参数用于将URL与服务器文件系统中的真实位置进行直接映射,一般的文档将在DoucmentRoot中进行查询,
    然而使用Alias定义的路径将直接映射到相应目录下,而不再到DocumentRoot下面进行查询。因此Alias可以用来
    映射一些公用文件的路径,例如保存各种常用图标的icons路径。这样使得除了使用符号连接之外,文档跟目录
    (DoucmentRoot)外的目录也可以通过使用Alias映射,提供给浏览器访问。
      定义好映射的路径之后,应该需要使用Directory语句设置访问限制。
      
    #. ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"
      
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
        
      用于URL路径的映射,但与Alias的不同在于,ScriptAlias是用于映射CGI程序的路径,这个路径下的文件都被
    定义为CGI程序,通过执行他们来获得结果,而非由服务器直接返回其内容。缺省情况下CGI程序使用cgi-bin目录
    作为虚拟路径。
    
    #. Redirect old-URI new_URL
      Redirect参数是用来重写URL的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器
    新的URL,告诉浏览器从该URL中获取资源。这主要用于原来存在于服务器上的文档,改变了位置之后,而又希望
    能使用老URL访问,以保持与以前的URL兼容。
    
    #. IndexOptions FancyIndexing
       AddIconByEncoding (CMP, /icons/compressed.gif) x-compress x-gzip
       AddIconByType (TXT, /icons/text.gif) text/*
       AddIconByType (IMG, /icons/image2.gif) image/*
       AddIconByType (SND, /icons/sound2.gif) audio/*
       AddIconByType (VID, /icons/movie.gif) video/*
       AddIcon /icons/binary.gif .bin .exe
       AddIcon /icons/binhex.gif .hqx
       AddIcon /icons/tar.gif .tar
       AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
       AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
       AddIcon /icons/a.gif .ps .ai .eps
       AddIcon /icons/layout.gif .html .shtml .htm .pdf
       AddIcon /icons/text.gif .txt
       AddIcon /icons/c.gif .c
       AddIcon /icons/f.gif .for
       AddIcon /icons/p.gif .pl .py
       AddIcon /icons/dvi.gif .dvi
       AddIcon /icons/uuencoded.gif .uu
       AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
       AddIcon /icons/tex.gif .tex
       AddIcon /icons/bomb.gif core
       AddIcon /icons/back.gif ..
       AddIcon /icons/hand.right.gif README
       AddIcon /icons/folder.gif ^^DIRECTORY^^
       AddIcon /icons/blank.gif ^^BLANKICON^^
       DefaultIcon /icons/unknown.gif
       #AddDescription "GZIP compressed document" .gz
       #AddDescription "tar archive" .tar
       #AddDescription "GZIP compressed tar archive" .tgz
       ReadmeName README
       HeaderName HEADER
       IndexIgnore .??* *~*# HEADER* README* RCS CVS *, v *, t
      当一个HTTP请求的URL为一个目录的时候,服务器返回这个目录中的索引文件。如果目录中不存在缺省的索引
    文件,并且该服务器又许可显示目录文件列表的时候,就会显示出这个目录中的文件列表,为了使得这个文件
    列表能具有可理解性,而不仅仅是一个简单的列表,就需要这些设置参数。
      如果使用了IndexOptions FancyIndexing选项,可以让服务器产生的目录列表中针对各种不同类型的文档
      引用各种图表。而哪种文件使用哪种图标,则使用下面的AddIconByEncoding、AddIconByType、AddIcon来
    定义,分别依据MIME的编码、类型以及文件的后缀来判断使用何种图标。如果不能确定文档使用何种图标,就
    使用DefaultIcon定义的缺省图标。
      AddDescription为不同类型的文档加入不同的描述。并且,服务器还在目录下,查询使用ReadmeName和
    HeaderName定义的文件,如果发现了这些文件,就在文件列表之前首先显示这些文件的内容,使得普通目录列表
    具备更大的可理解性。
      IndexIgnore让服务器在列出文件列表时忽略相应的文件,这里使用模式配置的方式定义文件名。
      
    #. AddEncoding x-compress Z
       AddEncoding x-gzip gz
      AddEncoding用于告诉一些使用压缩的MIME类型,这样可以让浏览器进行解压缩操作。
      
    #. AddLanguage en .en
       AddLanguage fr .fr
       AddLanguage de .de
       AddLanguage da .da
       AddLanguage el .el
       AddLanguage it .it
       LanguagePriority en fr de
      一个HTML文档可以同时具备多个语言的版本,如对于file1.html文档可以具备file1.html.en、file1.html.fr
    等不同的版本,每个语言后缀必须使用AddLanguage进行定义。这样服务器可以针对不同国家的客户,通过与浏览
    器进行协商,发送不同的语言版本。而LanguagePriority定义不同语言的优先接,以便在浏览器没有特殊需求时,
    按照顺序使用不同语言版本回应对file.html的请求。但是实际应用不多。
    
    #. AddDefaultCharset ISO-8859-1
      浏览器选择的标准编码。 简体中文网站:GB2312
      
    #. AddType applicaiton/x-httpd-php3 .phtml
       AddType application/x-httpd-php3-source .phps
      AddType参数可以为特定后缀的文件指定MIME类型,这里的设置将覆盖mime.types中的设置。
      
    #. AddHandler cgi-scirpt .cgi
      AddHandler是用于指定非静态的处理类型,用于定义文档为一个非静态的文档类型,需要进行处理,在向浏览
    器返回处理结果。例如上面设置是将.cgi结尾的文件设置为cgi-script类型,那么服务器将启动这个CGI程序以
    进行处理。如果需要在前面AliasScript定义的路径之外执行CGI程序,就需要使用这个参数进行设置,此后以.cgi
    结尾的文件将被当作CGI程序执行。
      在配置文件,这个目录中的.htaccess以及其上级目录的.htaccess中必须允许执行CGI程序,这需要通过
    Options ExecCGI参数设定。
    
    #. #AddType text/html .shtml
     #AddHandler server-parsed .shtml  
    另外一种动态进行处理的类型为server-parsed,由服务器自身预先分析网页内的标记,将标记更改为正确的HTML标识。
    由于server-parsed需要对text/html类型的文档进行处理,因此首先定义了对应的.shtml为text/html类型。  
   然而要支持SSI,还要首先要在配置文件(或.htaccess)中使用Options Includes允许该目录下的文档可以为SSI类型,
    或使用Options IncludesNOExec让执行普通的SSI标志,但不执行其中引用的外部程序。  
   另一种指定server-parsed类型的方式为使用XBitBack设置选项,如果将XBitHack设置为On,服务器将检查所有
    text/html类型的文档(包括.html后缀的文档),如果发现文件属性具备执行位 “x“,则服务器就认为它是服务器分析文档,
    需要服务器进行处理。推荐使用AddHandler进行设置,而将XBitBack 设置为Off,因为使用XBitBack将对所有的HTML文档
    都执行额外的检查,降低了效率。
    
    #. #AddHandler send-as-is asis
      #AddHandler imap-file map
      #AddHandler type-map var  
    上面被注释的AddHandler用于支持Apache服务器的asis、map和var处理能力。
    
    #. # Action media/type /cgi-script/location
     # Action handler-name /cgi-script/location  
    因为Apache内部提供的处理功能有限,因此可以使用Action为服务器定义外部程序作为可处理的动态文档类型,
    这些外部程序与标准CGI程序相同,都是对输入的数据处理之后,再输出不同MIME类型的结果。例如要定义一个
    对特殊后缀wri都先执行wri2txt进行处理操作,再返回结果的操作,可以使用:
  
     Action windows-writer /bin/wri2txt
     AddHandler windows-writer wri
  
    更进一步,可以直接使用Action定义对某个MIME类型预先进行处理操作,这需要例子中第一种格式的Action
    参数设置方式。这样设置方式就不再需要额外的AddHandler用来将处理操作与文件后缀联系起来,而是使用Action
    直接处理MIME类型的文件。但如果文档后缀没有正式的MIME类型,还需要先定义一个MIME类型。
    
    #. #ErrorDocument 500 “The server made a boo boo.
      #ErrorDocument 404 /missing.html
     #ErrorDocument 404 /cgi-bin/missing_handler.pl
     #ErrorDocument 402 http://some.other_server.com/subscription_info.html   
    如果客户请求的网页不存在,或者没有访问权限等情况发生时,服务器将产生一个错误代码,同时也将回应客户
    浏览器一个标识错误的网页。ErrorDocument就用于设置当出现哪个错误时应该回应客户浏览器那些内容,
    ErrorDocument的第一个参数为错误的序号,第二个参数为回应的数据,可以为简单的文本,本地网页,本地CGI程序,
    以及远程主机上的网页。
    
    #. BrowserMatch “Mozilla/2“ nokeepalive
     BrowserMatch “MSIE 4\.0b2;“ nokeepalive downgrade-1.0 force-response-1.0
     BrowserMatch “RealPlayer 4\.0“ force-response-1.0
     BrowserMatch “Java/1\.0“ force-response-1.0
     BrowserMatch “JDK/1\.0“ force-response-1.0  
      BrowserMatch命令为特定的客户程序,设置特殊的参数,以保证对老版本浏览器的兼容性,并支持新浏览器的新特性。
      
    #.  #
      #ProxyRequests On
      #
      #
      # Order deny,allow
      # Deny from all
      # Allow from .your_domain.com
      #
      #ProxyVia On
      #CacheRoot “/usr/local/www/proxy“
      #CacheSize 5
      #CacheGcInterval 4
      #CacheMaxExpire 24
      #CacheLastModifiedFactor 0.1
      #CacheDefaultExpire 1
      #NoCache a_domain.com another_domain.edu joes.garage_sale.com  
      #
      Apache服务器本身就具备代理的功能,然而这要求加载入mod_proxy模块。这能使用IfModule语句进行判断,如果存在
    mod_proxy模块,就使用ProxyRequests打开代理支持。此后的Directory用于设置对Proxy功能的访问权限设置,
    以及用于设置缓冲的各个参数设置。
    
    #.  #NameVirtualHost 12.34.56.78:80
      #NameVirtualHost 12.34.56.78
      #
      # ServerAdmin webmaster@host.some_domain.com
      # DocumentRoot /www/docs/host.some_domain.com
      # ServerName host.some_domain.com
      # ErrorLog logs/host.some_domain.com-error_log
      # CustomLog logs/host.some_domain.com-access_log common
      #
      缺省设置文件中的这些内容是用于设置命名基础的虚拟主机服务器时使用。其中NameVirtualHost 来指定虚拟主机使用的IP地址,
    这个IP地址将对应多个DNS名字,如果Apache使用了Listen 参数控制了多个端口,那么就可以在这里加上端口号以进一步进行区分
    对不同端口的不同连接请求。此后,使用VirtualHost语句,使用NameVirtualHost指定的IP地址作参数,对每个名字都定义对应
    的虚拟主机设置。
      虚拟主机是在一台Web服务器上,可以为多个单独域名提供Web服务,并且每个域名都完全独立,包括具有完全独立的文档目录结构
    及设置,这样域名之间完全独立,不但使用每个域名访问到的内容完全独立,并且使用另一个域名无法访问其他域名提供的网页内容。
    虚拟主机的概念对于ISP来讲非常有用,因为虽然一个组织可以将自己的网页挂在具备其他域名的服务器上的下级往址上,但使用
    独立的域名和根网址更为正式,易为众人接受。传统上,必须自己设立一台服务器才能达到单独域名的目的,然而这需要维护一个
    单独的服务器,很多小单位缺乏足够的维护能力,更为合适的方式是租用别人维护的服务器。ISP也没有必要为一个机构提供一个
    单独的服务器,完全可以使用虚拟主机能力,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同
    的服务器。
      有两种设定虚拟主机的方式,一种是基于HTTP 1.0标准,需要一个具备多IP地址的服务器,再配置DNS服务器,给每个IP地址以
    不同的域名,最后才能配置Apache的配置文件,使服务器对不同域名返回不同的Web文档。由于这需要使用额外的IP地址,对每个
    要提供服务的域名都要使用单独的IP地址,因此这种方式实现起来问题较多。  
    可以在一个网络界面上绑定多个IP地址,FreeBSD下需要使用ifconfig的alias参数来进行这个配置,但此时会影响网络性能。  
    HTTP 1.1标准在协议中规定了对浏览器和服务器通信时,服务器能够跟踪浏览器请求的是哪个主机名字。因此可以利用这个新特性,
    使用更轻松的方式设定虚拟主机。这种方式不需要额外的IP地址,但需要新版本的浏览器支持。这种方式已经成为建立虚拟主机的
    标准方式。  
      要建立非IP基础的虚拟主机,多个域名是不可少的配置,因为每个域名就对应一个要服务的虚拟主机。因此需要更改DNS服务器的配置,
    为服务器增加多个CNAME选项,如:  
      freebsd IN A 192.168.1.64
      vhost1 IN CNAME freebsd
      vhost2 IN CNAME freebsd
      基本的设置选项都是为了freebsd主机设定的,如果要为vhost1和vhost2设定虚拟主机,就要使用VirtualHost语句定义不同的选项,
    在语句中可以使用配置文件前面中的大部分选项,而可以重新定义几乎所有的针对服务器的设置。  
      NameVirtualHost 192.168.1.64
      
      DocumentRoot /usr/local/www/data
      ServerName freebsd.example.org.cn
        
      DocumentRoot /vhost1
      ServerName vhost1.example.org.cn
        
      DocumentRoot /vhost2
      ServerName vhost2.example.org.cn
      这里需要注意的是,VirtualHost的参数地址一定要和NameVirtualHost定义的地址相一致,必须保证所有的值严格一致,Apache服务器
    才承认这些定义是为这个IP地址定义的虚拟主机。此外,定义过NameVirtualHost之后,那么对这个IP地址的访问都被区分不同的虚拟主机
    进行处理,而对其他IP地址的访问,例如127.0.0.1,才应用前面定义的缺省选项。
    
    #.  NameVirtualHost www.xxx.org
  (对于动态IP的另类方法:指定虚拟主机的IP,由于要将域名映射为IP,不能使用localhost,127.0.0.1,计算机名等这样的地址,
    所以,可以再一次通过域名转换,将域名转换为IP,这样就不必每次更改IP了。)
  
  #
  # VirtualHost example:
  # Almost any Apache directive may go into a VirtualHost container.
  # The first VirtualHost section is used for requests without a known
  # server name.
  #
  <VirtualHost 192.168.0.1>(虚拟主机IP)
   ServerAdmin 111@xxx.com(第一个虚拟主机Email)
   DocumentRoot H:/web001(第一个虚拟主机目录)
   ServerName www.xxx.org(第一个虚拟主机域名)
   ErrorLog logs/www.xxx.org-error.log(第一个虚拟主机错误日志)
   CustomLog logs/www.xxx.org-access.log common(第一个虚拟主机数据)
  </VirtualHost>
  
  <VirtualHost 192.168.0.2>(虚拟主机IP)
   ServerAdmin 111@xxx.com(第二个虚拟主机Email)
   DocumentRoot H:/web002(第二个虚拟主机目录)
   ServerName www.xxx2.org(第二个虚拟主机域名)
   ErrorLog logs/www.xxx2.org-error.log(第二个虚拟主机错误日志)
   CustomLog logs/www.xxx2.org-access.log common(第二个虚拟主机数据)
  </VirtualHost>
  
  以此类推,可以增加更多虚拟主机。
      
      
      
      
      
      
      
      
      
    
    
    
   

抱歉!评论已关闭.