Apache主配置文件httpd.conf 详解

时间:2023-02-04 04:40:40

Apache的主配置文件:/etc/httpd/conf/httpd.conf

默认站点主目录:/var/www/html/

Apache服务器的配置信息全部存储在主配置文件/etc/httpd/conf/httpd.conf中,这个文件中的内容非常多,用wc命令统计一共有1009行,其中大部分是以#开头的注释行。

[root@justin ~]# wc -l /etc/httpd/conf/httpd.conf 

1009 /etc/httpd/conf/httpd.conf 

[root@justin ~]#


配置文件包括三部分:

[root@justin ~]# grep '\<Section\>' /etc/httpd/conf/httpd.conf -n 

33:### Section 1: Global Environment 

245:### Section 2: 'Main' server configuration 

973:### Section 3: Virtual Hosts 

[root@justin ~]#


1)Global Environment---全局环境配置,决定Apache服务器的全局参数


2)Main server configuration---主服务配置,相当于是Apache中的默认Web站点,如果我们的服务器中只有一个站点,那么就只需在这里配置就可以了。


3)Virtual Hosts---虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用了


--------------------------------------------------------------------------------

1)Global Environment


44 ServerTokens OS


在出现错误页的时候是否显示服务器操作系统的名称,ServerTokens Prod为不显示


57 ServerRoot "/etc/httpd"


用于指定Apache的运行目录,服务启动之后自动将目录改变为当前目录,在后面使用到的所有相对路径都是想对这个目录下



65 PidFile run/httpd.pid


记录httpd守护进程的pid号码,这是系统识别一个进程的方法,系统中httpd进程可以有多个,但这个PID对应的进程是其他的父进程



70 Timeout 60


服务器与客户端断开的时间



76 KeepAlive Off


是否持续连接(因为每次连接都得三次握手,如果是访问量不大,建议打开此项,如果网站访问量比较大关闭此项比较好),修改为:KeepAlive On 表示允许程序性联机



83 MaxKeepAliveRequests 100


表示一个连接的最大请求数



89 KeepAliveTimeout 15


断开连接前的时间


102 <IfModule prefork.c> 

103 StartServers      8 

104 MinSpareServers    5 

105 MaxSpareServers  20 

106 ServerLimit      256 

107 MaxClients      256 

108 MaxRequestsPerChild  4000 

109 </IfModule>


系统默认的模块,表示为每个访问启动一个进程(即当有多个连接公用一个进程的时候,在同一时刻只能有一个获得服务)。


StartServer开始服务时启动8个进程,最小空闲5个进程,最多空闲20个进程。


MaxClient限制同一时刻客户端的最大连接请求数量超过的要进入等候队列


MaxRequestsPerChild每个进程生存期内允许服务的最大请求数量,0表示永不结束


118 <IfModule worker.c> 

119 StartServers        4 

120 MaxClients        300 

121 MinSpareThreads    25 

122 MaxSpareThreads    75 

123 ThreadsPerChild    25 

124 MaxRequestsPerChild  0 

125 </IfModule>


为Apache配置线程访问,即每对WEB服务访问启动一个线程,这样对内存占用率比较小。


ServerLimit服务器允许配置进程数的上限。


ThreadLimit每个子进程可能配置的线程上限


StartServers启动两个httpd进程,


MaxClients同时最多能发起250个访问,超过的要进入队列等待,其大小有ServerLimit和ThreadsPerChild的乘积决定


ThreadsPerChild每个子进程生存期间常驻执行线程数,子线程建立之后将不再增加


MaxRequestsPerChild每个进程启动的最大线程数,如达到限制数时进程将结束,如置为0则子线程永不结束


136 Listen 80


监听的端口,如有多块网卡,默认监听所有网卡


123 150 LoadModule auth_basic_module modules/mod_auth_basic.so 

...... 

201 LoadModule version_module modules/mod_version.so


启动时加载的模块


221 Include conf.d/*.conf


加载的配置文件



242 User apache 

243 Group apache


启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全


2)Main server configuration



262 ServerAdmin root@localhost


管理员的邮箱



276 #ServerName www.example.com:80


默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定IP地址,当这项不正确的时候服务器不能正常启动。前面启动Apache时候提示正在启动 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1forServerName,解决方法就是启动该项把www.example.com:80修改为自己的域名或者直接修改为localhost



1 285 UseCanonicalName Off


如果客户端提供了主机名和端口,Apache将会使用客户端提供的这些信息来构建自引用URL。这些值与用于实现基于域名的虚拟主机的值相同,并且对于同样的客户端可用。CGI变量SERVER_NAME和SERVER_PORT也会由客户端提供的值来构建


292 DocumentRoot "/var/www/html"


网页文件存放的目录


302 <Directory /> 

303    Options FollowSymLinks 

304    AllowOverride None 

305 </Directory>


对根目录的一个权限的设置


 317 <Directory "/var/www/html"> 

 331    Options Indexes FollowSymLinks 

 338    AllowOverride None 

 343    Order allow,deny 

 344    Allow from all 

 346 </Directory>


对/var/www/html目录的一个权限的设置,

options中Indexes表示当网页不存在的时候允许索引显示目录中的文件,

FollowSymLinks是否允许访问符号链接文件。


有的选项有ExecCGI表是否使用CGI,

如Options Includes ExecCGI FollowSymLinks表示允许服务器执行CGI及SSI,禁止列出目录。

SymLinksOwnerMatch表示当符号链接的文件和目标文件为同一用户拥有时才允许访问。


AllowOverrideNone表示不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不用查看这个目录下的访问控制文件,修改为:AllowOverride All 表示允许.htaccess。


Order对页面的访问控制顺序后面的一项是默认选项,如allow,deny则默认是deny,Allowfromall表示允许所有的用户,通过和上一项结合可以控制对网站的访问控制


 360 <IfModule mod_userdir.c> 

 366    UserDir disabled 

 375 </IfModule>


是否允许用户访问其家目录,默认是不允许


381 #<Directory /home/*/public_html> 

382 #    AllowOverride FileInfo AuthConfig Limit 

383 #    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 

384 #    <Limit GET POST OPTIONS> 

385 #        Order allow,deny 

386 #        Allow from all 

387 #    </Limit> 

388 #    <LimitExcept GET POST OPTIONS> 

389 #        Order deny,allow 

390 #        Deny from all 

391 #    </LimitExcept> 

392 #</Directory>


如果允许访问用户的家目录中的网页文件,则取消以上注释,并对其中进行修改


402 DirectoryIndex index.html index.html.var


指定所要访问的主页的默认主页名字,默认首页文件名为index.html


409 AccessFileName .htaccess


定义每个目录下的访问控制文件名,缺省为.htaccess


415 <Files ~ "^\.ht"> 

416    Order allow,deny 

417    Deny from all 

418    Satisfy All 

419 </Files>


控制不让web上的用户来查看.htpasswd和.htaccess这两个文件


425 TypesConfig /etc/mime.types


用于设置保存有不同MIME类型数据的文件名


436 DefaultType text/plain


默认的网页的类型


443 <IfModule mod_mime_magic.c> 

444 #  MIMEMagicFile /usr/share/magic.mime 

445    MIMEMagicFile conf/magic

446 </IfModule>


指定判断文件真实MIME类型功能的模块


456 HostnameLookups Off


当打开此项功能时,在记录日志的时候同时记录主机名,这需要服务器来反向解析域名,增加了服务器的负载,通常不建议开启


466 #EnableMMAP off


是否允许内存映射:如果httpd在传送过程中需要读取一个文件的内容,它是否可以使用内存映射。如果为on表示如果操作系统支持的话,将使用内存映射。在一些多核处理器的系统上,这可能会降低性能,如果在挂载了NFS的DocumentRoot上如果开启此项功能,可能造成因为分段而造成httpd崩溃


475 #EnableSendfile off


这个指令控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送到客户端。默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache将使用sendfile将文件内容直接发送到客户端而并不读取文件


1 484 ErrorLog logs/error_log


错误日志存放的位置


491 LogLevel warn


Apache日志的级别


497 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

498 LogFormat "%h %l %u %t \"%r\" %>s %b" common 

499 LogFormat "%{Referer}i -> %U" referer 

500 LogFormat "%{User-agent}i" agent


定义了日志的格式,并用不同的代号表示


513 #CustomLog logs/access_log common 

526 CustomLog logs/access_log combined


说明日志记录的位置,这里面使用了相对路径,所以ServerRoot需要指出,日志位置就存放在/etc/httpd/logs


536 ServerSignature On


定义当客户请求的网页不存在,或者错误的时候是否提示apache的版本的一些信息


551 Alias /icons/ "/var/www/icons/"


