1,默认安装目录,配置文件相对路径都基于此目录
ServerRoot "/usr/local/apache"

2,监听套接字:
Listen [IP:]port
    
此指令可以出现多次:用于监听多个不同的套接字:
Listen 80
Listen 192.168.1.101:8080
需要重载:usr/local/apache/bin/apachectl -k graceful

3,配置使用keep alive(保持连接)(并发访问量较大的服务器,建议关闭或者较短的持久连接时间)
KeepAlive {On/Off}
KeepAliveTimeout 15
MaxKeepAliveRequests 100
测试:
# telnet 192.168.9.168 80
Trying 192.168.9.168...
Connected to 192.168.9.168.
Escape character is '^]'.
GET / HTTP/1.1
Host:192.168.9.168


4,DSO模块加载方式  让服务重载配置文件可生效
# httpd -M
LoadModule module_name /path/to/module
如果使用相对路径,则相对于ServerRoot所定义的位置而言;
例如: LoadModule php5_module /usr/lib64/httpd/modules/php5.so

5,apache进程运行的属主和属组
User www
Group www

6,网站管理员邮件地址
ServerAdmin you@example.com

7,主机名
ServerName localhost

8,配置站点页面根目录
DocumentRoot "/var/www/html"

9, 站点访问控制
(1)基于文件系统路径
<Directory "/path/to/somewhere"> </Directory>
<File "/path/to/somewhere"> </File>
<FileMatch "repx"> </FileMatch>

(2)基于URL路径:
<Location [~] "">
</Location >

访问控制机制:
基于来源地址访问控制
<Directory "/path/to/somewhere">
    Options
    AllowOverride
<Directory>

Options:
Indexes:缺少默认页面时,允许将目录中所有文件以列表形式返回给用户,一般关闭
FollowSymLinks:允许访问链接文件所指向的原始文件,一般关闭
None:所有都不启用;
ExecCGI:允许使用mod_cgi模块执行目录中的脚本;
Includes:允许使用mod_include模块实现服务器端包含(SSI)
MultiViews:允许使用mod_negotination实现内容协商
SymLinksifOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向的原始文件

<Directory "/var/www/html"> 
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

10,定义默认主页面
    DirectoryIndex index.php index.html home.html   自左向右匹配


11,配置日志文件
ErrorLog "logs/error_log"
LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" combined
</IfModule>

默认: /var/log/httpd/
access.log:访问日志 ,其需要记录日志格式需自己定义
error.log:错误日志
LogLevel :debug,info,notice,warn,error,crit,alert,emerg (默认为warn)
                
定义访问日志:
CustomLog "/path/to/access_log_file" LogFormat_Name
LogFormat
                    
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
%h:Remote host客户端地址
%l:Remote logname远程登录名
%u: Remote user认证时远程用户名
%t:Time the request was received接收到请求的时间
\"%r\":First line of request请求报文的起始行
%>s:Status状态码
%b:Size of response in bytes, excluding HTTP headers响应报文的长度,单位为字节
\"%{Referer}i\":上一级访问地址
\"%{User-Agent}i\"":用户浏览器的类型

http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 

12,路径别名
Alias /icons/ "/var/www/icons/"

    
13,指定默认字符集编码
AddDefaultCharset UTF-8

14,AddType:在给定的文件扩展名与特定的内容类型之间建立映射关系。
语法:AddType MIME-type extension [extension] ...
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

15,ErrorDocument:批示当遇到错误的时候服务器将给客户端什么样的应答。
语法:ErrorDocument error-code document
error-code  服务器返回的错误代码
document  可以由一个斜杠(/)开头来指示一个本地URL(相对于DocumentRoot),或是提供一个能被客户端解释的完整的URL。此外还能提供一个可以被浏览器显示的消息。比如:

#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

15,EnableSendfile:控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送到客户端。
默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache将使用sendfile将文件内容直接发送到客户端而并不读
取文件。
这个sendfile机制避免了分开的读和写操作以及缓冲区分配,但是在一些平台或者一些文件系统上,最好禁止这个特性来避免一些问题:
有些平台可能会有编译系统检测不到的有缺陷的sendfile支持,特别是将在其他平台上使用交叉编译得到的二进制文件运行于当前对sendfile支持有缺陷的平台时;
在Linux上启用IPv6时,使用sendfile将会触发某些网卡上的TCP校验和卸载bug;
当Linux运行在Itanium处理器上的时候,sendfile可能无法处理大于2GB的文件;
对于一个通过网络挂载了NFS文件系统的DocumentRoot (比如:NFS或SMB),内核可能无法可靠的通过自己的缓冲区服务于网络文件。
如果出现以上情况,你应当禁用sendfile :
EnableSendfile Off

