快捷搜索:   nginx

apache核心指令解说(二)

EnableMMAP 指令
说明 在递送中内存映射(memory-mapping)来读取
语法 EnableMMAP On|Off
默认值 EnableMMAP On
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core 此指令指示httpd在递送中如果需要读取文件的内容,它是否可以使用内存映射。当处理需要访问文件中的数据的请求时,比如说当递送一个使用mod_include进行服务器端分析的文件时,如果操作系统支持,Apache将默认使用内存映射。这种内存映射有时会带来性能的提高,但在某些情况下,您可能会需要禁用内存映射以避免一些操作系统的问题:在一些多处理器的系统上,内存映射会减低一些httpd的性能。
在挂载了NFS的DocumentRoot上,若已经将一个文件进行了内存映射,则删除或截断这个文件会造成httpd因为分段故障而崩溃。
在可能遇到这些问题的服务器配置过程中,您应当使用下面的命令来禁用内存映射:EnableMMAP Off 对于挂载了NFS的文件夹,可以单独指定禁用内存映射:<Directory "/path-to-nfs-files"> EnableMMAP Off </Directory> EnableSendfile 指令
说明 使用操作系统内核的sendfile支持来将文件发送到客户端
语法 EnableSendfile On|Off
默认值 EnableSendfile On
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.0.44 及以后的版本中可用 这个指令控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送 到客户端。默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache将使用 sendfile将文件内容直接发送到客户端而并不读取文件。译者注:Linux2.4/2.6内核都支持。这个sendfile机制避免了分开的读和写操作以及缓冲区分配,但是在一些平台或者一些文件系统上,最好禁止这个特性来避免一些问题:一些平台可能会有编译系统检测不到的有缺陷的sendfile支持,特别是将在其他平台上使用交叉编译得到的二进制文件运行于当前对sendfile支持有缺陷的平台时。
在Linux上启用IPv6时,使用sendfile将会触发某些网卡上的TCP校验和卸载bug。
当Linux运行在Itanium处理器上的时候,sendfile可能无法处理大于2GB的文件。
对于一个通过网络挂载了NFS文件系统的DocumentRoot(比如:NFS或SMB),内核可能无法可靠的通过自己的缓冲区服务于网络文件。
如果出现以上情况,你应当禁用sendfile :EnableSendfile Off 针对NFS或SMB,这个指令可以被针对目录的设置覆盖:<Directory "/path-to-nfs-files"> EnableSendfile Off </Directory> ErrorDocument 指令
说明 当遇到错误的时候服务器将给客户端什么样的应答
语法 ErrorDocument error-code document
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 在Apache2.0中引用文字的语法发生了变化 当遇到问题或错误的时候,Apache能被配置为进行以下四种处理之一:输出一个简单生硬的错误代码信息
输出一个经过定制的信息
重定向到一个本地的URL-path来处理这个问题(错误)
重定向到一个外部的URL来处理这个问题(错误)
默认会采取第1种方法,而第2-4种方法可以使用ErrorDocument指令后面跟随一个HTTP应答代码和一个URL或信息来进行配置。Apache有时会额外提供一些信息来描述所发生的问题/错误。URL可以由一个斜杠(/)开头来指示一个本地URL(相对于DocumentRoot),或是提供一个能被客户端解释的完整的URL。此外还能提供一个可以被浏览器显示的消息。比如:ErrorDocument 500
ErrorDocument 404 /cgi-bin/bad_urls.pl
ErrorDocument 401 /subscription_info.html
ErrorDocument 403 "Sorry can't allow you access today" 另外,特殊的"default"值可以被用来指定使用Apache内置的、简单的硬编码消息。当不需要这个定制特性的时候,可以用"default"恢复Apache内置的、简单的硬编码消息,否则将继承一个已有的ErrorDocument 。ErrorDocument 404 /cgi-bin/bad_urls.pl<Directory /web/docs>
ErrorDocument 404 default
</Directory> 请注意,如果您为ErrorDocument指定了一个外部的URL(比如说,任何在 开头指示了类似"http"这样的访问方法的字符串),Apache将会向客户端发送一个重定向指令来告诉它在哪里找到这个文档,哪怕这个文档最后还是在 这个服务器上。这里面包含着一些暗示:最重要的就是客户端无法接收到原始的错误状态代码,取而代之的是一个重定向状态代码。这将会使一些用状态代码来判断 一个URL是否有效的web机器人或其它客户端产生误解。另外,如果您在"ErrorDocument 401"中使用了外部URL,客户端将不会提示用户输入密码,因为它根本没收到这样一个401的状态代码。所以,如果您想使 用"ErrorDocument 401"指令,就必须指向一个本地的文档。Microsoft Internet Explorer (MSIE)在服务器端产生的错误信息"很小"的时候会忽略它们而用自己"友好的"错误信息进行取代。这个大小的阈值根据错误类型而不同。但一般来说,如 果您的错误信息的大小在512 byte以上,MSIE就会显示这些服务器端产生的错误文档而不会屏蔽它们。您可以在微软知识库的文章Q2948中获取更多信息。虽然大多数错误信息可以被改写,但是在有些情况下,将仍然使用某些内置的错误信息而不 管ErrorDocument如何设置。特别是在检测到一个"畸形"请求的情况下,正常的请求处理过程将会被立即中断,并且立即返回一个内置的错误信息。 这是为了防止某些不良请求可能导致的安全问题。在2.0版以前,信息前面会用一个不配对的双引号作为前导标志。ErrorLog 指令
说明 存放错误日志的位置
语法 ErrorLog file-path|syslog[:facility]
默认值 ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows 和 OS/2)
作用域 server config, virtual host
状态 核心(C)
模块 core ErrorLog指令指定了当服务器遇到错误时记录错误日志的文件。如果file-path不是一个以斜杠(/)开头的绝对路径,那么将被认为是一个相对于ServerRoot的相对路径。示例
ErrorLog /var/log/httpd/error_log 如果file-path以一个管道符号(|)开头,那么会为它指定一个命令来处理错误日志。示例
ErrorLog "|/usr/local/bin/httpd_errors" 如果系统支持,使用"syslog"替代文件名将通过syslogd(8)来记载日志。默认将使用系统日志机制local7 ,但您可以用"syslog:facility"语法来覆盖这个设置,其中,facility的取值为syslog(1)中记载的任何一个名字。示例
ErrorLog syslog:user 安全提示:参阅安全提示文档获得关于为什么当记录日志文件的目录对于启动服务器以外的用户可写时会对您的服务器构成安全威胁。注意
当在非Unix平台上输入文件路径的时候,路径分隔符必须统一使用正斜线(/),即使那个平台本身使用反斜线(\)。FileETag 指令
说明 用以创建ETag应答头的文件的属性
语法 FileETag component ...
默认值 FileETag INode MTime Size
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core FileETag指令配置了当文档是基于一个文件时用以创建ETag(实体标签)应答 头的文件的属性(ETag的值用于进行缓冲管理以节约网络带宽)。在Apache1.3.22及以前,ETag的值总是由文件的inode(索引节点)、 大小、最后修改时间决定。FileETag指令可以让您选择(如果您想进行选择)这其中哪些要素将被使用。主要关键字如下:INode
文件的索引节点(inode)数
MTime
文件的最后修改日期及时间
Size
文件的字节数
All
所有存在的域,等价于:
FileETag INode MTime SizeNone
如果一个文档是基于文件的,则不在应答中包含任何ETag头
可以在INode, MTime, Size前加上"+"或"-"以改变由上层继承下来的默认值。任何没有上述前缀的关键字将立刻完全取消继承下来的设置。如果一个目录的配置包含了"FileETag INode MTime Size"而其一个子目录包含了"FileETag -INode"那么这个子目录的设置(并会被其下任何没有进行覆盖的子目录继承)将等价于"FileETag MTime Size"。<Files> 指令
说明 包含作用于匹配指定文件名的指令
语法 <Files filename> ... </Files>
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core <Files>指令提供了基于文件名的访问控制,类似 于<Directory>和<Location>指令。它将配对一个</Files>指令。在此配置段中定义的指令 将作用于其基本名称(不是完整的路径)与指定的文件名相符的对象。<Files>段将根据它们在配置文件中出现的顺序被处理: 在<Directory>段和.htaccess文件被处理之后,但在<Location>段之前。请注 意:<Files>能嵌入到<Directory>段中以限制它们作用的文件系统范围。filename参数应当是一个文件名或是一个包含通配符的字符串,其中"?"匹配任何单个字符,"*"匹配任何字符串序列。在"~"字符之后同样可以使用正则表达式。比如:<Files ~ "\.(gif|jpe?g|png)$"> 将匹配绝大部分常见的因特网图象格式。然而在Apache1.3及其后继版本中,更推荐使用<FilesMatch>指令。请注意与<Directory>和<Location>配置段不同的是:<Files>配置段可用于.htaccess文件当中。这将允许用户在文件层面上控制对它们自己文件的访问。<FilesMatch> 指令说明 包含作用于与正则表达式匹配的文件名的指令
语法 <FilesMatch regex> ... </FilesMatch>
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core <FilesMatch>指令就像<Files>指令一样提供了针对文件名的访问控制。然而,它使用的是正则表达式。比如说:<FilesMatch "\.(gif|jpe?g|png)$"> 将匹配最常见的internet图形文件格式。参见
<Directory>、<Location>、<Files>配置段是如何工作的中包含了当接受一个请求时,这些不同的配置段是如何组合工作的相关解释。
ForceType 指令
说明 强制所有匹配的文件被作为指定的MIME类型进行伺服
语法 ForceType MIME-type|None
作用域 directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 Apache 2.0之后从其它模块移动到核心中 当此指令放入.htaccess文件或<Directory> 或<Location>或<Files>配置段时,此指令强制所有匹配的文件被当作在MIME-type中指定的 Content-Type来伺服。比如说,如果您有一个包含大量GIF文件的目录,可您又不想全都为它们加上".gif"扩展名的话,您可以这样做:ForceType image/gif 请注意:与DefaultType指令不同,此指令将覆盖所有的mime类型关联,包括标识文件类型的扩展名。你可以通过使用"None"覆盖任何ForceType设置:# 强制所有文件为 image/gif:
<Location /images>
ForceType image/gif
</Location># 但是正常的mime类型关联在这里:
<Location /images/mixed>
ForceType None
</Location> HostnameLookups 指令
说明 启用对客户端IP的DNS查找
语法 HostnameLookups On|Off|Double
默认值 HostnameLookups Off
作用域 server config, virtual host, directory
状态 核心(C)
模块 core 此指令启用了DNS查询,使得主机名能被记入日志(并用REMOTE_HOST变量传 递给CGI/SSI)。参数Double指定进行一次双向DNS查询。也就是说在一次反向查询之后,再对返回的结果进行一次正向查询。在正向查询结果中至 少应该有一个ip地址与初始的地址相符。(在"tcpwrappers"中的术语是PARANOID)不论此处如何设置,当您使用mod_authz_host来根据主机名控制访问的时 候,就会执行一次双向查询。这对安全来说非常必要。请注意如果您没有设置"HostnameLookups Double",这种双向查询的结果不是自动生成的。比如说:如果仅仅设置了"HostnameLookups On"而且请求是针对一个根据主机名做了限制的对象,不论双向查询是否失败,CGI还是会把单向查询的结果用REMOTE_HOST来传送。默认值设置为 Off 是为了那些不需要进行反向查询的站点节约网络带宽考虑的。这对最终用户也是有益的,因为这样他们就不用忍受查询造成的延迟了。高访问量的网站应该将此指令 设置为 Off 因为DNS查询会造成明显的时间消耗。在bin目录下的logresolve工具可以在离线的情况下对已经记入日志的IP地址进行主机名的查询。<IfDefine> 指令
说明 封装一组只有在启动时当测试结果为真时才生效的指令
语法 <IfDefine [!]parameter-name> ... </IfDefine>
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core <IfDefine test>...</IfDefine>配置段用于包含有条件的指令。<IfDefine>配置段中的指令仅当test结果为真时才进行处理。如果test为假。此配置段中的指令将会被忽略。<IfDefine>配置段中的test可以为以下两种形式之一:parameter-name
!parameter-name
在第一种情况下,仅当parameter-name已经定义的情况下才对开始和结束标记之间的指令进行处理。第二种情况则截然相反。仅当parameter-name没有定义的情况下才进行指令的处理。parameter-name是在服务启动时,通过httpd命令行的 -Dparameter 这样的形式指定的。<IfDefine>配置段是可以嵌套的,从而可以实现简单的多参数测试。比如说:httpd -DReverseProxy ...# httpd.conf
<IfDefine ReverseProxy>
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/libproxy.so
</IfDefine> <IfModule> 指令
说明 封装指令并根据指定的模块是否启用为条件而决定是否进行处理
语法 <IfModule [!]module-file|module-identifier> ... </IfModule>
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core
兼容性 module-identifier仅在 Apache 2.1 及以后的版本中可用 <IfModule test>...</IfModule>配置段用于封装根据指定的模块是否启用而决定是否生效的指令。 在<IfModule>配置段中的指令仅当test为真的时候才进行处理。如果test为假,所有其间的指令都将被忽略。<IfModule>段中的test可以为以下两种方式之一:module
!module
在第一种情况下,起始和结束标记之间的指令仅当module被载入后才被执行。此模块可以为编译时静态链接进核心的模块或是使用LoadModule指令动态载入的模块。第二种情况则相反,仅当module没有载入时才进行指令的处理。module可以是模块的标识符或者是编译模块时的文件名。比 如,rewrite_module就是一个模块标识符,而mod_rewrite.c则是编译模块时的文件名。如果模块包含多个源代码文件,您应当使用包 含STANDARD20_MODULE_STUFF字符串的那个。<IfModule>配置段是可以嵌套的,从而可以实现简单的多模块测试。此配置段主要用于需要根据某个特定的模块是否存在来决定是否使用某些配置的时候。指令一般都放在<IfModule>配置段中。
Include 指令
说明 在服务器配置文件中包含其它配置文件
语法 Include file-path|directory-path
作用域 server config, virtual host, directory
状态 核心(C)
模块 core
兼容性 通配符仅在 Apache 2.0.41 及以后的版本中可用 这个指令允许在服务器配置文件中加入其它配置文件。Shell风格(fnmatch())的通配符可以用于按照字母顺序一次包含多个文 件。另外,如果Include指向了一个目录而不是一个文件,Apache将读入该目录及其子目录下的所有文件,并依照字母顺序将这些文件作为配置文件进 行解析。但是并不推荐这么做,因为偶尔会有临时文件在这个目录中生成,从而导致httpd启动失败。文件的路径可以是一个完整的绝对路径(以一个斜杠开头):Include /usr/local/apache2/conf/ssl.conf
Include /usr/local/apache2/conf/vhosts/*.conf 或是相对于ServerRoot目录的相对路径:Include conf/ssl.conf
Include conf/vhosts/*.conf 请确保包含的目录中不包含任何诸如编辑器临时文件等引起误导的文件,因为Apache 会尝试读取它们并把其中的内容作为配置指令来处理,这样可能会导致启动过程的失败。运行 apachectl configtest 将会把配置检查时所使用的所有文件列出来以供参考。这将有助于检验配置中是否仅包含了您所希望出现那些文件。# apachectl configtest
Processing config file: /usr/local/apache2/conf/ssl.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf
Syntax OK KeepAlive 指令
说明 启用HTTP持久链接
语法 KeepAlive On|Off
默认值 KeepAlive On
作用域 server config, virtual host
状态 核心(C)
模块 core Keep-Alive扩展自HTTP/1.0和HTTP/1.1的持久链接特性。提供 了长效的HTTP会话,用以在同一个TCP连接中进行多次请求。在某些情况下,这样的方式会对包含大量图片的HTML文档造成的延时起到50%的加速作 用。在Apache1.2版本以后,您可以设置 KeepAlive On 以启用持久链接。对于HTTP/1.0的客户端来说,仅当客户端指定使用的时候才会使用持久链接连接。 此外,仅当能够预先知道传输的内容长度时,才会与HTTP/1.0的客户端建立持久链接连接。这意味着那些长度不定的内容,诸如CGI输出、SSI页面、 以及服务器端生成的目录列表等内容一般来说将无法使用与HTTP/1.0客户端建立的持久链接连接。而对于HTTP/1.1的客户端来说,如果没有进行特 殊指定,持久将是默认的连接方式。如果客户端进行了请求,将使用分块编码以解决在持久链接里发送未知长度内容的问题。KeepAliveTimeout 指令
说明 持久链接中服务器在两次请求之间等待的秒数
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论