定义一些不在DocumentRoot下的文件,而可以将其映射到网页根目录中,这也是访问其他目录的一种方法,但在声明的时候切记目录后面加”/”


553 <Directory "/var/www/icons"> 

554    Options Indexes MultiViews FollowSymLinks 

555    AllowOverride None 

556    Order allow,deny 

557    Allow from all 

558 </Directory>


定义对/var/www/icons/的权限,修改为 Options MultiViews FollowSymLinks表示不在浏览器上显示树状目录结构


563 <IfModule mod_dav_fs.c> 

564    # Location of the WebDAV lock database. 

565    DAVLockDB /var/lib/dav/lockdb

566 </IfModule>


对mod_dav_fs.c模块儿的管理


576 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"


对CGI模块儿的的别名,与Alias相似。


582 <Directory "/var/www/cgi-bin"> 

583    AllowOverride None 

584    Options None 

585    Order allow,deny 

586    Allow from all 

587 </Directory>


对/var/www/cgi-bin文件夹的管理,方法同上


# Redirect old-URI new-URL


Redirect参数是用来重写URL的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器新的URL,告诉浏览器从该URL中获取资源。这主要用于原来存在于服务器上的文档改变位置之后,又需要能够使用老URL能访问到原网页


604 IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8 

611 AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

... 

669 IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t


当一个HTTP请求的URL为一个目录的时候,服务器返回这个目录中的索引文件,如果目录中不存在索引文件,并且服务器有许可显示目录文件列表的时候,就会显示这个目录中的文件列表,为了使得这个文件列表能具有可理解性,而不仅仅是一个简单的列表,就需要前这些参数。如果使用了IndexOptionsFancyIndexing选项,可以让服务器针对不同的文件引用不同的图标。如果没有就使用DefaultIcon定义缺省图标。同样,使用AddDescription可以为不同类型的文档介入描述


709 AddLanguage ca .ca 

...... 

 734 AddLanguage zh-TW .zh-tw


添加语言


743 LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW


Apache支持的语言


759 AddDefaultCharset UTF-8


默认支持的语言


765 #AddType application/x-tar .tgz


支持的应用如果想支持对php的解析添加这样一行


773 #AddEncoding x-compress .Z 

774 #AddEncoding x-gzip .gz .tgz


支持对以.Z和.gz.tgz结尾的文件


779 AddType application/x-compress .Z 

780 AddType application/x-gzip .gz .tgz


添加对上述两种文件的应用


796 #AddHandler cgi-script .cgi


修改为:AddHandler cgi-script .cgi .pl 表示允许扩展名为.pl的CGI脚本运行


816 AddType text/html .shtml 

817 AddOutputFilter INCLUDES .shtml


添加动态处理类型为server-parsed由服务器预先分析网页内的标记,将标记改为正确的HTML标识


833 #ErrorDocument 404 /missing.html


当服务器出现404错误的时候,返回missing.html页面


855 Alias /error/ "/var/www/error/"


赋值别名


857 <IfModule mod_negotiation.c> 

858 <IfModule mod_include.c> 

859    <Directory "/var/www/error"> 

860        AllowOverride None 

861        Options IncludesNoExec 

862        AddOutputFilter Includes html 

863        AddHandler type-map var 

864        Order allow,deny 

865        Allow from all 

866        LanguagePriority en es de fr 

867        ForceLanguagePriority Prefer Fallback 

868    </Directory>


对/var/www/error网页的权限及操作



895 BrowserMatch "Mozilla/2" nokeepalive 

896 BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 

897 BrowserMatch "RealPlayer 4\.0" force-response-1.0 

898 BrowserMatch "Java/1\.0" force-response-1.0 

899 BrowserMatch "JDK/1\.0" force-response-1.0 

.....


设置特殊的参数,以保证对老版本浏览器的兼容,并支持新浏览器的特性

3)Virtual Hosts


990 #NameVirtualHost *:80


如果启用虚拟主机的话,必须将前面的注释去掉,而且,第二部分的内容都可以出现在每个虚拟主机部分。

998 # VirtualHost example: 

1003 #<VirtualHost *:80> 

1004 #    ServerAdmin webmaster@www.linuxidc.com 

1005 #    DocumentRoot /www/docs/www.linuxidc.com 

1006 #    ServerName www.linuxidc.com 

1007 #    ErrorLog logs/www.linuxidc.com-error_log 

1008 #    CustomLog logs/www.linuxidc.com-access_log common 

1009 #</VirtualHost>










ServerRoot /usr/local ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下。 ScoreBoardFile /var/run/ht    