针对NFS或SMB,可以单独在<directory>段中指定禁用:
<Directory "/path-to-nfs-files">
EnableSendfile Off
</Directory>

16,include:在服务器配置文件中包含其它配置文件。,
语法:Include file-path|directory-path
#Include conf/extra/httpd-mpm.conf

17,12, 基于用户的访问控制
虚拟用户
    文件:/etc/httpd/conf/.htpasswd
    SQL数据库:
    dbm:
    ldap:
认证类型:
    basic:基本认证,账号和密码明文发送;
    digest:摘要认证,hash编码之后发送;
认证提供者(authentication provider) 账号和密码的存放位置
    authn
授权机制(authorization):根据什么进行授权
    
案例:基于文件,做基本认证,根据用户和组进行授权
(1)编辑配置文件,为需要认证的目录配置认证机制
<Directory "/var/www/html/authtest">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "Private Area"
        AuthUserFile "/etc/httpd/conf/.htpasswd"
        Require valid-user
#       Requite user tom
</Directory>
(2)使用htpasswd命令生成认证库   
htpasswd
    -c 创建文件,创建第一个用户时使用
    -m 密码基于MD5编码存储
    -D 删除用户
    -s 密码基于sha1编码存储
# htpasswd -c -m /etc/httpd/conf/.htpasswd tom
New password: 
Re-type new password: 
Adding password for user tom

(3)基于组进行认证
<Directory "/var/www/html/authtest">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "Private Area"
        AuthUserFile "/etc/httpd/conf/.htpasswd"
        AuthGroupFile "/etc/httpd/conf/.htgroup"
        Require group GroupName
</Directory>    
手动创建组文件:
组名:用户1 用户2 用户3    


18,MPM配置 
# httpd -l   
# vim /etc/sysconfig/httpd 更换启动模式


<IfModule prefork.c>
StartServers       10   默认启动的工作进程数
MinSpareServers    20   最小空闲进程数
MaxSpareServers   50   最大空闲进程数
ServerLimit      2000   最大活动进程数
MaxClients       1000  并发请求的最大数
MaxRequestsPerChild  7000    每个子进程在生命周期内所能够服务的最多的请求个数
</IfModule>


<IfModule worker.c>
ServerLimit 50
ThreadLimit 200
StartServers         5    默认启动子进程的个数
MaxClients         5000    并发请求的最大数
MinSpareThreads     100    最小空闲线程数
MaxSpareThreads     500    最大空闲线程数
ThreadsPerChild     100    每个子进程可生成的线程数
MaxRequestsPerChild  7000   每个子进程在生命周期内所能够服务的最多的请求个数
</IfModule>


19,虚拟主机
一个物理服务器提供多个站点;使用虚拟主机先取消中心主机
Web:Socket(IP,Port)
基于不同的IP实现不同的虚拟主机
基于不同的port实现不同的虚拟主机
基于不同的FQDN实现不同的虚拟主机  2.2需要启动NameVirtualHost *:80
        
(1)关闭中心主机
#DocumentRoot "/var/www/html"
(2)配置虚拟主机
<virtualhost IP:Port>
    ServerName
    DocumentRoot ""
    <Directory "">
        Options
    </Directory>
    ServerAlias
    ServerAdmin
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</virtualhost>


19,服务器status页面
内生的status信息,且此信息可以通过web予以显示

处理器:当文件被调用时,Apache内部表现形式:一般每种文件类型都有其隐式处理器;否则需要自己定义
显式的定义使用的处理器:SetHandler

<Location /URL>
    setHeandler server-status
</Location>


示例:
<Location /server-status>
    SetHandler sever-status
    AuthType Basic
    AuthName "Sever Status"
    AuthUserFile "/etc/http/conf/.htpasswd"
    Require valid-user
    Order deny,allow
    Deny from all
    Allow from 192.168.9.168
</Location>



20,apache开启缓存功能
apache 默认也能自带部分缓存,设置Cache-Control http头(必须启用rewirte模块才会生效)
# vim httpd.conf
#启用expires_module模块
LoadModule expires_module modules/mod_expires.so
# 启用有效期控制
ExpiresActive On
# GIF有效期为1个月
ExpiresByType p_w_picpath/gif A2592000
# HTML文档的有效期是最后修改时刻后的一星期
ExpiresByType text/html M604800
#以下的含义类似
ExpiresByType text/css “now plus 2 month”
ExpiresByType text/js “now plus 2 day”
ExpiresByType p_w_picpath/jpeg “access plus 2 month”
ExpiresByType p_w_picpath/bmp “access plus 2 month”
ExpiresByType p_w_picpath/x-icon “access plus 2 month”
ExpiresByType p_w_picpath/png “access plus 2 month”

# vim .htaccess 放到网站根目录
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|css|js|ttf|TTF)$">
    Header set Cache-Control "max-age=21600"
</FilesMatch>
<FilesMatch ".(html|htm|shtml)$">
    Header set Cache-Control "max-age=3600"
</FilesMatch>




21、使用mod_deflate模块压缩页面优化传输速度,可以写为一行,也可以写多行,默认为gzip

SetOutputFilter DEFLATE

# mod_deflate configuration
<IfModule mod_deflate.c>
 
    # Restrict compression to these MIME types
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
 
    # Level of compression (Highest 9 - Lowest 1)默认为6
    DeflateCompressionLevel 9
     
    # Netscape 4.x has some problems.
    BrowserMatch ^Mozilla/4 gzip-only-text/html
     
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
     
    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

</IfModule>


22,禁止访问tar bz2 svn结尾的文件
<Files ~ "\.tar|\.bz2|\.svn|\*.gz">
    Require all denied
</Files>
<DirectoryMatch .*\.svn/.*>
    Require all denied
</DirectoryMatch>

23,,扩展功能
    apachectl
       Apache HTTP服务控制工具
    ab
       Apache HTTP服务器性能测试工具
    apxs
       Apache 扩展工具
    configure
       配置源代码
    dbmmanage
       为基本认证创建和更新DBM格式的用户认证文件
    htcacheclean
       清理磁盘缓存
    htdigest
        为摘要认证创建和更新用户认证文件。
    htdbm
        操作 DBM 密码数据库。
    htpasswd
        为基本认证创建和更新用户认证文件。
    httxt2dbm
        为 RewriteMap 创建 dbm 文件。
    logresolve
        将 Apache 日志文件中的 IP 地址解析到主机名称。
    rotatelogs
        不关闭 Apache 而切换日志文件。
    suexec
        执行外部程序前切换用户。


23,模块解释
设置动态加载的DSO模块

#如果需要提供基于文本文件的认证,加载此模块,否则注释掉
LoadModule authn_file_module modules/mod_authn_file.so

#如果需要提供基于DBM文件的认证,加载此模块,否则注释掉
#LoadModule authn_dbm_module modules/mod_authn_dbm.so

#如果需要提供匿名用户认证,加载此模块,否则注释掉
#LoadModule authn_anon_module modules/mod_authn_anon.so

#如果需要提供基于SQL数据库的认证,加载此模块,否则注释掉
#LoadModule authn_dbd_module modules/mod_authn_dbd.so

#如果需要在未正确配置认证模块的情况下简单拒绝一切认证信息,加载此模块,否则注释掉
LoadModule authn_default_module modules/mod_authn_default.so

#此模块提供基于主机名、IP地址、请求特征的访问控制,Allow、Deny指令需要,推荐加载。
LoadModule authz_host_module modules/mod_authz_host.so

#如果需要使用纯文本文件为组提供授权支持,加载此模块,否则注释掉
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

#如果需要提供基于每个用户的授权支持,加载此模块,否则注释掉
LoadModule authz_user_module modules/mod_authz_user.so

#如果需要使用DBM文件为组提供授权支持,加载此模块,否则注释掉
#LoadModule authz_dbm_module modules/mod_authz_dbm.so

#如果需要基于文件的所有者进行授权,加载此模块,否则注释掉
#LoadModule authz_owner_module modules/mod_authz_owner.so

#如果需要在未正确配置授权支持模块的情况下简单拒绝一切授权请求,加载此模块,否则注释掉
LoadModule authz_default_module modules/mod_authz_default.so

#如果需要提供基本的HTTP认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块
LoadModule auth_basic_module modules/mod_auth_basic.so

#如果需要提供HTTP MD5摘要认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块
#LoadModule auth_digest_module modules/mod_auth_digest.so

#此模块提供文件描述符缓存支持,从而提高Apache性能,推荐加载,但请小心使用
LoadModule file_cache_module modules/mod_file_cache.so

#此模块提供基于URI键的内容动态缓存(内存或磁盘),从而提高Apache性能,必须与mod_disk_cache/mod_mem_cache同时使用,推荐加载
LoadModule cache_module modules/mod_cache.so

#此模块为mod_cache提供基于磁盘的缓存管理,推荐加载
LoadModule disk_cache_module modules/mod_disk_cache.so

#此模块为mod_cache提供基于内存的缓存管理,推荐加载
LoadModule mem_cache_module modules/mod_mem_cache.so

#如果需要管理SQL数据库连接,为需要数据库功能的模块提供支持,加载此模块,否则注释掉(推荐)
#LoadModule dbd_module modules/mod_dbd.so

#此模块将所有I/O操作转储到错误日志中,会导致在日志中写入及其海量的数据,只建议在发现问题并进行调试的时候使用
#LoadModule dumpio_module modules/mod_dumpio.so

