2011年12月13日星期二

Linux:Apache配置文件httpd.conf详细说明

# mime.types文件的位置(mod_mime)

<IfModule mpm_winnt_module>
TypesConfig conf/mime.types
</IfModule>
<IfModule mpm_prefork_module>
TypesConfig /etc/httpd/mime.types
</IfModule>
#检查服务器发送的 nonce 计数(尚未实现)(mod_auth_digest)
#AuthDigestNcCheck On
#为了跟踪客户端而分配的共享内存字节数(mod_auth_digest),每链接需要128字节。
AuthDigestShmemSize 25600
#禁止在内存中缓冲日志(mod_log_config)
BufferedLogs Off
#为了和RewriteMap*程序*通讯而使用的同步锁文件的名称(mod_rewrite)
#RewriteLock file-path

#为每个请求记录扩展的状态信息
ExtendedStatus On
##############################################################################
#####第二部分 主服务器配置[这些指令的作用域含同时含有"server config"和"virtual host"] 
##############################################################################
## 本配置文件将所有主机都当作虚拟主机,并不存在真正的"主服务器",因此这部分配置只
## 是所有虚拟主机的默认设置而已 ##

##### 适用于主服务器配置的核心(Core)指令 #####
#### 虚拟主机必须重新设定的指令
#文档树的根目录(没有真正的主服务器,因此不设置此值)(不能包含结尾斜杠)
#DocumentRoot directory-path
#当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。
#所以,必须胡乱设置一个默认的主服务器主机名
ServerName xx.xx.xx.xx
#### 目录相关
#分布式配置文件的名字
AccessFileName .htaccess
#目录仅可以使用符号链接的特性
Options FollowSymLinks
#### 应答头相关
#当应答内容是text/plain或text/html时在HTTP应答头中加入的默认字符集
AddDefaultCharset utf-8
#无法由其他方法确定内容类型时,发送的默认MIME内容类型
DefaultType application/octet-stream
#禁止生成Content-MD5应答头
ContentDigest Off
#用以创建ETag应答头的文件的属性
FileETag All
#### 貌似安全相关
#仅当一个请求映射到一个真实存在的路径时才会被接受
AcceptPathInfo Off
#禁止URL中使用经过编码的路径分割符
AllowEncodedSlashes Off
#指定内部重定向和嵌套子请求的最大数量(至少是5)
LimitInternalRecursion 10
#限制客户端发送的HTTP请求体的最大字节长度(1.2M)
LimitRequestBody 1300000
#限制基于XML的请求体的最大字节长度(1.2M)
LimitXMLRequestBody 1300000