ServerRoot “/usr/local“

  

    ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下。

  

  ScoreBoardFile /var/run/httpd.scoreboard

  

    httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apache服务器,这时每个Apache服务器都需要独立的设置文件htt pd.conf,并使用不同的ScoreBoardFile。

  

  #ResourceConfig conf/srm.conf

  #AccessConfig conf/access.conf

  

    这两个参数ResourceConfig和AccessConfig,就用于和使用srm.conf和access.conf设置文件的老版本Apache兼容。如果没有兼容的需要,可以将对应的设置文件指定为/dev/null,这将表示不存在其他设置文件,而仅使用httpd.conf一个文件来保存所有的设置选项。

  

  PidFile /var/run/httpd.pid

  

    PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。

  

  Timeout 300

  

    Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接。

  

  KeepAlive On

  

    在HTTP 1.0中,一次连接只能作传输一次HTTP请求,而KeepAlive参数用于支持HTTP 1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。虽然只有较新的浏览器才支持这个功能,但还是打开使用这个选项。

  

  MaxKeepAliveRequests 100

  

    MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。

  

  KeepAliveTimeout 15

  

    KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。

  

  ThreadsPerChild 50 

  设置服务器使用进程的数目。 

  # 这是以服务器的响应速度为准的, 数目太大则会变慢 

  

  MaxRequestsPerChild 30

  

    使用子进程的方式提供服务的Web服务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是每次连接都需要生成、退出子进程的系统操作,使得这些额外的处理过程占据了计算机的大量处理能力。因此最好的方式是一个子进程可以为多次连接请求服务,这样就不需要这些生成、退出进程的系统消耗,Apache就采用了这样的方式,一次连接结束后,子进程并不退出,而是停留在系统中等待下一次服务请求,这样就极大的提高了性能。

  

    但由于在处理过程中子进程要不断的申请和释放内存,次数多了就会造成一些内存垃圾,就会影响系统的稳定性,并且影响系统资源的有效利用。因此在一个副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的htt pd进程中重新复制一个干净的副本,这样就能提高系统的稳定性。这样,每个子进程处理服务请求次数由MaxRe questPerChild定义。 缺省的设置值为30,这个值对于具备高稳定性特点的FreeBSD系统来讲是过于保守的设置,可以设置为1000甚至更高,设置为0支持每个副本进行无限次的服务处理。

  为了安全,设置为零 

  

  #Listen 3000

  #Listen 12.34.56.78:80

  #BindAddress *

  

    Listen参数可以指定服务器除了监视标准的80端口之外,还监视其他端口的HTTP请求。由于FreeBSD系统可以同时拥有多个IP地址,因此也可以指定服务器只听取对某个BindAddress< /B>的IP地址的HTTP请求。如果没有配置这一项,则服务器会回应对所有IP的请求。

  

    即使使用了BindAddress参数,使得服务器只回应对一个IP地址的请求,但是通过使用扩展的Listen参数,仍然可以让HTTP守护进程回应对其他IP地址的请求。此时Listen参数的用法与上面的第二个例子相同。这种比较复杂的用法主要用于设置虚拟主机。此后可以用VirtualHost参数定义对不同IP的虚拟主机,然而这种用法是较早的HTTP 1.0标准中设置虚拟主机的方法,每针对一个虚拟主机就需要一个IP地址,实际上用处并不大。在HTTP 1.1中,增加了对单IP地址多域名的虚拟主机的支持,使得虚拟主机的设置具备更大的意义。

  

  #ExtendedStatus On

  

    Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开这个ExtendedStatus 参数可以让服务器报告更全面的运行状态信息

  

  

  

  ---------------------------------------------------------------------------------

  

  ServerAdmin you@your.address

  

    配置文件中应该改变的也许只有ServerAdmin, 这一项用于配置WWW服务器的管理员的email地址,这将在HTTP服务出现错误的条件下返回给浏览器,以便让Web使用者和管理员联系,报告错误。习惯上使用服务器上的webmaster作为WWW服务器的管理员,通过邮件服务器的别名机制,将发送到webmaster 的电子邮件发送给真正的Web管理员。

  

  ServerName localhost

  

    缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解析过程来获得自己的名字,但如果服务器的名字解析有问题(通常为反向解析不正确),或者没有正式的DNS名字,也可以在这里指定I P地址。当ServerName设置不正确的时候,服务器不能正常启动。

  

    通常一个Web服务器可以具有多个名字,客户浏览器可以使用所有这些名字或IP地址来访问这台服务器,但在没有定义虚拟主机的情况下,服务器总是以自己的正式名字回应浏览器。ServerName就定义了Web服务器自己承认的正式名字,例如一台服务器名字(在DNS中定义了A类型)为freebsd.exmaple.org.cn,同时为了方便记忆还定义了一个别名(CNAME记录)为www.exmaple.org.cn,那么Apache自动解析得到的名字就为freebsd.example.org.cn,这样不管客户浏览器使用哪个名字发送请求,服务器总是告诉客户程序自己为freebsd.example.org.cn。虽然这一般并不会造成什么问题,但是考虑到某一天服务器可能迁移到其他计算机上,而只想通过更改DNS中的www别名配置就完成迁移任务,所以不想让客户在其书签中使用 freebsd记录下这个服务器的地址,就必须使用ServerName来重新指定服务器的正式名字。

  

  DocumentRoot “/usr/local/www/data“

  

    DocumentRoot定义这个服务器对外发布的超文本文档存放的路径,客户程序请求的UR L就被映射为这个目录下的网页文件。这个目录下的子目录,以及使用符号连接指出的文件和目录都能被浏览器访问,只是要在URL上使用同样的相对目录名。

  

    注意,符号连接虽然逻辑上位于根文档目录之下,但实际上可以位于计算机上的任意目录中,因此可以使客户程序能访问那些根文档目录之外的目录,这在增加了灵活性的同时但减少了安全性。Apache在目录的访问控制中提供了FollowSymLinks选项来打开或关闭支持符号连接的特性。

  

  <Directory />

   Options FollowSymLinks

   AllowOverride None

  </Directory>

  

    Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两种方式来实现,一个是在设置文件 httpd.conf(或access.conf)中针对每个目录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件名字为.htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动httpd守护进程,比较不灵活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的访问控制更为灵活方便。

  

  

  <Directory “H:/web001“>

  Directory语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行的,设置了允许符号连接的选项FollowSymLinks ,以及使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件。

  

    由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对根目录的设置将影响到它的下级目录。注意由于AllowOverride None的设置,使得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么Apache就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能。

  

  Options Indexes FollowSymLinks

   AllowOverride None

   Order allow,deny

   Allow from all

  </Directory>

  

     这里定义的是系统对外发布文档的目录的访问设置,设置不同的AllowOverride选项,以定义配置文件中的目录设置和用户目录下的安全控制文件的关系,而Options选项用于定义该目录的特性。

  

    配置文件和每个目录下的访问控制文件都可以设置访问限制,设置文件是由管理员设置的,而每个目录下的访问控制文件是由目录的属主设置的,因此管理员可以规定目录的属主是否能覆盖系统在设置文件中的设置,这就需要使用 AllowOverride参数进行设置,通常可以设置的值为:

  

  AllowOverride的设置 对每个目录访问控制文件作用的影响 

  All 缺省值,使访问控制文件可以覆盖系统配置 

  None 服务器忽略访问控制文件的设置 

  Options 允许访问控制文件中可以使用Options参数定义目录的选项 

  FileInfo 允许访问控制文件中可以使用AddType等参数设置 

  AuthConfig 允许访问控制文件使用AuthName,AuthType等针对每个用户的认证机制,这使目录属主能用口令和用户名来保护目录 

  Limit 允许对访问目录的客户机的IP地址和名字进行限制 

  

  

  每个目录具备一定属性,可以使用Options来控制这个目录下的一些访问特性设置,以下为常用的特性选项:

  

  Options设置 服务器特性设置 

  All 所有的目录特性都有效,这是缺省状态 

  None 所有的目录特性都无效 

  FollowSymLinks 允许使用符号连接,这将使浏览器有可能访问文档根目录(DocumentRoot)之外的文档 

  SymLinksIfOwnerMatch 只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性 

  ExecCGI 允许这个目录下可以执行CGI程序 

  Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得在这个目录下没有index.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表 

  

    此外,上例中还使用了Order、Allow、Deny等参数,这是Limit语句中用来根据浏览器的域名和 IP地址来控制访问的一种方式。其中Order定义处理Allow和Deny的顺序,而Allow、Deny则针对名字或IP进行访问控制设置,上例使用allow from all,表示允许所有的客户机访问这个目录,而不进行任何限制。

  

  

  UserDir public_html (Win32=“My Documents/My Website“)

  

    当在一台FreeBSD上运行Apache服务器时,这台计算机上的所有用户都可以有自己的网页路径,形如 http://freebsd.example.org.cn/~user,使用波浪符号加上用户名就可以映射到用户自己的网页目录上。映射目录为用户个人主目录下的一个子目录,其名字就用UseDir这个参数进行定义,缺省为public_html。如果不想为正式的用户提供网页服务,使用DISABLED作UserDir的参数即可。

  

  #

  # AllowOverride FileInfo AuthConfig Limit

  # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

  # 

  # Order allow,deny

  # Allow from all

  # 

  # 

  # Order deny,allow

  # Deny from all

  # 

  #

   

    这里可以看到Directory的另一个用法,即可以通过简单的模式匹配方法,针对分布在不同目录下的子目录定义访问控制权限。这样设置就需要Apache服务器对每个路径进行额外的处理,因此就会降低服务器的性能,所以缺省情况并没有打开这种访问限制。

  

    这里可以看到另外一个语句Limit,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

  

    AccessFileName定义每个目录下的访问控制文件的文件名,缺省为.htaccess ,可以通过更改这个文件,来改变不同目录的访问控制限制。

  

   Order allow,deny

   Deny from all 

  

    除了可以针对目录进行访问控制之外,还可以根据文件来设置访问控制,这就是File语句的任务。使用File 语句,不管文件处于哪个目录,只要名字匹配,就必须接受相应的访问控制。这个语句对于系统安全比较重要,例如上例将屏蔽所有的使用者不能访问.htaccess文件,这样就避免.htaccess中的关键安全信息不至于被客户获取。

  

  TypesConfig /usr/local/etc/apache/mime.types

  

    TypeConfig用于设置保存有不同的MIME类型数据的文件名,在FreeBSD下缺省设置为/usr/local/etc/apache/mime.types。

  

  DefaultType text/plain

  

    如果Web服务器不能决定一个文档的缺省类型,这通常表示文档使用了非标准的后缀,那么服务器就使用 DefaultType定义的MIME类型将文档发送给客户浏览器。这里的设置为text/plain,这样设置的问题是,如果服务器不能判断出文档的MIME,那么大部分情况下这个文档为一个二进制文档,但使用 text/plain格式发送回去,浏览器将在内部打开它而不会提示保存。因此建议将这个设置更改为 application/octet-stream,这样浏览器将提示用户进行保存。

  

  MIMEMagicFile /usr/local/etc/apache/magic

   

    除了从文件的后缀出发来判断文件的MIME类型之外,Apache还可以进一步分析文件的一些特征,来判断文件的真实MIME类型。这个功能是由mod_mime_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表示对客户机的类型记录,显然可以将现有的combined 定义的设置行注释掉,并使用common、referer和agent作为CustomLog的参数,来为不同种类的日志分别指定日志记录文件。

  

  显然,LogFormat是用于定义不同类型的日志进行记录时使用的格式, 这里使用了以%开头的宏定义,以记录不同的内容。

  

    如果这些参数指定的文件使用的是相对路径,那么就是相对于ServerRoot的路径。

  

  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与服务器文件系统中的真实位置进行直接映射,一般的文档将在DocumentRoot 中进行查询,然而使用Alias定义的路径将直接映射到相应目录下,而不再到DocumentRoot 下面进行查询。因此Alias可以用来映射一些公用文件的路径,例如保存了各种常用图标的icons路径。这样使得除了使用符号连接之外,文档根目录(DocumentRoot)外的目录也可以通过使用了Alias映射,提供给浏览器访问。

  

  定义好映射的路径之后,应该需要使用Directory语句设置访问限制。

  

  ScriptAlias /cgi-bin/ “/usr/local/www/cgi-bin/“

  

   AllowOverride None

   Options None

   Order allow,deny

   Allow from all 

  

    ScriptAlias也是用于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/p.gif .pl .py

  AddIcon /icons/f.gif .for

  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定义的文件(自动加上. html后缀,如果没有发现,再使用.txt后缀进行搜索),如果发现了这些文件,就在文件列表之前首先显示这些文件的内容,以使得普通目录列表具备更大的可理解性。

  

  

  

  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 定义不同语言的优先级,以便在浏览器没有特殊要求时,按照顺序使用不同的语言版本回应对file1.html 的请求。这个国际化的能力实际的应用并不多。

  

  

  AddDefaultCharset ISO-8859-1

  

  浏览器选择的标准编码

  

  简体中文网站改为:GB2312

  

  

  #AddType application/x-httpd-php3 .phtml

  #AddType application/x-httpd-php3-source .phps

   

   

  

    AddType参数可以为特定后缀的文件指定MIME类型,这里的设置将覆盖mime.types中的设置。

  

  #AddHandler cgi-script .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>

  

  以此类推,可以增加更多虚拟主机。