#如果需要使用外部程序作为过滤器,加载此模块(不推荐),否则注释掉
#LoadModule ext_filter_module modules/mod_ext_filter.so

#如果需要实现服务端包含文档(SSI)处理,加载此模块(不推荐),否则注释掉
#LoadModule include_module modules/mod_include.so

#如果需要根据上下文实际情况对输出过滤器进行动态配置,加载此模块,否则注释掉
LoadModule filter_module modules/mod_filter.so

#如果需要服务器在将输出内容发送到客户端以前进行压缩以节约带宽,加载此模块(推荐),否则注释掉
LoadModule deflate_module modules/mod_deflate.so

##如果需要记录日志和定制日志文件格式,加载此模块(推荐),否则注释掉
LoadModule log_config_module modules/mod_log_config.so

#如果需要对每个请求的输入/输出字节数以及HTTP头进行日志记录,加载此模块,否则注释掉
#LoadModule logio_module modules/mod_logio.so

#如果允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量,加载此模块,否则注释掉
LoadModule env_module modules/mod_env.so

#如果允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容,加载此模块(推荐),否则注释掉
LoadModule expires_module modules/mod_expires.so

#如果允许通过配置文件控制任意的HTTP请求和应答头信息,加载此模块,否则注释掉
LoadModule headers_module modules/mod_headers.so

#如果需要实现RFC1413规定的ident查找,加载此模块(不推荐),否则注释掉
#LoadModule ident_module modules/mod_ident.so

#如果需要根据客户端请求头字段设置环境变量,加载此模块,否则注释掉
LoadModule setenvif_module modules/mod_setenvif.so

#此模块是mod_proxy的扩展,提供Apache JServ Protocol支持,只在必要时加载
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

#此模块是mod_proxy的扩展,提供负载均衡支持,只在必要时加载
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

#如果需要根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码),加载此模块,否则注释掉
LoadModule mime_module modules/mod_mime.so

#如果允许Apache提供DAV协议支持,加载此模块,否则注释掉
#LoadModule dav_module modules/mod_dav.so

#此模块生成描述服务器状态的Web页面,只建议在追踪服务器性能和问题时加载
#LoadModule status_module modules/mod_status.so

#如果需要自动对目录中的内容生成列表(类似于"ls"或"dir"命令),加载此模块(会带来安全问题,不推荐),否则注释掉
#LoadModule autoindex_module modules/mod_autoindex.so

#如果需要服务器发送自己包含HTTP头内容的文件,加载此模块,否则注释掉
#LoadModule asis_module modules/mod_asis.so

#如果需要生成Apache配置情况的Web页面,加载此模块(会带来安全问题,不推荐),否则注释掉
#LoadModule info_module modules/mod_info.so

#如果需要在非线程型MPM(prefork)上提供对CGI脚本执行的支持,加载此模块,否则注释掉
#LoadModule cgi_module modules/mod_cgi.so

#此模块在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本,如果正在多线程模式下使用CGI程序,推荐替换mod_cgi加载,否则注释掉
#LoadModule cgid_module modules/mod_cgid.so

#此模块为mod_dav访问服务器上的文件系统提供支持,如果加载mod_dav,则也应加载此模块,否则注释掉
#LoadModule dav_fs_module modules/mod_dav_fs.so

#如果需要提供大批量虚拟主机的动态配置支持,加载此模块,否则注释掉
#LoadModule vhost_alias_module modules/mod_vhost_alias.so

#如果需要提供内容协商支持(从几个有效文档中选择一个最匹配客户端要求的文档),加载此模块(推荐),否则注释掉
LoadModule negotiation_module modules/mod_negotiation.so

#如果需要指定目录索引文件以及为目录提供"尾斜杠"重定向,加载此模块(推荐),否则注释掉
LoadModule dir_module modules/mod_dir.so

#如果需要处理服务器端图像映射,加载此模块,否则注释掉
#LoadModule p_w_picpathmap_module modules/mod_p_w_picpathmap.so

#如果需要针对特定的媒体类型或请求方法执行CGI脚本,加载此模块,否则注释掉
#LoadModule actions_module modules/mod_actions.so

#如果希望服务器自动纠正URL中的拼写错误,加载此模块(推荐),否则注释掉
LoadModule speling_module modules/mod_speling.so

#如果允许在URL中通过"/~username"形式从用户自己的主目录中提供页面,加载此模块,否则注释掉
#LoadModule userdir_module modules/mod_userdir.so

#此模块提供从文件系统的不同部分到文档树的映射和URL重定向,推荐加载
LoadModule alias_module modules/mod_alias.so

#如果需要基于一定规则实时重写URL请求,加载此模块(推荐),否则注释掉
LoadModule rewrite_module modules/mod_rewrite.so