#限制apache子进程派生的进程占用CPU的最大秒数
RLimitCPU 1 1
#限制由apache子进程派生的进程占用的最大内存字节数
RLimitMEM 1 1
#限制由Apache子进程派生的进程所派生的进程数目
RLimitNPROC 0 1
#禁止生成服务器端生成文档的页脚
ServerSignature Off
#### 性能相关
#在递送中使用内存映射来读取文件(某些情况下需要禁用)
EnableMMAP On
#使用操作系统内核的sendfile支持来将文件发送到客户端
EnableSendfile On
#禁用对客户端IP的DNS查找
HostnameLookups Off
#持久链接(禁用)
KeepAlive Off
KeepAliveTimeout 1
MaxKeepAliveRequests 1
#### 错误应答与错误日志
#自定义错误响应
#400 错误的请求
ErrorDocument 400 /error/http|ErrCode=400.htm
#403 禁止访问
ErrorDocument 403 /error/http|ErrCode=403.htm
#404 未找到
ErrorDocument 404 /error/http|ErrCode=404.htm
#405 方法不被允许
ErrorDocument 405 /error/http|ErrCode=405.htm
#406 资源已经找到但MIME类型与Accpet头中所指不兼容
ErrorDocument 406 /error/http|ErrCode=406.htm
#408 在服务器许可的等待时间内客户一直没有发出任何请求
ErrorDocument 408 /error/http|ErrCode=408.htm
#409 由于请求和资源的当前状态相冲突因此不能成功(通常和PUT有关)
ErrorDocument 409 /error/http|ErrCode=409.htm
#410 所请求的文档已经不再可用而且服务器不知道应该重定向到哪一个地址
ErrorDocument 410 /error/http|ErrCode=410.htm
#411 必须发送Content-Length头否则无法处理
ErrorDocument 411 /error/http|ErrCode=411.htm
#412 指定的一些前提条件失败
ErrorDocument 411 /error/http|ErrCode=412.htm
#413 请求实体太大
ErrorDocument 413 /error/http|ErrCode=413.htm
#414 请求URI太长
ErrorDocument 414 /error/http|ErrCode=414.htm
#415 不支持的MIME类型
ErrorDocument 415 /error/http|ErrCode=415.htm
#416 Range头所请求的范围无法满足
ErrorDocument 416 /error/http|ErrCode=416.htm
#417 执行失败
ErrorDocument 417 /error/http|ErrCode=417.htm
#423 锁定的错误
ErrorDocument 423 /error/http|ErrCode=423.htm
#500 内部服务器错误
ErrorDocument 500 /error/http|ErrCode=500.htm
#501 服务器不支持实现请求所需要的功能
ErrorDocument 501 /error/http|ErrCode=501.htm
#502 服务器用作网关或代理服务器时收到了无效响应
ErrorDocument 502 /error/http|ErrCode=502.htm
#503 服务器由于维护或者负载过重暂时不能提供服务
ErrorDocument 503 /error/http|ErrCode=503.htm
#504 不能及时地从远程服务器获得应答(作为代理或网关的服务器)
ErrorDocument 504 /error/http|ErrCode=504.htm
#505 服务器不支持请求中所指明的HTTP版本
#ErrorDocument 505 /error/http|ErrCode=505.htm
#返回给客户端的错误信息中包含的管理员邮件地址
ServerAdmin [email]webmaster@oklaoshi.org[/email]
#错误日志(未使用滚动)
<IfModule mpm_winnt_module>
ErrorLog log/error.log
LogLevel info
</IfModule>
<IfModule mpm_prefork_module>
ErrorLog /var/log/httpd/error.log
LogLevel warn
</IfModule>
#### 处理器

#定位CGI脚本解释器(仅用于Win32)
ScriptInterpreterSource Script
#强制所有匹配的文件被一个指定的处理器处理
#SetHandler handler-name|None
#### 输入输出过滤器
#压缩输出所有文本内容(目前反对使用该指令,但因其简单故而使用)
AddOutputFilterByType DEFLATE application/x-javascript application/xhtml+xml application/xslt+xml application/xml application/xml-dtd text/css text/html text/plain text/richtext text/rtf text/xml
#设置处理客户端请求和POST输入时使用的过滤器
#SetInputFilter filter[;filter...]
#设置用于处理服务器输出应答的过滤器
#SetOutputFilter filter[;filter...]
#### 规范化
#使用客户端提供的主机名和端口构建自引用URL
#可以巧妙解决双线机房以及同目录多站点的问题
#还可以巧妙解决同时运行产品环境和开发环境的问题(本配置未使用该技巧)
UseCanonicalName Off
UseCanonicalPhysicalPort Off
##### 适用于主服务器配置的动态加载模(DSO)块指令 #####
#### mod_deflate ####
#用于zlib一次压缩的片断大小(字节)(20K),一般等于较大页面的大小
DeflateBufferSize 20240
#压缩程度,取值范围在 1(最低压缩率) 到 9(最高压缩率)之间
DeflateCompressionLevel 3
#在日志中将一个指示压缩率标记附加在请求之后(关闭)
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#压缩时最多可以使用多少内存(取值范围在1到9之间)
DeflateMemLevel 9
#压缩窗口的大小(取值范围在1到15之间,越大压缩效果越好)
DeflateWindowSize 15
#目录结尾斜线(/)自动补全功能(通过重定向,强烈建议打开)
#默认的目录索引文件(强烈建议按此顺序设置)
<IfModule mpm_prefork_module>
DirectorySlash On
DirectoryIndex index.html index.htm index.php
</IfModule>
<IfModule mpm_winnt_module>
DirectorySlash Off
DirectoryIndex none
</IfModule>
#### mod_env #####
#### mod_setenvif #####
#传送shell中的环境变量
#PassEnv env-variable [env-variable] ...
#强制gzip输出[建议不要这样,会让机器人头晕]
#SetEnv force-gzip 1
#删除环境变量(默认不记录任何访问日志)
UnsetEnv AccessLog
#根据客户端请求属性设置环境变量(仅记录对txt/php/html的访问)
SetEnvIf Request_URI "\.(txt|php|html?)$" AccessLog=1
##### mod_expires #####
#启用"Expires:"和"Cache-Control:"头
ExpiresActive On
#由MIME类型配置的Expires头的值
#ExpiresByType MIME-type code seconds
#默认所有文档的有效期为30天
ExpiresDefault "access plus 30 days"
#但是php文档默认不存在有效期(随后应当根据实际情况详细设置)

ExpiresActive Off
##### mod_log_config #####
#访问日志(虚拟主机+组合日志格式)(有条件的记录)
<IfModule mpm_winnt_module>
CustomLog log/access.log "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" env=AccessLog
</IfModule>
<IfModule mpm_prefork_module>
CustomLog /var/log/httpd/access.log "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" env=AccessLog
</IfModule>
##### mod_mime #####
#在文件扩展名与特定的编码方式之间建立映射关系
#AddEncoding MIME-enc extension [extension] ...
#将所有 .html.gz .css.gz 之类经过压缩的静态内容使用"Content-Encoding: gzip"头发送,
#这样既节约带宽又比使用mod_deflate的实时压缩节约CPU
#但只适用于静态内容并且要结合内容协商模块的类型表功能才能实现,而且不利于搜索引擎机器人收录,
#考虑到mod_expires的作用,这份配置放弃这种方法
#不过这样也可能和 AddOutputFilterByType DEFLATE .... 指令冲突,需要进一步实验或寻找其他有效方法
#AddEncoding gzip .gz
#为所有文件设定特定的默认语言(简体中文)
DefaultLanguage zh-CN
#在使用MultiViews查询所匹配的文件时要包含的文件类型
#NegotiatedOnly选项规定每个跟在基础名字后面的扩展名必须关联到一个在内容协商时已知的mod_mime扩展名,
#例如:字符集、内容类型、语言、编码方式。这是一种最严格也是副作用最少的实现方法,它是默认的处理方式。
MultiviewsMatch NegotiatedOnly
#在给定的文件扩展名与特定的字符集之间建立映射
#AddCharset charset extension [extension] ...
#在文件扩展名与特定的语言之间建立映射
#AddLanguage MIME-lang extension [extension] ...
#在文件扩展名与特定的处理器之间建立映射
#AddHandler handler-name extension [extension] ...
#在文件扩展名与特定的输入过滤器之间建立映射
#AddInputFilter filter[;filter...] extension [extension] ...
#在文件扩展名与特定的输出过滤器之间建立映射关系
#AddOutputFilter filter[;filter...] extension [extension] ...
#在给定的文件扩展名与特定的内容类型之间建立映射
#AddType MIME-type extension [extension] ...
##### mod_rewrite #####
#关闭重写引擎(不可继承,必须在每个需要的虚拟主机中单独开启)
RewriteEngine Off
#重写引擎日志的详细程度(9-最详细,0-关闭)
RewriteLogLevel 0
#强制当前配置继承其父配置(映射表、条件、规则)
#RewriteOptions inherit
#定义重写发生的条件(为了提高匹配效率)和规则(不需要考虑#..内容,因为浏览器并不发送)
RewriteCond %{REQUEST_URI} \.htm$
RewriteRule ^(.+)\.htm$ $1.php [NE,C]
RewriteRule ^([^|]+)\|(.+)\.php$ $1.php?$2 [NE,L]

#为server-info处理器显示的模块增加额外信息
#AddModuleInfo module-name string

#开启带宽限制(默认是关闭的,也就是不做任何限制)
BandWidthModule On
#强制对所有请求进行限制
ForceBandWidthModule On
#连接数上限。必须与BandWidth的子网范围对应,当然也可以不使用该指令。
MaxConnection 127.0.0.0/8 2
#带宽上限(B/s)。这里限制为16Kbps
BandWidth 127.0.0.0/8 2048
#带宽下限(B/s),设为"-1"表示仅使用上限。
MinBandWidth all -1
#将数据包分割成每小块1024字节进行延迟发送,可用值为1024-131072,默认为8192。
BandWidthPacket 1024
#将所有大于50kB的文件下载速度限制压低到8Kbps
#LargeFileLimit * 50 1024
#默认到达MaxConnection限制后将发送"503"错误代码(HTTP_SERVICE_UNAVAILABLE),
#该指令允许你自定义一个未使用的错误代码(300~599)并结合ErrorDocument指令实现自定义的错误代码说明。
#BandWidthError 510
#################################################################################
##第三部分 默认目录特性/认证/授权/访问控制[这些指令的作用域含有"directory"] #####
#################################################################################
## 默认特性穷尽限制与封闭之能事,因此必须在随后的配置中按需"放水" ##
## 此部分并不包含所有作用域含有"directory"的指令 ##
<Directory />
#禁用.htaccess文件(仅可用于目录)
AllowOverride None
#目录仅可以使用符号链接的特性(仅可用于目录)
Options FollowSymLinks
#必须同时通过认证并且满足访问控制条件
Satisfy all
#使用摘要认证
AuthType Digest
AuthDigestAlgorithm MD5
AuthDigestNonceLifetime 1200
AuthDigestQop auth
AuthDigestProvider file
AuthDefaultAuthoritative On
#所有认证共用一个用户名/密码文件
<IfModule mpm_winnt_module>
AuthUserFile conf/authn.md5
</IfModule>
<IfModule mpm_prefork_module>
AuthUserFile /etc/httpd/authn.md5
</IfModule>
AuthzUserAuthoritative On
AuthzDefaultAuthoritative On
#拒绝所有访问(mod_authz_host)
#Allow from 127.0.0.1
Deny from all
Order Allow,Deny
</Directory>
#因为在所有之后合并,所以下面可以确保拒绝访问任何"secret"目录
<DirectoryMatch /secret/>
AllowOverride None
Options FollowSymLinks
Satisfy all
Deny from all
Order Allow,Deny
</DirectoryMatch>
##下面是一段非常愚蠢的做法,完全推翻了上述默认的访问控制,因为在最后合并
##实际效果变成允许GET和POST访问一切目录和文件!!!
#
#企图仅仅允许GET和POST方法(实际上行不通)
#
# Order Allow,Deny
# Deny from all
#
#
############################################################################
#### 第四部分 默认虚拟主机[这些指令的作用域都含有"virtual host"] #####
############################################################################

#(共享服务器,存放与特定子站无关或无法在子站内部统一的内容)
#文档树根目录、主机名和别名
DocumentRoot /www/oklaoshi/www
ServerName oklaoshi.org
ServerAlias oklaoshi.net oklaoshi.com oklaoshi.cn
ServerAlias [url]www.oklaoshi.org[/url] [url]www.oklaoshi.net[/url] [url]www.oklaoshi.com[/url] [url]www.oklaoshi.cn[/url]
#开启重写引擎并继承主服务器配置(映射表、条件、规则)
RewriteEngine On
RewriteOptions inherit
#传送shell中指定的加密密钥(最好只传递到特定目录下的特定文件)
#PassEnv ENCRYPT_KEY
#重新设置PHP针对每个站点的不同特性
php_admin_value open_basedir "/www/oklaoshi/"
php_admin_flag file_uploads Off
php_admin_value include_path "/www/oklaoshi/secret"
php_admin_value session.name "OKLAOSHISESSIONID"
php_admin_value session.referer_check "oklaoshi."
#默认为非本地引用
UnsetEnv Local_Referer
#判断是否为本地引用
SetEnvIf Referer "oklaoshi\.(org|net|com|cn)" Local_Referer
<Directory "/www/oklaoshi/www">
Order Allow,Deny
Allow from all
#防止盗链(必须放在<Directory>内部)
<FilesMatch "\.(js|css|gif|jpe?g|png|swf)$">
Order Allow,Deny
Allow from env=Local_Referer
</FilesMatch>
</Directory>

没有评论:

发表评论