HTTPD设定原理

2.1 简 介
   HTTPD是一个著名的web服务器软件,其效能远在apache1/2之上,是整台服务器用户跑论坛的首选,对内存小于1G而流量非常大的用户,换用APACHE会比apache多获得一倍的负载能力。
  纵观HTTPD,它为我们的网络管理员提供了丰富多彩的功能,包括目录索引、目录别名、内容协商、可设定的HTTP错误报告、CGI程序的SetUID执行、子进程资源管理、服务器端图象映射、重写URL、URL拼写检查以及联机手册man等。也就是说,如果您在Linux Server上成功安装设定了HTTPD之后,您的计算机也将随着HTTPD的生效而摇身一变,成为一台名副其实的Web Server,这种变化的确是激动人心的。伴随着自由软件发展的强大动力,我们有理由相信HTTPD的未来是一片光明的。
2.2 所需系统资源
  2.2.1 设定文件:
  文件              来源
  /etc/httpd/conf/httpd.conf   HTTPD-1.3.12-2.i386.rpm
  /etc/httpd/conf/access.conf   HTTPD-1.3.12-2.i386.rpm
  /etc/httpd/conf/srm.conf    HTTPD-1.3.12-2.i386.rpm
  2.2.2相关工具:
  文件              来源
  /etc/rc.d/init.d/httpd     HTTPD-1.3.12-2.i386.rpm
2.3 设定方案
  与HTTPD设定相关的文件共有3个:
  /etc/httpd/conf/httpd.conf 主设定文件
  作用:定义HTTP协议的设置值和针对该服务器的操作,还包括定义三个文件的目录
  实例:
  ServerType standalone
  #定义WebServer的启动方式为standalone,以增强其对大量访问的及时响应性
  ServerRoot "/etc/httpd"
  #指定包含httpd服务器文件的目录
  LockFile /var/lock/httpd.lock
  PidFile /var/run/httpd.pid
  ScoreBoardFile /var/run/httpd.scoreboard
  Timeout 300
  #响应超时量,单位为秒
  KeepAlive On
  #允许用户建立永久连接
  MaxKeepAliveRequests 100
  KeepAliveTimeout 15
  MinSpareServers 5
  #要保留的空闲服务器进程的最小值
  MaxSpareServers 20
  #要保留的空闲服务器进程的最大值
  StartServers 8
  #系统启动时的守护进程数
  MaxClients 150
  #所能提供服务的最大客户端编号,大于它的部分被放入请求队列之中
  MaxRequestsPerChild 100
  LoadModule vhost_alias_module modules/mod_vhost_alias.so
  LoadModule env_module modules/mod_env.so
  LoadModule config_log_module modules/mod_log_config.so
  LoadModule agent_log_module modules/mod_log_agent.so
  LoadModule referer_log_module modules/mod_log_referer.so
  LoadModule mime_module modules/mod_mime.so
  LoadModule negotiation_module modules/mod_negotiation.so
  LoadModule status_module modules/mod_status.so
  LoadModule info_module modules/mod_info.so
  LoadModule includes_module modules/mod_include.so
  LoadModule autoindex_module modules/mod_autoindex.so
  LoadModule dir_module modules/mod_dir.so
  LoadModule cgi_module modules/mod_cgi.so
  LoadModule asis_module modules/mod_asis.so
  LoadModule imap_module modules/mod_imap.so
  LoadModule action_module modules/mod_actions.so
  LoadModule userdir_module modules/mod_userdir.so
  LoadModule alias_module modules/mod_alias.so
  LoadModule rewrite_module modules/mod_rewrite.so
  LoadModule access_module modules/mod_access.so
  LoadModule auth_module modules/mod_auth.so
  LoadModule anon_auth_module modules/mod_auth_anon.so
  LoadModule db_auth_module modules/mod_auth_db.so
  LoadModule digest_module modules/mod_digest.so
  LoadModule proxy_module modules/libproxy.so
  LoadModule expires_module modules/mod_expires.so
  LoadModule headers_module modules/mod_headers.so
  LoadModule usertrack_module modules/mod_usertrack.so
  LoadModule setenvif_module modules/mod_setenvif.so
  LoadModule perl_module modules/libperl.so
  LoadModule php3_module modules/libphp3.so
  ClearModuleList
  AddModule mod_vhost_alias.c
  AddModule mod_env.c
  AddModule mod_log_config.c
  AddModule mod_log_agent.c
  AddModule mod_log_referer.c
  AddModule mod_mime.c
  AddModule mod_negotiation.c
  AddModule mod_status.c
  AddModule mod_info.c
  AddModule mod_include.c
  AddModule mod_autoindex.c
  AddModule mod_dir.c
  AddModule mod_cgi.c
  AddModule mod_asis.c
  AddModule mod_imap.c
  AddModule mod_actions.c
  AddModule mod_userdir.c
  AddModule mod_alias.c
  AddModule mod_rewrite.c
  AddModule mod_access.c
  AddModule mod_auth.c
  AddModule mod_auth_anon.c
  AddModule mod_auth_db.c
  AddModule mod_digest.c
  AddModule mod_proxy.c
   AddModule mod_expires.c
  AddModule mod_headers.c
  AddModule mod_usertrack.c
  AddModule mod_so.c
  AddModule mod_setenvif.c
  AddModule mod_perl.c
  AddModule mod_php3.c
  Port 80
  #定义服务器所使用的TCP的端口号
  User nobody
  Group nobody
  #以上两行是分配给httpd的新用户的文件权限,出于安全的考虑把它们的权限设置成为最低。
  ServerAdmin root@localhost
  #设置Web管理员的邮件地址
  ServerName thj
  #定义客户端从服务器读取数据时返回给客户端的主机名,其缺省值是localhost
  DocumentRoot "/home/httpd/html"
  #设置所有HTTPD所提供的文档的根目录,比如说,用户对www.mycompany.com/index.html的访问请求,HTTPD对它的响应就是/home/httpd/html/index.html
  UserDir public_html
  DirectoryIndex index.html index.htm index.shtml index.cgi
  #设置多种成功访问主页的方式,为的是提高系统的容错性
  AccessFileName .htaccess
  UseCanonicalName On
  TypesConfig /etc/mime.types
  DefaultType text/plain
  HostnameLookups Off
  ErrorLog /var/log/httpd/error_log
  LogLevel warn
  #定义那些错误类型被记录到错误日志中
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  #所有的LogFormat都用来定义日志中的条目
  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
  ServerSignature On
  Alias /icons/ "/home/httpd/icons/"
  ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
  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
  ReadmeName README
  HeaderName HEADER
  IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
  AddEncoding x-compress Z
  AddEncoding x-gzip gz tgz
  AddLanguage en .en
  AddLanguage fr .fr
  AddLanguage de .de
  AddLanguage da .da
  AddLanguage el .el
  AddLanguage it .it
  LanguagePriority en fr de
  AddType application/x-tar .tgz
  AddType text/html .shtml
  AddHandler server-parsed .shtml
  AddHandler imap-file map
  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
  Alias /doc/ /usr/doc/
  CacheSize 5
  #定义缓存区大小,以KB为单位。可以根据需要和硬盘空间大小进行设置
  CacheGcInterval 4
  #每隔4小时检查缓存区,如果已经超过CacheSize就删除文件
  CacheMaxExpire 24
  #HTTP文件最多被保持24小时
  CacheLastModifiedFactor 0.1
  #定义HTTP文件失效期,缺省是0.1 ,意思是说失效期=离最近一次修改的时间X〈factor〉,
比如离最近一次修改的时间是5小时,那么失效期就是5X0.1=0.5小时
  CacheDefaultExpire 1
  #这一指令提供一个缺省的时间(小时)来销毁缓存的文件,这些文件的最后更改时间不详。
CacheMaxExpire 命令不覆盖这一设置
2.4 测试及管理方法
  1.每当管理员更改了HTTPD的设置之后,都应执行/etc/rc.d/init.d/httpd restart使得更改生效。
  2.HTTPD提供大量的日志文件,当HTTPD出错的时候,管理员可以根据htppd.conf中的ErrorLog定义的路径来诊断。具体方法是:tail -f /var/log/httpd/HTTPD/error_log
2.5 本章小结
  Web服务是Internet服务器最基本的服务,Linux发行版中包含的HTTPD软件是性能优良的Web服务器,也是Internet上最流行的Web服务器,由于它时刻都经历着无数使用者的测试,所以现行的HTTPD的默认选项已经是十分适合我们大家的了,你只需要更改其中几个与当前应用环境紧密相关的选项就可以达到你的目的了。