Apache服务架设

  一、Apache服务总览:

  1、所需要的软件包:httpd   httpd-devel   httpd-manual

  2、端口:80(http)  443(https)

  3、主配置文件:/etc/httpd/* 、/var/www/*

  4、默认主页目录:/var/www/html

  5、脚本: /etc/init.d/httpd

  6、守护进程:/usr/sbin/httpd

  7、与Apache服务相关的Selinux环境:

  1)system_u:object-r:httpd_config_t

  /etc/httpd/conf和/etc/httpd/conf.d 下的文件

  2)system_u:object_r:httpd_log_t

  /etc/httpd/logs中的日志文件。

  3)system_u:object_r:httpd_modules_t

  httpd服务使用的相关模块

  4)网页内容及网页目录的环境:

  System_u:object_r:httpd_sys_content_t:如果不是这个页面将无法访问。

  另:对于目录,Other组要有访问和可执行权限。

  设置Selinux环境:

  Chcon -R —reference=/var/www/html   /var/www/html/data

  Restorecon -R /var/www/html

  建议网站目录都放到/var/www/html防止因为Selinux造成问题。

  二、Apache配置文件的简单实现:

  1、 相关配置文件修改:/etc/httpd/conf/httpd.conf

  1)、ServerRoot”/etc/httpd” 默认配置文件的存放目录;

  2)、Timeout 120 客户端访问超时时间120秒;

  3)、Listen 80  监听80端口;

  4)、ServerAdmin root@rhel.com  设置管理员邮箱;

  5)、ServerName www.station53.com服务器主机名,可以使DNS域名,也可以是IP地址;

  6)、DocumentRoot /var/www/html  网页默认存放目录;

  7)、DirectoryIndex index.html  index.htm  设置主页文件的名字;

  2、建立主页文件:

  在/var/www/html目录建立主页文件index.html并写上写内容。

  3、启动相关服务:

  chkconfig httpd on

  service httpd restart

  4、测试自己的服务器:

  三、用户个人主页的实现:

  通过配置使我们每个用户都有一个主页可以通过http://www.station53.com/~Username访问的主页。

  1、 主配置文件的修改:

  备注:

  1) 目录权限设置:

  AllowOverride:用于定义位于每个目录下的.htaccess(访问控制)文件中的指令类型。如果要禁用的话:AllowOverride None。

  Options MultiViews:定义目录使用那些特性。

  Indexes:允许目录浏览,但没有指定访问目录下的那个文件,而其目录下不存在默认文档时Apache以超文本形式返回目录中的文件和子目录列表。

  MulitiViews:允许内容协商的多重试图。当访问http://127.0.0.1/icons/a时,服务会查找目录下的所有a.*的文件,如果目录下有就会显示这个文件,而不是报错信息。

  All:包含了除MulitiViews之外的所有特性,如果没有Options语句默认为All。

  ExecCGI:允许执行CGI脚本。

  FollowSymLinks:在该目录中可以使用符号链接。

  Includes:允许服务端包含功能。

  IncludesNoExec:允许服务端包含功能但不允许执行CGI脚本。

  2)缺省访问权限和allow、deny顺序:

  allow,deny规则,先判断allow,后判断deny,冲突时,后面的有效;

  例子如下:

  2)个人网站主目录的设置及文件的建立:

  在个人目录/home/username目录下创建public_html目录。

  建立自己的主页,然后在浏览器输入“http://URL/~username”即可,

  备注:注意public_html目录和里面的文件的Selinux环境参数,如果有问题请按照上面讲的调整。

  四、虚拟主机的设置:

  www.station53.com  下面我们在开通www.server53.com(默认已经设计好 和www.client53.com

  1、配置DNS:

  1)编辑/var/namde/chroot/etc/named.conf,编辑好文件如下:

  2)在/var/named/chroot/var/named生成:server53.com.zone和client53.com.zone两个文件:

  3)修改权限及文件内容:

  4)在/var/named目录下建立server53.com.zone、client53.com.zone的连接文件,并调整好权限:

  5)重新启动DNS服务并测试新建立的域名。

  2、编辑/etc/httpd/conf/httpd.conf文件:

  3、重新启动Apache服务,测试设置是否满足要求:

  1)在/var/www/html目录下分别建立server53 和 client53两个目录,并添加主页文件,处理其相关的Selinux环境设置。

  2)重新启动Apache服务测试:

  ??什么www.station53.com 和www.server53.com显示的一样?

  所以我们要继续修改/etc/httpd/conf/httpd.conf,添加如下段内容:

  在/var/www/html目录下建立station53目录,并建立主页文件处理selinux环境。

  一旦打开虚拟主机功能,那么每个域名都要在虚拟主机项目相应的位置添加与之对应的项目,否则默认访问第一个虚拟主机的设置。

  通过了?OK!!!

  五、主页的用户认证的设置:(以redhat的个人目录为例!)

  1、配置httpd.conf文件,使目标目录支持认证:

  目标目录在httpd.conf中要有AllowOverride AuthConfig 项,默认开启用户个人主页后,用户个人目录支持这个设置。

  2、建立.htaccess文件,建立在站点目录下,这里就是/home/redhat/public_html目录下。

  3、建立.passwords文件:

  4、测试效果:

  肯定OK,注意不要写错,我在配置.htaccess的时候密码文件放置位置的名字写错了,一直在验证密码,怎么都跳不过去,呵呵。注意这两个文件都是隐藏文件名字前面带点。

  Apache 的 httpd.conf 详解

  Apache语法检查工具

  service httpd configtest

  apachectl configtest

  httpd -t

  ServerRoot /usr/local ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么

  真实路径就位于这个ServerR oot定义的路径之下。

  ScoreBoardFile /var/run/ht

  ServerRoot “/usr/local“

  ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下。

  ScoreBoardFile /var/run/httpd.scoreboard

  httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apache服务器,这时每个Apache服务器都需要独立的设置文

  件htt pd.conf,并使用不同的ScoreBoardFile。

  #ResourceConfig conf/srm.conf

  #AccessConfig conf/access.conf

  这两个参数ResourceConfig和AccessConfig,就用于和使用srm.conf和access.conf设置文件的老版本Apache兼容。如果没有兼容的需要,可以将对应的设置文件指定为/dev/null,这将表示不存在其他设置文件,而仅使用httpd.conf一个文件来保存所有的设置选项。

  PidFile /var/run/httpd.pid

  PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。

  Timeout 300

  Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将

  断开与客户机的连接。

  KeepAlive On

  在HTTP 1.0中,一次连接只能作传输一次HTTP请求,而KeepAlive参数用于支持HTTP 1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。虽然只有较

  新的浏览器才支持这个功能,但还是打开使用这个选项。

  MaxKeepAliveRequests 100

  MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面

  ,通常达不到这个上限就完成连接了。

  KeepAliveTimeout 15

  KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服

  务器就断开连接。

  ThreadsPerChild 50

  设置服务器使用进程的数目。

  # 这是以服务器的响应速度为准的, 数目太大则会变慢

  MaxRequestsPerChild 30

  使用子进程的方式提供服务的Web服务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是每次连接都需要生成、退出子进程的系统操作,使得这些额外的处理过程占据

  了计算机的大量处理能力。因此最好的方式是一个子进程可以为多次连接请求服务,这样就不需要这些生成、退出进程的系统消耗,Apache就采用了这样的方式,一次连接结束后,子进程并不

  退出,而是停留在系统中等待下一次服务请求,这样就极大的提高了性能。但由于在处理过程中子进程要不断的申请和释放内存,次数多了就会造成一些内存垃圾,就会影响系统的稳定性,并且影响系统资源的有效利用。因此在一个副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的htt pd进程中重新复制一个干净的副本,这样就能提高系统的稳定性。这样,每个子进程处理服务请求次数由MaxRe questPerChild定义。 缺省的设置值为30,为了安全,设置为零

  #Listen 3000

  #Listen 12.34.56.78:80

  #BindAddress *

  Listen参数可以指定服务器除了监视标准的80端口之外,还监视其他端口的HTTP请求。

  由于linux系统可以同时拥有多个IP地址,因此也可以指定服务器只听取对某个BindAddress< /B>的IP地址的HTTP请求。如果没有配置这一项,则服务器会回应对所有IP的请求。

  即使使用了BindAddress参数,使得服务器只回应对一个IP地址的请求,但是通过使用扩展的Listen参数,仍然可以让HTTP守护进程回应对其他IP地址的请求。此时Listen参数的用法

  与上面的第二个例子相同。这种比较复杂的用法主要用于设置虚拟主机。此后可以用VirtualHost参数定义对不同IP的虚拟主机,然而这种用法是较早的HTTP 1.0标准中设置虚拟主机的方法,每针对一个虚拟主机就需要一个IP地址,实际上用处并不大。在HTTP 1.1中,增加了对单IP地址多域名的虚拟主机的支持,使得虚拟主机的设置具备更大的意义。

  #ExtendedStatus On

  Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开这个ExtendedStatus 参数可以让服务器报告更全面的运行状态信息

  ServerAdmin you@your.address

  配置文件中应该改变的也许只有ServerAdmin, 这一项用于配置WWW服务器的管理员的email地址,这将在HTTP服务出现错误的条件下返回给浏览器,以便让Web使用者和管理员联系,

  报告错误。习惯上使用服务器上的webmaster作为WWW服务器的管理员,通过邮件服务器的别名机制,将发送到webmaster 的电子邮件发送给真正的Web管理员。

  ServerName localhost

  缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解析过程来获得自己的名字,但如果服务器的名字解析有问题(通常为反向解析不正确),或者没有正式的

  DNS名字,也可以在这里指定I P地址。当ServerName设置不正确的时候,服务器不能正常启动。通常一个Web服务器可以具有多个名字,客户浏览器可以使用所有这些名字或IP地址来访问这台服务器,但在没有定





配置文件:/etc/httpd/conf/http.conf


1)"/etc/httpd/conf


主要存放了配置文件httpd.conf,这个是最重要的配置文件,Apache的所有主要权限和功能都在这个文件中进行了详细的设置。

 

(2) "/etc/httpd/conf.d"

 里面存放的是一些额外的参数档,比如php.conf,或者一些自己设定的额外参数等信息。这个目录最大的好处就是可以自己设定自己的参数信息,比如我可以自己建立一个dl.conf,里面配置好相关参数,那么当apache启动的时候,这个文件会自动被读入到主要配置文件当中。这样的话当系统升级的时候,咱就不需要更动原本的配置文件,只要将自己设置的参数文件复制到正确的地点即可。

 

 (3) "/etc/httpd/log"

 这里自然就是日志文件。

 

 (4) "/etc/httpd/modules"

 Apache模块的存放路径

 

 2./var/www:

 这里主要存放了

  (1)/var/www/html

web服务器预设的首页文件存放目录。默认的主页是保存在其中的。此项默认页面可在httpd.conf中进行更改。这个后面会提及。        

其实安装好apache后,只要再次默认目录下设置好页面内容后就可以在浏览器中看到了。

就好比我们刚刚安装好Apahche后,并没有过多设置什么,只需要在/var/www/html下如下设置即可:

(2)/var/www/error/

若主机因为设置错误,或者浏览器客户端要求的数据错误,在浏览器上显示的错误信息就是这个目录下的信息。

  (3)/var/www/icons/

此目录是提供Apache默认的一些图标。

  (4)/var/www/cgi-bin/

 默认的一些可执行的CGI(网页程序)程序放置的目录

   3./var/log/httpd/

默认的Apache日志文件保存在此

   4./usr/sbin/apachectl

这个就不是目录了,此处的apachectl是文件,是apache的主要执行文件,这个执行文件其实是shell script,它可以主动检测系统上的一些设置值,好让您启动apache时更简单。简单的说就是apache 的一些管理工具

   5./usr/bin/htpasswd

当我们想要登陆某些网页的时候,会提示输入账号和密码。而apache本身就提供一个最基本的密码保护方式,该密码的产生就是通过这个指令实现的。

   6./usr/sbin/httpd


服务器的根目录:/etc/httpd

根文档目录:/var/www/html

访问日志文件:/var/log/httpd/access_log

错误日志文件:/var/log/httpd/error_log

运行Apache的用户:apache

运行Apache的组:apache

端口:80

模块存放路径:/usr/lib/httpd/moudules



prefork MPM运行方式的参数:

StartServer 8

MinSpareServices 5

MaxSpareServer 20

MaxClients 150

MaxrequestsPerChild 1


 


下面是Redhat9 Linux下Apache服务httpd.conf的详细解读,自己对照了网上的一些中文翻译和Redhat9的Http.conf英文原文,针对网上的中文翻译有些修改和完善.我认为只是简单的看一下网上的翻译或是英文原文说明并没什么效果,何况网上的还有些小Miss,应该结合自己的理解和对照翻译,看自己理解的对不对,以加深对Apache配置信息的理解.这些整理时间上有点太急,肯定也会出现错误,请批评指正.:-)


#

# 基于 NCSA 服务的配置文件。

#

#这是Apache服务器主要配置文件。

#它包含影响服务器运行的配置指令。

#关于详细信息请参见<URL:http://httpd.ache.org/doc-2.0/>

#

#不要只是简单的阅读这些说明信息而不去理解它们做什么。

#这里只是做了简单的说明,如果你没有参考在线文件,你就会被警告。

#

#这些配置指令被分为下面三个部分:

#1. 控制整个Apache服务器行为的部分(即全局环境变量)

#2. 定义主要或者默认服务参数的指令,也为所有虚拟主机提供默认的设置参数

#3. 虚拟主机的设置参数,在一些Apache服务进程中配置不同的IP地址和主机名。

#

#配置和日志文件名:如果你指定的文件名以“/”开始(win32下以“dirver:/”),

#服务器将使用绝对路径,如果文件名不是以“/”开始的,那么它将把ServerRoot

#的值附加在文件名的前面,例如,对“logs/foo.log",如果ServerRoot的值

#为“/usr/local/apache2”,则该文件应为“/usr/local/apache2/logs/foo.log”


###第一区:全局环境参数

#

#这里设置的参数将影响整个Apache服务器的行为,

#例如Apache能够处理的并发请求的数量或配置文件所在的位置等.


 


#


# Don't give away too much information about all the subcomponents


# we are running. Comment out this line if you don't mind remote sites


# finding out what major optional modules you are running                   // 问:这一段的中文意思是什么?请指教


ServerTokens OS              // 1) 当服务器响应主机头[header]信息时显示Apache的版本号和主机的操作系统;


                             // 2) 如将"OS"改为"Prod",在出现错误页的时候不显示服务器操作系统的名称.



#

#ServerRoot:目录树的根结点,指出服务器保存其


#配置、出错信息和日志文件等的根目录。

#

#注意!如果你想要将它指定为NFS(或其它网络上的位置)

#请一定要去阅读与LockFile有关的文档(可能在

#<URL:http://httpd.apache.org/docs-2.0/mod/mpm_common.html#lockfile>);

#这样的话,您将节省大量的麻烦.

#

#在路径的结尾请不要添加斜线。

#

ServerRoot "/etc/httpd"      // 设置服务器的根目录.


#ScoreBoardFile:用来保存内部服务进程信息的文件。

#如果未指明(默认),scoreboard将被保存在一个匿名的共享内存段中,

#并且它不能被第三方软件所使用。

#如果指定了,要确保两个Apache不能使用同一个scoreboard文件,

#这个scoreboard文件必须保存在本地磁盘上。

#

#ScoreBoardFile run/httpd.scoreboard


#

#PidFile:当服务器启动时用于记录进程识别ID的文件。

#

PidFile run/httpd.pid        // 设置运行Apache时使用的pidFile路径


#

#Timeout:设置接收和发送前的超时秒数

#

Timeout 300                  // 如果300秒没有收到或者送出任何数据就断开该连接


#

#KeepAlive:是否允许保持连接功能(每个连接有多个请求),

#设为"Off"则停用。

#

KeepAlive Off                // 使用保持连接的功能,如果为Off 则为不使用保持连接的功能,那样客户一次请求就只能响应一个文


                             //  件,建议设为KeepAlive On


#

#MaxKeepAliveRequests:在一个保持连接期间允许的最大请求数,

#设为0表示无限制接入。

#我们推荐你将其设为一个较大的值,以获得最高的性能.


#

MaxKeepAliveRequests 100     // 使用保持连接功能时,设置客户一次请求连接能响应的文件数最大上限为100


#

#KeepAliveTimeout:同一连接同一客户端两个请求之间等待的时间秒数.

#

KeepAliveTimeout 15          // 使用保持连接功能时,如果两个相邻连接时间超过15秒,就断开连接。


##

##Server-Pool大小设定(针对MPM)

##


# prefork MPM

# StartServers:启动时服务器的进程数

# MinSpareServers:保有的备用进程的最小数目

# MaxSpareServers:保有的备用进程的最大数目

# MaxClients:服务器允许启动的最大进程数

# MaxRequestsPerChild:一个服务进程允许的最大请求数

<IfModule prefork.c>                  // 设置使用预生派(Prefork MPM)运行方式的参数,此方式是Redhat默认的方式

StartServers 8                        // 设置服务器启动时运行的进程数为8

MinSpareServers 5                     // 如果低于5个空闲子进程,就会创建新的子进程为客户提供服务

MaxSpareServers 20                    // 如果存在高于20个空闲子进程,就创建逐一删除的子进程来提高系统性能

MaxClients 150                        // 限制同一时间连接数不能超过150

MaxRequestPerChild 1000               // 限制每个子进程在结束请求之前能处理的连接请求为1000

</IfModule>


# worker MPM

# StartServers:启动时的服务进程数目

# MaxClients:允许同时连接的最大用户数目

# MinSpareThreads:保有的最小工作线程数目

# MaxSpareThreads:允许保有的最大工作线程数目

# ThreadsPerChild:每个服务进程中的工作线程常数

# MaxRequestsPerChild:服务进程中允许的最大请求数目

<IfModule worker.c>            // 设置使用工作者模式(worker MPM)运行方式的参数

StartServers 2

MaxClients 150    

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0

</IfModule>


# perchild MPM

# NumServers:服务进程数量

# StartThreads:每个服务进程中的起始线程数量

# MinSpareThreads:保有的最小线程数量

# MaxSpareThreads:保有的最大线程数量

# MaxThreadsPerChild:每个服务进程允许的最大线程数

# MaxRequestsPerChild:每个服务进程允许连接的最大数量

<IfModule perchild.c>           // 设置使用独立子进程(Perchild MPM)运行方式的参数

NumServers 5

StartThreads 5

MinSpareThreads 5

MaxSpareThreads 10

MaxThreadsPerChild 20

MaxRequestsPerChild 0

</IfModule>


#

# Listen:允许你将Apache服务绑定到指定的IP地址和端口上,以此取代默认值

# 参见<VirtualHost>指令


#

# 改变如下命令使Apache只在指定的IP地址上监听,

# 以防止它在IP地址(0.0.0.0)上监听

#

# Listen 12.34.56.78:80

Listen 80               // 设置服务器的监听端口


 


#


# 配置文件从配置目录“/etc/httpd/conf.d ”加载


#


Include conf.dpublic_html>

# AllowOverride FileInfo AuthConfig Limit Indexes

# Options MultiViews Indexes SymLinksIfOwnerMatch IncludeNoExec

# <Limit GET POST OPTIONS PROPFIND>

# Order allow,deny

# Allow from all

# </Limit>

# <LimitExcept GET POST OPTIONS PROPFIND>

# Order deny,allow

# Deny from all

# </LimitExcept>

# </Directory>


#

# DirectoryIndex:定义请求是一个目录时,Apache向用户提供服务的文件名

#

# index.html.var文件(一个类型映象文件)用于提供一个文档处理列表,

# 出于同样的目的,也可以使用MultiViews选项,但是它会非常慢。

#

DirectoryIndex  index.html index.html.var      // 当访问服务器时依次查找index.htm index.html.var


#

# AccessFileName:在每个目录中查询为目录提供附加配置指令的文件的文件名。

# 参见AllowOverride指令。

#

AccessFileName .htaccess                       // 指定保护目录配置文件的名称


#

# 下面的行防止.htaccess和.htpasswd文件被Web客户查看。

#

<Files ~ "^/.ht">                              // 拒绝访问以.ht开头的文件,即保证.htaccess文件不被访问

Order allow,deny

Deny from all

</Files>


#

# Typeconfig:定义在哪里查询mime.types文件。

#

TypeConfig conf/mime.types                      // 指定负责处理MIME对应格式的配置文件的存放位置


#

# DefaultType:定义当不能确定MIME类型时服务器提供的默认MIME类型。

# 如果你的服务主要包含text或HTML文档,“text/plain”是一个好的选择;

# 如果大多是二进制文档,诸如软件或图像,你应使用

# “application/octer-stream”来防止浏览器象显示文本那样显示二进制文件。

#

DefaultType text/plain                          // 指定默认的MIME文件类型为纯文本或HTML文件



#

# mod_mime_magic允许服务器从自己定义自己类型的文件中使用不同的线索(hints),

# 这个MIMEMagicFile指令定义hints定义所在的文件。

#

<IfModule mod_mime_magic.c>                     // 当mod_mime_magic.c模块加载时,指定Magic信息码配置文件的存放位置

# MIMEMagicFile /usr/share/magic.mime

MIMEMagicFile conf/magic

</IfModule>


#

# HostnameLookups:指定记录用户端的名字还是IP地址,例如,本指令为on时

# 记录主机名,如www.apache.org;为off时记录IP地址,204.62.129.132。

# 默认值为off,这要比设为on好得多,因为如果设为on则每个用户端请求都将会

# 至少造成对 nameserver 进行一次查询。

#

HostnameLookups Off                  // 只记录连接Apache服务器的IP地址,而不记录主机名


#

# ErrorLog:错误日志文件定位。

# 如果你没有在<VirtualHost>内定义ErrorLog指令,这个虚拟主机的错误信息

# 将记录在这里。如果你在那儿定义了ErrorLog,这些错误信息将记录在你所

# 定义的文件里,而不是这儿定义的文件。

#

ErrorLog logs/error_log              // 指定错误日志的存放位置


#

# LogLevel:控制记录在错误日志文件中的日志信息数量。

# 可能的值包括:debug,info,notice,warn,error,crit,alert,emerg。

#

LogLevel warn                        // 指定记录的错误信息的详细等级为warn 级别


#

# 下面的指令为CustomLog指令定义格式别名。

#

LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined   // 定义4种日志记录格式

LogFormat "%h %l %u %t /"%r/" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent


#

# 指定接入日志文件的定位和格式(一般日志格式)。

# 如果你没有在<VirtualHost>内定义这个指令,传输信息将记录在这里,

# 如果你定义了这个指令,则记录在你指定的位置,而不是这儿定义的位置。

#

# CustomLog logs/access_log common

CustomLog logs/access_log combined    // 指定访问日志的记录格式为combined(混合型),并指定访问日志的存放位置


#

# 如果你想要记录agent和referer信息,可以使用下面的指令

#

# CustomLog logs/referer_log referer

# CustomLog logs/agent_log agent


#

# 如果你想要使用一个文件记录access,agent和referer信息,

# 你可以如下定义这个指令:

#

# CustomLog logs/access_log combined


#

# 随意的添加包含服务器版本和虚拟主机名字一行信息到server-generated输出页中

# (内部错误文档,FTP目录列表,mod_status和mod_info输出等等,除了CGI错误

# 或自定义的错误文档以外)。

# 设为“EMail”将包含一个指向ServerAdmin的mailto:连接。

# 可以为如下值:On | Off | EMail

#

ServerSignature On                         // 设置Apache自己产生的页面中使用Apache服务器版本的签名


#

# Aliases:在这时添加你需要的别名,格式如下:

# Alias 别名真实名

#

# 注意,如果你在别名的未尾包含了“/”,那么在URL中也需要包含“/”。

# 因此,“/icons”不是这个示例中的别名。

# 如果别名中以“/”结尾,那么真实名也必须以“/”结尾,

# 如果别名中省略了结尾的“/”,那么真实名也必须省略。

#

# 我们使用别名“/icons/”来表示FancyIndexed目录列表,如果你不使用、

# FancyIndexing,你可以注释掉它。

#

Alias /icons/ "/var/www/icons/"            // 设置内容协商目录的访问别名


<Directory "/var/www/icons">               // 设置/var/www/icons目录的访问权限 

Options Indexes MultiViews                 // MultiViews: 使用内容协商功能决定被发送的网页性质

AllowOverride None

Order allow,deny

Allow from all

</Directory>


#

# 这将改变ServerRoot/manual。这个别名提供了手册页所在的位置,

# 即使你改变了你的DocumentRoot。如果你对有无手册页并不在意的话,

# 你可以注释掉它。

#

Alias /manual "/var/www/manual"             // 设置Apache手册的访问别名


<Directory "/var/www/manual">               // 设置/var/www/manual 目录的访问权限

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

Allow from all

</Directory>


 


<IfModule mod_dav_fs.c>                     // 指定DAV加锁数据库文件的存放位置

# Location of the WebDAV lock database.

DAVLockDB /var/lib/dav/lockdb

</IfModule>



#

# ScriptAlias:指定包含服务脚本的目录。

# ScriptAliases 本质上与Aliases一样,除了这里的文档在请求时做为程序处理处理以外。

# 尾部的“/”规则与Alias一样

#

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"     // 设置CGI目录的访问别名


<IfModule mod_cgid.c>                         // 由于Redhat9中不使用worker MPM运行方式,所以不加载mod_cigd.c模块

#

# 添加mod_cgid.c设置,mod_cgid提供使用cgid进行通讯的UNIX套接字的

# 脚本接口路径。

#

Scriptsock run/httpd.cgid

</IfModule>


#

# 将"/var/www/cgi-bin"改为你的ScriptAliased指定的CGI目录,

# 如果你配置了的话。

#

<Directory "/var/www/cgi-bin">                 // 设置CGI目录的访问权限

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>


#

# Redirect允许你告诉客户端使用存在于服务器名字空间中的文档,

# 而不是现在的,这帮助客户定位那些改变了位置的文档。

# 例如:

# Redirect permanent /foo http://www.example.com/bar


#

# 控制server-generated目录列表显示的指令

#


#

# FancyIndexing is whether you want fancy directory indexing or standard.

# VersionSort is whether files containing version numbers should be

# compared in the natural way, so that `apache-1.3.9.tar' is placed before

# `apache-1.3.12.tar'.                                       // 问:这一段的英文意思是什么?:)

#

IndexOptions FancyIndexing VersionSort NameWidth=*           // FancyIndexing:对每种类型的文件前加上一个小图标以示区别


                                                             // VersionSort:对同一软件的多个版本进行排序 

                                                             // NameWidth=*:文件名字段自动适应当前目录下最长文件名



#

# AddIcon* 指令告诉服务器不同扩展名的图象文件如何显示,

# 只适用于FancyIndexed指令

#

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip // 当使用FancyIndexing VersionSort 之后,配置下面的参数


                                                                // 用于告知服务器在碰到不同的文件类型或扩展名时采用

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/p.gif .pl .py

AddIcon /icons/f.gif .for

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 为那些没有显式定义图标的文件提供处理

#

DefaultIcon /icons/unknown.gif    // 当使用FancyIndexing VersionSort 之后,且无法识别文件类型时,显示此处定义的图标


#

# AddDescription允许你在server-generated索引后放置一个简短的说明。

# 只对FancyIndexed指令有效。

# 格式:AddDescription "说明" 文件名

#

# AddDescription "GZIP compressed document" .gz

# AddDescription "tar archive" .tar

# AddDescription "GZIP compressed tar archive" .tgz


#

# ReadmeName指定服务器默认查找的README文件的名字,并添加到目录列表中

#

# HeaderName指定目录列表前缀文件的文件名

ReadmeName README.html              // 当服务器自动列出目录列表时,在所生成的页面之后显示README.html的内容

HeaderName HEADER.html              // 当服务器自动列出目录列表时,在所生成的页面之前显示HEADER.html的内容


#

# IndexIgnore指定目录索引忽略并且不包含在列表中的文件名集合,

# 支持shell类型的通配符。

#

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t


#

# AddEncoding允许你在信息传送中使用(Mosaic/X 2.1+)解压缩信息,

# 注意:不是所有的浏览器都支持这个选项。

# 尽管名字相似,但是下列的指令与上面的FancyIndexing定制指令不同。

#

AddEncoding x-compress Z            // 设置在线浏览器可以实时解压.Z .gz .tgz类型文件,但并非所有浏览器都支持

AddEncoding x-gzip gz tgz


#

# DefaultLanguage和AddLanguage允许你指定文档的语言。

# 这使你可以让用户用容易理解的语言浏览文档。

#

# 指定默认的语言,这意味着所有没有指定语言的包都将使用该语言。

# 多数情况下,你也许并不想设置它,除非你确信这样做是正确的。

# 通常,不使用确定的语言比使用错误的语言要好。

#

# DefaultLanguage nl

#

# 注意1:作为语言关键字的词缀毫无疑问是不能一样的--采用波兰

# 文的文档(网络标准语言代码是pl)将希望使用“AddLanguage pl .po”

# 来避免与perl脚本的一般词缀产生二义性。

#

# 注意2: 下面的例子举例说明在一些范例中语言的二字符缩写与它的国家

# 的二字符缩写不相同,例如 “Danmark/dk” 和 “Danmark/da” 的比较.

#

# 注意3: 在 “ltz” 的情况下我们使用三字符词缀,违犯了 RFC的规定,

# 运行中将修复它并使用RFC1766标准取得参考数据。

#

# Danish (da) - Dutch (nl) - English (en) - Estonian (et)

# French (fr) - German (de) - Greek-Modern (el)

# Italian (it) - Norwegian (no) - Norwegian Nynorsk (nn) - Korean (kr)

# Portugese (pt) - Luxembourgeois* (ltz)

# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)

# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)

# Russian (ru) - Croatian (hr)

#

AddLanguage da .dk                  // 设置网页内容语言种类,(浏览器要启用内容协商),对于中文网页,此项无实际意义

AddLanguage nl .nl

AddLanguage en .en

AddLanguage et .et

AddLanguage fr .fr

AddLanguage de .de

AddLanguage he .he

AddLanguage el .el

AddLanguage it .it

AddLanguage ja .ja

AddLanguage pl .po

AddLanguage kr .kr

AddLanguage pt .pt

AddLanguage nn .nn

AddLanguage no .no

AddLanguage pt-br .pt-br

AddLanguage ltz .ltz

AddLanguage ca .ca

AddLanguage es .es

AddLanguage sv .se

AddLanguage cz .cz

AddLanguage ru .ru

AddLanguage tw .tw

AddLanguage zh-tw .tw

AddLanguage hr .hr


# LanguagePriority允许你在会话过程中优先使用一些语言。

#

# 以优先次序递减的方式列出它们。我们或多或少地采用按字母排列顺序的方式

# 排列它们。也许你想要改变这个顺序。

LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw // 当启用内容协商时,设置语言的先后顺序


#

# ForceLanguagePriority 允许你为MULTIPLE CHOICES(Prefer)[在通讯的情况下]

# 或NOT ACCEPTABLE(Fallback)[没有可接受的语言匹配的情况]提供一个结果页。

#

ForceLanguagePriority Prefer Fallback      // Prefer:当有多种语言可以匹配时,使用LanguagePriority 列表的第一项

                                           // Fallback:当没有语言可以匹配时,使用LanguagePriority 列表的第一项


#

# 为发送出的所有页指定默认的字符集,这总是一个好主意,并且为你的

# web站点的国际化打开了大门,这不正是你曾经想要的吗。同样地,指定

# 默认字符集有一些小的损害,如一个使用iso-8859-1(latin1)标准命令

# 的页面,除非以别的方式指定例如你仅仅以显式方式声明它。

# 也有一些与那些总是鼓励你使用默认字符集的javascropt和URL语法有关

# 的浏览器安全原因。

#

AddDefaultCharset ISO-8859-1               // 设置默认字符集(要设置成为简体中文,把"ISO-8859-1"改为"GB2312")


#

# 一般以文件扩展名的方式使用字符集。也许你想要避免与语言扩展发生

# 碰撞,除非你在每次改变后都做了很好的测试。

# 参见http://www.iana.org/assignments/character-sets以取得字符集

# 的名字列表和它们各自的RFCs。

#

AddCharset ISO-8859-1 .iso8859-1 .latin1               // 设置各种字符集

AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen

AddCharset ISO-8859-3 .iso8859-3 .latin3

AddCharset ISO-8859-4 .iso8859-4 .latin4

AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru

AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb

AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk

AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb

AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk

AddCharset ISO-2022-JP .iso2022-jp .jis

AddCharset ISO-2022-KR .iso2022-kr .kis

AddCharset ISO-2022-CN .iso2022-cn .cis

AddCharset Big5 .Big5 .big5

# 对于俄语,使用了多个字符集(如何使用主要依靠客户端):

AddCharset WINDOWS-1251 .cp-1251 .win-1251

AddCharset CP866 .cp866

AddCharset KOI8-r .koi8-r .koi8-ru

AddCharset KOI8-ru .koi8-uk .ua

AddCharset ISO-10646-UCS-2 .ucs2

AddCharset ISO-10646-UCS-4 .ucs4

AddCharset UTF-8 .utf8



# 下面的字符集没有映射到一个特定的标准(iso)上,但是它们在浏览器

# 中被广泛的支持。注意那些大写字母。

# (它不应该,但是它是为兼容一些浏览器而做)

#

# 参见http://www.iana.org/assianments/character-sets以取得

# 它们的列表。但是浏览器支持较少。

#

AddCharset GB2312 .gb2312 .gb

AddCharset utf-7 .utf7

AddCharset utf-8 .utf8

AddCharset big5 .big5 .b5

AddCharset EUC-TW .euc-tw

AddCharset EUC-JP .euc-jp

AddCharset EUC-KR .euc-kr

AddCharset shift_jis .sjis


#

# AddType允许你为指定的文件类型添加或覆盖mime.types文件中配置的MIME

#

AddType application/x-tar .tgz           // 增加新的MIME类型(避免用户编辑/etc/mime.types)


#

# AddHandler允许你映射确定的文件扩展名到“handlers”:

# 与文件类型无关的行为。这既能编译到服务器中也可以添加到Action指令

# 中(看下面)。


#

# 为了在ScriptAliased指令指定的以外使用CGI脚本:

#(要使它可用,你还需要在Options中添加“ExecCGI”。

#

#AddHandler cgi-script .cgi


#

# 对于那些包含他们自己的HTTP头的文件

#

# AddHandler send-as-is asis


#

# 对于server-parsed imagemap文件:

#

AddHandler imap-file map                  // 设置Apache对某些扩展名的处理方式



#

# 对于类型映像:(转移资源)

#(这是默认的设定以允许Apache的“It Worked”页能多种语言分发)。

#

AddHandler type-map var  


#

# 过滤器允许你在将它发送到客户端前进行处理。

#

# 为了在服务器端分析包含(SSI)的.shtml文档:

# (要执行这个指令,你还需要在Options指令中添加“Includes”。)

#

AddOutputFilter INCLUDES .shtml            // 使用过虑器执行SSI


#

# Action让你定义当调用匹配的媒体文件时将要执行的脚本。这将减少

# 那些经常使用的CGI脚本的URL路径名的重复输入。

# 格式:Action media/type /cgi-script/location

# 格式:Action handler-name /cgi-script/location

#


#

# 可配置的错误应答有三种风格:

# 1)plain text 2)local redirects 3) external redirects

#

# 一些示例:

# ErrorDocument 500 "The server made a boo boo."

# ErrorDocument 404 /missing.html

# ErrorDocument 404 "/cgi-bin/missing_handler.pl"

# ErrorDocument 402 http://www.example.com/subscription_info.html

#


#

# 综合应用这些指令,我们可以创建一个国际化的出错应答。

#

# 我们使用Alias来重定向任意/error/HTTP_<error>.html.var应答到

# 我们的多语言错误消息集合。使用正确的文本替代它。

#

# 通过加入下面的行,你就能够改变这些消息的显示,而不必改变

# HTTP_<error>.html.var文件。

#

# Alias /error/include/ "/your/include/path/"

#

# 以将/var/www/error/include/下的文件拷贝到/your/inclue/path/下

# 开始,你可以创建你自己的文件集合,甚至是基于每个虚拟主机的。

Alias /error/ "/var/www/error/"       // 设置错误页面目录的别名



<IfModule mod_negotiation.c>        


<IfModule mod_include.c>

<Directory "/var/www/error">          // 设置/var/www/error目录的访问权限

AllowOverride None

Options IncludesNoExec

AddOutputFilter Includes html

AddHandler type-map var

Order allow,deny

Allow from all

LanguagePriority en es de fr

ForceLanguagePriority Prefer Fallback

</Directory>

// 设置错误页面输出

ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var

ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var

ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var

ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var

ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var

ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var

ErrorDocument 410 /error/HTTP_GONE.html.var

ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var

ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var

ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var

ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var

ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var

ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var

ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var

ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var

ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var

ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var


</IfModule>

</IfModule>


#

# 下面的命令更改标准的HTTP应答行为以处理己知的浏览器问题。

#


// 设置浏览器匹配

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


#

# 下面命令关闭对那些没有尾部“/”的目录的非GET请求的重定向,

# 这些命令修复了微软的采用DAV方法不能正确处理重定向的WEB文件夹的问题。

# Apple下的DAV文件系统和Gnome下的VFS对DAV的支持也是采用这样的方法

# 进行处理的。

#

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully

BrowserMatch "^WebDrive" redirect-carefully


#

# 允许你使用URL:http://servername/server-status来通过mod_status生

# 成并报告服务器状态信息。改变.example.com为你自己的域名。

#

#<Location /server-status>

# SetHandler server-status

# Order deny,allow

# Deny from all

# Allow from .your-domain.com

#</Location>



#

# 允许使用URL:http://servername/server-info来远程报告服务器配置信息

# (需要mod_info.c支持)。改变“.example.com”为你自己的域名。

#

#<Location /server-info>

# SetHandler server-info

# Order deny,allow

# Deny from all

# Allow from .your-domain.com

#</Location>


#

# 代理服务器命令,去掉下面的行使代理服务可用。

#

#<IfModule mod_proxy.c>

#ProxyRequests On

#

#<Proxy *>

# Order deny,allow

# Deny from all

# Allow from .your-domain.com

#</Proxy>


#

# 安装或关闭HTTP/1.1“通道”头处理。

# (“Full”添加服务器版本信息,“Block”移掉所有输出“通道”头信息。

# 可以设为下面各选项之一:Off | On | Full | Block

#

# ProxyVia On


# 最好为代理服务安装高速缓冲,去掉下面几行的注释符号:

# (没有CacheRoot则不缓冲)

#

#CacheRoot "/etc/httpd/proxy"

#CacheSize 5

#CacheGcInterval 4

#CacheMaxExpire 24

#CacheLastModifiedFactor 0.1

#CacheDefaultExpire 1

#NoCache a-domain.com another-domain.edu joes.garage-sale.com


# </IfModule>

# 代理命令结束。


### 第三区:虚拟主机

#

# VirtualHost:你可以通过设置虚拟主机容器以实现在你的主机上保有多个

# 域名/主机名。大多数配置信息只使用基于名字的虚拟主机,因此服务器

# 不必担心IP地址的问题,下面的命令以*号代替虚拟主机名。

#

# 在你试着配置你的虚拟主机以前,请参见

# URL:http://httpd.apache.org/docs-2.0/vhosts/>以取得更多的信息。

#

# 你可以使用命令行选项“-S”来检验你的虚拟主机配置。


#

# 使用基于名字的虚拟主机。

#

# NameVirtualHost *


#

# 虚拟主机示例:

# 几乎所有的Apache命令都可以在虚拟主机容器中使用。

# 第一个虚拟主机区是用于向服务名未知的请求进行应答的配置。

#

#<VirtualHost *>

# ServerAdmin webmaster@dummy-host.example.com

# DocumentRoot /www/docs/dummy-host.example.com

# ServerName dummy-host.example.com

# ErrorLog logs/dummy-host.example.com-error_log

# CustomLog logs/dummy-host.example.com-access_log common

#</VirtualHost>




Apache : 首先修改Apache的配置文件,让Apache支持解析PHP文件。Apache配置文件在Apache安装目录的conf目录下的httpd.conf。

 

    1. 让Apache可以解析php文件,在配置文件中找到

        #LoadModule vhost_alias_module modules/mod_vhost_alias.so

      在下一行添加 (绿色的位置是根据PHP的所在目录而定的)

        LoadModule php5_module "D:/Develop/PHP/php5apache2_2.dll"
        PHPIniDir "D:/Develop/PHP"
        AddType application/x-httpd-php .php .html .htm

 

    2. 在配置文件中找到

        DirectoryIndex index.html

      改为

        DirectoryIndex index.php index.html

 

    3. 修改Apache站点目录,在配置文件中找到(Apache安装的目录不同,显示的值不一样)

        DocumentRoot "D:/Develop/Apache2.2/htdocs"

      改为

        DocumentRoot "D:/Workspace/PHP"

      

      再找到

        <Directory "D:/Develop/Apache2.2/htdocs">

      改为

        <Directory "D:/Workspace/PHP">  

 

 

 

    PHP : 把php.ini-development改名为php.ini,作为PHP的配置文件。修改php.ini

 

      1. 设置PHP扩展包的具体目录,找到

        ; On windows:
        ; extension_dir = "ext"

      改为 (值是ext文件夹的目录)

        ; On windows:
          extension_dir = "D:/Develop/PHP/ext"

 

      2. 开启相应的库功能,找到需要开启的库的所在行

        ;extension=php_curl.dll

        ;extension=php_gd2.dll

        ;extension=php_mbstring.dll

        ;extension=php_mysql.dll

        ;extension=php_xmlrpc.dll

         去掉前面的分号(注释),即改为

        extension=php_curl.dll

        extension=php_gd2.dll

        extension=php_mbstring.dll

        extension=php_mysql.dll

        extension=php_xmlrpc.dll

      

      3. 设置时区,找到

        ;date.timezone =

        改为

        date.timezone = Asia/Shanghai

       

    配置完成,检测一下配置是否成功。重启Apache,在站点目录下新建文件index.php,输入内容: