ServerRoot "/etc/httpd"

配置httpd进程的根目录(运行目录)

PidFile run/httpd.pid

定义httpd的pid文件


Timeout 60

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




KeepAlive Off

定义是否启用保持连接,默认关闭状态。由于http是无状态协议,一次请求(建立一次TCP连接)只能获取一个资源,当页面中包含多个资源的时候,就需要多次请求(建立多次TCP连接),这样导致服务器性能下降。为此定义了KeepAlive机制,可以定义在一定时间内或请求数在一定数量之内只需要建立一次TCP连接。

MaxKeepAliveRequests 100

一次保持连接的最大请求数

KeepAliveTimeout 15

一次保持连接的最长时间(秒)

    #当httpd服务使用的profork模型的时候:

 StartServers      10    #默认启动10个作业进程

 MinSpareServers    10    #空闲进程数不低于10个

 MaxSpareServers    20    #空闲进程数最大20个

 ServerLimit      256    #最多可以启动256个进程

 MaxClients       256    #最大并发客户端数为256个

 MaxRequestsPerChild 4000 #每个进程可以处理4000个请求,超过此数目进程被杀死并重新创建


需要注意的是:ServerLimit最大值为20000个,并且:由于profork是单一线程的进程,所以每个进程在同一时间里仅能处理一个请求(也就是一个请求一个进程),所以MaxClients的值要和ServerLimit一致。而且,profork的开销比较大,不过稳定性比较强。

      #当httpd服务使用的是worker模型的时候

 StartServers       6    #默认启动6个作业进程

 MaxClients       300    #最大并发客户端数为256个

 MinSpareThreads    25    #空闲线程的数量不低于25个

 MaxSpareThreads    75    #空闲线程数最大75个

 ThreadsPerChild    25    #每个进程默认启动25个线程

 MaxRequestsPerChild  0   #每个进程可以处理的请求数不限制


worker是一种基于线程的模型,一个进程内部可以启动N个线程(最大20000个),每个线程处理一个客户请求。理论上线程的开销要小于进程,但是由于Linux本身对多线程特性的支持并不是太好,所以可能会导致多线程程序运行出问题的几率比单线程程序要大的多,而且一旦一个线程出现问题,可能会导致整个进程出现问题。这个模型用的比较少。

event模型:

  event模型是一个基于线程的、更高级的事件驱动模型,可以实现一个线程处理N个请求。不过由于2.2上面是测试,2.4的配置讲解的时候我们再说。


Listen 80

监听本机所有可用IP的80端口,也可以监听特定IP:Listen 192.168.10.1:80

LoadModule [Module_Name] mod_NAME.so

动态加载模块功能。httpd是一个模块化的程序,其仅包含了一些核心功能模块,其余的模块一律都是通过动态加载来完成,这样可以保证httpd的功能尽可能不复杂,实现用户需要使用哪种功能再调用。
Include conf.d/*.conf 读取/etc/httpd/conf目录中所有以.conf结尾的文件,这里为相对路径,相对于httpd程序的根目录(/etc/httpd)

SetOutputFilter DEFLATE    #启动压缩过滤器DEFLATE

   #启动了deflate压缩模块的时候:

  AddOutputFilterByType DEFLATE text/plain  #压缩text/plain类型的文件

  AddOutputFilterByType DEFLATE text/html  #压缩text/html类型的文件

  AddOutputFilterByType DEFLATE text/xml   #压缩text/xml类型的文件

  AddOutputFilterByType DEFLATE text/javascript  #压缩text/javascript类型的文件

  AddOutputFilterByType DEFLATE text/css  #压缩text/css类型的文件

  AddOutputFilterByType DEFLATE application/xhtml+xml  #压缩这个格式的

  ...

  #DeflateCompressionLevel 9  #指定压缩级别为9,这里注释起来了使用默认压缩级别6

  # Netscape 4.x has some problems.

  BrowserMatch ^Mozilla/4 gzip-only-text/html #对火狐4.x的只使用gzip压缩text/html

 

  # Netscape 4.06-4.08 have some more problems 

  BrowserMatch ^Mozilla/4\.0[678] no-gzip #对火狐4.06-4.08不使用gzip压缩

 

  # MSIE masquerades as Netscape, but it is fine

  BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 对IE使用gizp


压缩建议仅压缩文本文件,支持的格式可以查看/etc/httpd/magic文件。

User apache   #作业进程运行者为apache用户

Group apache  #作业进程运行组为apache组

UseCanonicalName {On|Off}

当启用这个的时候,用户输入主机名后,他会重定向到ServerName的值

ServerName  www.xxx.com

域名

DocumentRoot "/var/www/html"

网页文档的根目录

 #定义/var/www/html目录的属性,如果启用~号,支持正则表达式,这里的[]代表是可选的参数

  Opitons None #定义选项参数,这里为空;选项有多个,下面会介绍

  Allowoverride None #认证类型,None表示为默认的下面的Order的IP认证

  Order allow,deny  #特定的允许,默认为拒绝

  #Allow from all  #允许所有,这里注释掉了;

  Allow from 172.16.100.0/24; #允许172.16.100.0/24这个网络访问,默认的拒绝


注:httpd 2.4中,IP控制项已经废弃了Order(顺序)、Allow from方式,而是全部使用Require all定义

   Require all denied  #拒绝所有

   Require all granted  #允许所有

   Require ip {具体IP|网络地址}  #允许特定的IP或者网络访问

   Require not ip {具体IP|网络地址}  #不允许特定的IP或者网络访问

   Require host {主机名|域名}  #允许特定的主机或域访问

   Require not host {主机名|域名}  #拒绝特定的主机或域访问

Options可以支持的参数:

  ExecCGI:允许使用mod_cgi模块执行cgi脚本

  FollowSymblink:允许追踪软接文件

  SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向的文件

  Include:允许使用mod_inclue模块实现服务器端包含(SSI)

  Index:如果没有首页文件,则启动索引

  MultiViews:启动多视图功能

  ALL:启用所有参数

 #如果启用了用户目录模块(用户个人站):

    UserDir disabled    #禁止用户创建个人站

    #UserDir public_html  #网页文件目录为public_html

DirectoryIndex index.html index.php 设定默认首页文件为index.html或者index.php,如果有index.html就显示这个文件,否则显示index.php

    Order allow,deny

    Deny from all

    Satisfy All

以 .ht开头的文件权限。 ~支持正则表达式
TypesConfig /etc/mime.types mime类型数据文件的位置在/etc/imie.types
DefaultType text/plain 默认的MIME类型,当MIME不能确定时,使用text/plain

 #如果启动了mime模块

 #  MIMEMagicFile /usr/share/magic.mime 

    MIMEMagicFile conf/magic  #决定MIME类型的文件/etc/httpd/conf/magic

ErrorLog logs/error_log 错误日志的位置为/etc/httpd/logs/error_log,注意:/etc/httpd/logs这个目录是/var/log/httpd/的软连接
LogLevel warn 记录错误日志的级别为warn

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

定义combined块的日志格式:

  %h:为客户端主机IP ,host

  %l:小写的L,不是1。定义远端的主机名,一般都为-

  %u:认证的用户名,如果没有开启认证,则为- ,username

  %t:接收到此请求的时间,time

  \"%r\":记录请求报文的起始行,request

  %>s:响应的状态码,status

  %b:响应报文的大小(不包含首部),bytes

  \"{Referer}i\":用户从哪个网页跳转过来的

  \"%{User-Agent}i\":用户的代理软件(就是浏览器软件)  

CustomLog logs/access_log combined 自定义日志并使用combined块,这里是访问日志
ServerSignature Off 隐藏Apache的敏感信息,如果为on则是不隐藏,建议设置为off
ServerTokens Prod 显示最少的OS信息,建议这样设置

Alias /web "/www/"   #定义当用户访问http://host.com/web这个URL时指向/www目录

 #定义/www目录的属性,不再多解释

    Options None

    AllowOverride None

    Order allow,deny

    allow from all


ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 定义CGI别名,允许执行CGI脚本的目录别名
AddDefaultCharset UTF-8 默认的字符集
NameVirtualHost *:80 虚拟主机监听的端口,在httpd-2.2需要使用虚拟主机必须开启此选项,而httpd-2.4则已经取消此选项

    ServerName www.a.com
    DocumentRoot /www/docs/a.com
    
        Options None
        Allowoverride AuthConfig
        AuthType basic
        AuthName "Authentication"
        AuthBasicProvider file
        AuthUserFile /etc/httpd/conf/.htpasswd
        Require valid-user
    
    ErrorLog logs/a.com-error_log
    CustomLog logs/a.com-access_log common
定义虚拟主机
 #定义一个URI,而不需要目录

    SetHandler server-status  #启动server-status功能,SetHandler是用来定义表示的功能

    Order deny,allow

    Allow from all


   RewriteEngine  on
   RewriteCond %{HTTP_REFERER} !^http://网站域名/.*$ [NC]
   RewriteRule .*\.(gif|jpg)$   http://代替图标 [L]
Apache防盗链