ServerRoot /HTTPD
#可以用绝对路径 e:webHTTPD
#ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerRoot定义的路径之下。
PidFile logs/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测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>
Listen 80
#端口,启动模块.下面许多模块只有在LIUNX下才有用
LoadModule access_module modules/mod_access.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_module modules/mod_auth.so
LoadModule dir_module modules/mod_dir.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule mime_module modules/mod_mime.so
negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule imap_module modules/mod_imap.so
#LoadModule auth_anon_module modules/mod_auth_anon.so
#LoadModule auth_dbm_module modules/mod_auth_dbm.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
#LoadModule isapi_module modules/mod_isapi.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule rewrite_module modules/mod_rewrite.so
#ExtendedStatus On
ServerAdmin abc@123.com
#服务器管理员邮箱,在出错,探针中显示
ServerName localhost.domain.com
UseCanonicalName Off
#是否允许对每个访问者的 DNS 域名的反向查询
DocumentRoot /HTTPD
#放网页的目录.这个很重要.
#你设置了,e:web是目录 而虚拟主机设置了e:webtwo
#虽然程序还是能运行,但是不在documentroot内的话,程序会有错误
<Directory />
Options FollowSymLinks MultiViews ExecCGI
AllowOverride None
</Directory>
<Directory /HTTPD/>
Options FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
php_admin_value open_basedir /HTTPD/
Allow from all
</Directory>
#以下是关于用户目录设定部分,即用户可以用http://www.xxxx.com/~username的方式来访问自已的网站!
#UserDir /HTTPD/webroot/aaausersfreehost/*/public_html
#<Directory e:/虚拟主机/*/public_html>
# AllowOverride None
# Options MultiViews SymLinksIfOwnerMatch IncludesNoExec ExecCGI
#下面这条指令定义php只能对public_html此目录及其子目录下的文件进行操作.
# php_flag engine off #表示此目录下的PHP文件不被解释执行,限没有PHP权限。
# php_admin_value open_basedir ./
# Order allow,deny
# Allow from all
#</Directory>
#下面这条指令可以把虚拟目录freehost映射到实际路径/HTTPD/webroot/users/下!
#AliasMatch ^/class/([0-9]).html$ /article.php?articleid=$1
#AliasMatch ^/class/([0-9] ).([0-9a-zA-Z] ).html$ /article.php?articleid=$1&pagenum=$2
DirectoryIndex index.html index.htm index.php index.cgi bbs.pl index.pl admin.php login.htm login.html login.php
#默然主机头
AccessFileName .htaccess
<Files ~ ^.ht>
Order allow,deny
Deny from all
</Files>
TypesConfig conf/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
#以下是限制主机同时并发连接数
#<IfModule prefork.c>
#ServerLimit 2000
#StartServers 15
#MinSpareServers 15
#MaxSpareServers 20
#MaxClients 850 #最大客户端
#MaxRequestsPerChild 10000 #最大请求数
#</IfModule>
#以下是对单个文件进行访问控制
#<Files ~ 要屏蔽的文件的名称>
#Order allow,deny
#Allow from 允许IP
#Deny from all
#</Files>
HostnameLookups Off
#EnableMMAP off
#EnableSendfile off
ErrorLog logs/error.log
LogLevel warn
LogFormat ferer}i er-Agent}i combined
LogFormat common
LogFormat ferer}i -> ?referer
LogFormat er-agent}i agent
CustomLog logs/access.log common
#CustomLog logs/referer.log referer
#CustomLog logs/agent.log agent
#CustomLog logs/access.log combined
ServerTokens Full
ServerSignature Off
#当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、HTTPD的版本等信息。
#Alias /class/ /HTTPD/webroot/phpa #虚拟目录啦
# <Directory /HTTPD/phpsafe> #对虚拟目录进行权限设定
# Options FollowSymLinks # MultiViews ExecCGI为有CGI执行权限
# php_admin_value safe_mode 1 #表示此目录下的PHP脚本只能有php_safe下权限
# php_admin_value open_basedir /HTTPD/phpsafe/
# 此句是限制PHP的文件操作只能限于/HTTPD/phpsafe及其子目录下,不能对此目录外的文进行操作
# php_flag engine off
#表示此目录下的PHP脚本不会被解释执行,此选项要求PHP必须以模块方式安装的!
# AllowOverride None
# Order allow,deny
# Allow from all #表示允许任何人从任何地方访问
# </Directory>
#ScriptAlias /cgi-bin/ E:/HTTPD2/cgi-bin/
#<Directory E:/HTTPD2/cgi-bin>
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>
IndexOptions FancyIndexing VersionSort
#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.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es