Apache HTTP服务器 2.0版本
说明: | 接受附加路径名信息 |
---|---|
语法: | AcceptPathInfo On|Off|Default |
默认值: | AcceptPathInfo Default |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
兼容性: | Apache 2.0.30或更新版本 |
此指令决定了是否接受包含在某确定文件(或是某现有目录的一个不存在的文件)后附加的路径信息。此路径信息将在脚本里以PATH_INFO环境变量的形式出现。
比如说,假设/test/
所指向的目录下只包括一个文件:here.html
。那么对/test/here.html/more
和/test/nothere.html/more
的请求都会得到/more
这样的PATH_INFO变量。
AcceptPathInfo
指令的三个参数为:
off
/test/here.html/more
这样的在真实文件名后跟随一个路径名的请求将会返回一个404 NOT FOUND错误。on
/test/here.html
映射着一个有效的文件,上例中/test/here.html/more
这个请求就会被接受。default
AcceptPathInfo
指令存在的首要目的就是允许您覆盖处理器关于是否接受PATH_INFO的默认设置。这种覆盖是很必要的。比如说,当您使用了类似INCLUDES这样的过滤器来根据PATH_INFO产生内容时。核心处理器通常会拒绝这样的请求,而您就可以用下述的配置使这样的脚本成为可能:
<Files "mypaths.shtml">
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo on
</Files>
说明: | 发布配置文件名 |
---|---|
语法: | AccessFileName 文件名 [文件名] ... |
默认值: | AccessFileName .htaccess |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
当向客户端返回文档时,如果设置了此目录的发布配置文件功能。服务器将在这个文档的各个路径中从名字列表中查找第一个存在的配置文件。比如说:
AccessFileName .acl
在返回文档/usr/local/web/index.html
之前,服务器会为此指令读取/.acl
,/usr/.acl
,/usr/local/.acl
和/usr/local/web/.acl
除非此功能以为如下代码所禁用
<Directory />
AllowOverride None
</Directory>
说明: | 在没有进行指定字符集的情况下向回应中加入的默认字符集 |
---|---|
语法: | AddDefaultCharset On|Off|字符集 |
默认值: | AddDefaultCharset Off |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
当回应信息中没有在HTTP头中包含任何关于内容类型的参数时,此指令将会指定一个字符集的名字并添加进去。这将覆盖在文档体中通过META
标签指定的字符集。AddDefaultCharset Off
这样的设置将会禁用此功能。AddDefaultCharset On
将根据此指令的需要启用Apache内部的默认字符集——iso-8859-1
。您也可以指定使用另外一个字符集。
比如说:
AddDefaultCharset utf-8
说明: | 对特定的MIME类型指定输出过滤器 |
---|---|
语法: | AddOutputFilterByType 过滤器[;过滤器...]
MIME类型 [MIME类型] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
兼容性: | 存在于Apache 2.0.33及后继版本 |
此指令根据回应的MIME类型对请求激活了特定的输出过滤器。
下例使用了由mod_deflate
提供的DEFLATE
过滤器。它将把所有以text/html
或text/plain
为标记的输出(不论静态或动态)在发送到客户端之前进行压缩。
AddOutputFilterByType DEFLATE text/html text/plain
如果您希望用不只一个过滤器来对内容进行处理,您可以用分号来分隔它们的名字。并对每个过滤器使用AddOutputFilterByType
指令。
下述配置将使所有标记为text/html
的脚本输出首先被INCLUDES
过滤器处理然后被DEFLATE
过滤器处理。
<Location /cgi-bin/>
Options Includes
AddOutputFilterByType INCLUDES;DEFLATE text/html
</Location>
在某些情况下,用AddOutputFilterByType
来使用过滤器会遭受部分或完全的失败。比如说,如果MIME类型不能确定,那么将不会有过滤器加于其上,从而使之回落到DefaultType
的设置。甚至当DefaultType
与其相同的时候也是这样。
然而,如果您想确认对某些资源相关的内容类型使用了过滤器,您可以使用用诸如AddType
或ForceType
这样的办法。在一个(non-nph)CGI脚本中设定内容类型也很妥当。
由类型决定的输出过滤器永远不会施用于来自代理的请求。
说明: | 允许存在于.htaccess文件中的指令类型 |
---|---|
语法: | AllowOverride All|None|指令类型
[指令类型] ... |
默认值: | AllowOverride All |
上下文: | 目录 |
状态: | 核心 |
模块: | core |
当服务器发现了一个.htaccess文件(由AccessFileName
指定)时,它需要知道在这个文件中声明的哪些指令能覆盖在此之前指定的访问信息。
如果此指令设置为None
,那么.htaccess文件将被完全忽略。在这种情况下,服务器甚至都不会试着从文件系统读取.htaccess文件。
当此指令设置为All
时,所有具有.htaccess 上下文的指令都允许出现在.htaccess文件中。
directive-type可以是下列各组指令之一:
AuthDBMGroupFile
,AuthDBMUserFile
,AuthGroupFile
,AuthName
,AuthType
,AuthUserFile
,Require
等)。DefaultType
,ErrorDocument
,ForceType
,LanguagePriority
,SetHandler
,SetInputFilter
,SetOutputFilter
,和mod_mime
中的Add*和Remove*指令等)。AddDescription
,AddIcon
,AddIconByEncoding
,AddIconByType
,DefaultIcon
,DirectoryIndex
,FancyIndexing
,HeaderName
,IndexIgnore
,IndexOptions
,ReadmeName
等)。Allow
,Deny
和Order
)。Options
和XBitHack
)。例如:
AllowOverride AuthConfig Indexes
说明: | 用于HTTP认证的的验证域 |
---|---|
语法: | AuthName auth-domain |
上下文: | 目录, .htaccess |
覆盖项: | AuthConfig |
状态: | 核心 |
模块: | core |
此指令为目录的验证域设置了名字。此域将发送给客户端以使用户了解应当发送哪个用户名和密码。AuthName
指令带有一个参数。如果域的名字中包含空格,它必须用引号引起来。它必须与AuthType
和Require
指令以及诸如AuthUserFile
和AuthGroupFile
这样的指令一起工作。
举例如下:
AuthName "Top Secret"
提供给AuthName
的字符串将出现在大多数浏览器提供的密码对话框中。
说明: | 用户验证的类型 |
---|---|
语法: | AuthType Basic|Digest |
上下文: | 目录, .htaccess |
覆盖项: | AuthConfig |
状态: | 核心 |
模块: | core |
此指令选择了一个目录的用户验证的类型。目前只实现了Basic
和Digest
。
它必须和AuthName
和Require
指令以及诸如AuthUserFile
和AuthGroupFile
这样的指令一起使用。
说明: | 定位CGI脚本解释器的技术 |
---|---|
语法: | CGIMapExtension cgi-path .extension |
默认值: | None |
上下文: | 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
兼容性: | 仅适用于NetWare |
此指令用于控制Apache发现CGI脚本的解释器。比如说CGIMapExtension sys:\foo.nlm .foo
这样的设置将把所有具有.foo扩展名的CGI脚本文件传递给FOO解释器。
说明: | 启用HTTP回应头的Content-MD5的产生 |
---|---|
语法: | ContentDigest on|off |
默认值: | ContentDigest off |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | Options |
状态: | 核心 |
模块: | core |
此指令遵照RFC1854和RFC2068协议定义启用了Content-MD5
的生成。
MD5是一种为不定长度(arbitrary-length)的数据计算出一个“消息摘要”(有时也称为“指纹”)的算法。并且保证数据中的任何变化都会反应在消息摘要的变化当中。
Content-MD5
头提供了一种端到端的针对整个消息体的完整性检测方法。代理或者客户端会检查此头以侦测在传输过程中,消息体是否产生了意外的改变。一个头的例子如下:
Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
请注意,因为对于每个请求(没有对其值进行缓存)都要进行消息摘要的运算所以这会对您的服务器造成性能方面的问题。
Content-MD5
仅为由核心伺服的文档进行发送,而对于模块将不予理会。比如说SSI文档,CGI脚本的输出和字节范围的回应都不包括这个头。
说明: | 在服务器无法由其他方法确定类型时,发送的默认MIME内容类型。 |
---|---|
语法: | DefaultType MIME类型 |
默认值: | DefaultType text/plain |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
有时会发生这样的事:服务器会被要求提供一个文档,而这个文档的类型无法由它的MIME类型映射所决定。
服务器必须通知客户端其文档的内容类型。所以当一个未知类型出现时,将会使用DefaultType
。比如说:
DefaultType image/gif
这样的配置对于里面有很多gif图片而有些在文件名中缺少.gif扩展名的目录非常合适。
注意:与ForceType
指令的不同之处在于:此指令仅提供了默认的mime类型。所有其它mime类型的定义,包括文件的扩展名,或那些可以标识一种媒体类型的都会覆盖此默认值。
说明: | 封装一组指令,使之仅对具有某个名字的文件系统目录及其子目录起作用。 |
---|---|
语法: | <Directory 目录路径>
... </Directory> |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
<Directory>
和</Directory>
用于封装一组指令,使之仅对某个目录及其子目录生效。任何在目录上下文中可以使用的指令都允许在这种情况下使用。Directory-path可以为一个目录的完整路径,抑或是包含了Unix外壳匹配语法的通配符字串。在通配符字串中,“?”匹配任何单个的字符,“*”匹配任何字符序列。您也可以使用“[]”来确定字符范围。以上通配符都不能匹配“/”字符。所以<Directory /*/public_html>
将无法匹配/home/user/public_html
,但<Directory /home/*/public_html>
能够正确匹配。比如说:
<Directory /usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</Directory>
在使用directory-path参数的时候要注意:它们必须与Apache用于访问文件的文件系统路径保持一致。赋予特定<Directory>的指令将无法对通过不同路径指向的同一个目录文件生效,比如说通过另外一个符号连接生成的路径。
扩展的正则表达式也可以通过附加一个~
字符来使用。比如说:
<Directory ~ "^/www/.*/[0-9]{3}">
将匹配/www/下的所有由3个数字组成的目录。
如果有多个(非正则表达式)directory配置段符合包含某文档的目录(或其父目录),那么指令将以最短目录最先应用的规则进行应用。并杂以.htaccess文件中的指令。比如说在
<Directory />
AllowOverride None
</Directory>
<Directory /home/>
AllowOverride FileInfo
</Directory>
中,访问文档/home/web/dir/doc.html
的步骤如下:
AllowOverride None
(禁用.htaccess
文件)。AllowOverride FileInfo
(针对目录/home/web
)。/home/web/.htaccess
中的FileInfo指令正则表达式将在所有普通配置段应用后才予以考虑。所有的正则表达式将根据它们出现在配置文件中的顺序进行验证。比如说,以下配置:
<Directory ~ abc$>
... directives here ...
</Directory>
正则表达式配置段将在所有普通的<Directory>和.htaccess
文件应用后才予以考虑。所以正则表达式将匹配/home/abc/public_html/abc
并予以应用。
请注意:Apache对<Directory />的默认访问权限为Allow from All
。这意味着Apache将伺服任何通过URL映射的文件。我们建议您将这个配置做如下屏蔽:
<Directory />
Order Deny,Allow
Deny from All
</Directory>
然后在您想要使之被访问的目录中覆盖此配置。参阅安全提示页获取更多详情。
一般来说,directory小节会出现在access.conf文件中,但它们也可能出现在任何配置文件中。<Directory>
指令不可被嵌套使用,也不能出现在<Limit>
或<LimitExcept>
小节中。
说明: | 封装一些指令并施用于文件系统中符合一个正则表达式的目录及其子目录 |
---|---|
语法: | <DirectoryMatch regex>
... </Directory> |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
<DirectoryMatch>
和</DirectoryMatch>
用于封装一组指令。与<Directory>
类似,此组指令将仅施用于指定名字的目录及其子目录。然而,它可以接受一个正则表达式作为参数。比如说:
<DirectoryMatch "^/www/.*/[0-9]{3}">
将匹配/www/
下所有由3个数字组成的目录。
<Directory>
获取如何在普通的<Directory>
中使用正则表达式的描述。说明: | 组成网络上可以观看的主文档树的目录 |
---|---|
语法: | DocumentRoot 目录路径 |
默认值: | DocumentRoot /usr/local/apache/htdocs |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
此指令设置了httpd来伺服的目录。在没有使用类似Alias这样的指令的情况下,服务器会将请求中的URL附加到document root后面以构成指向文档的路径。比如说:
DocumentRoot /usr/web
于是对于http://www.my.host.com/index.html
的访问就会指向/usr/web/index.html
。
指定DocumentRoot
时不应包括最后的“/”。
说明: | 在分发中使用内存映射(memory-mapping)来读取文件 |
---|---|
语法: | EnableMMAP on|off |
默认值: | EnableMMAP on |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
此指令控制着httpd在分发中如果需要读取一个文件的内容,它是否可以使用内存映射。当处理一个需要访问在一个文件中的数据的请求时,比如说当分发一个使用mod_include
指令进行服务器端分析的文件时,如果操作系统支持,Apache将默认使用内存映射。
这种内存映射有时会带来性能的提高,但在某些情况下,您可能会需要禁用内存映射以避免一些操作系统的问题:
DocumentRoot
上,当httpd已经将一个文件进行了内存映射的情况下,删除或截断了这个文件会造成httpd因为堆栈溢出而崩溃。在可能遇到这些问题的服务器配置过程中,您应当使用下面这样的命令来禁用内存映射:
EnableMMAP off
说明: | 定义了当遇到错误的时候服务器将给客户端什么样的回应 |
---|---|
语法: | ErrorDocument 错误代码文档 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
兼容性: | 在Apache 2.0中引用文字的语法有了不同 |
当遇到问题或错误的时候,Apache能被配置为进行以下四种处理之一:
默认会采取第一种方法,而第2-4种可以使用ErrorDocument
指令后面跟随一个HTTP回应代码和一个URL或信息来进行配置。Apache有时会额外提供一些信息来描述所发生的问题/错误。
URL可以由一个斜杠(/)开头来指示一个本地的URL,或是提供一个能被客户端解释的完整的URL。此外还能提供一个可以被浏览器显示的消息。比如说:
ErrorDocument 500
http://foo.example.com/cgi-bin/tester
ErrorDocument 404 /cgi-bin/bad_urls.pl
ErrorDocument 401 /subscription_info.html
ErrorDocument 403 "Sorry can't allow you access
today"
请注意,如果您为ErrorDocument
指定了一个外部的URL(比如说,任何在开头指示了类似“http”这样的访问方法的字串),Apache将会向客户端发送一个转向指令来告诉它在哪里找到这个文档,哪怕这个文档最后还是在这个服务器上。这里面包含着一些暗示:最重要的就是客户端无法接收到一个原始的错误状态代码,取而代之的是一个转向状态代码。这将会使一些用状态代码来判断一个URL是否有效的web机器人或其它客户端产生误解。另外,如果您在ErrorDocument 401
中使用了外部URL,客户端将不会提示用户输入密码,因为它根本没收到这样一个401的状态代码。所以,如果您想使用“ErrorDocument 401”指令,它必须指向一个本地的文档。
Microsoft Internet Explorer (MSIE)在服务器端产生的错误信息“很小”的时候会忽略它们而用自己的“友好的”错误信息进行取代。这个大小的阈值根据错误类型而不同。但一般来说,如果您使您的错误文档的大小在512byte以上,MSIE就会显示这些服务器端产生的错误文档而不会屏蔽它们。您可以在微软知识库的文章Q294807中获取更多信息。
在2.0版以前,信息前面会加以单个的双引号字符。
说明: | 定位服务器存放错误日志的位置 |
---|---|
语法: | ErrorLog 文件路径|syslog[:facility] |
默认值: | ErrorLog logs/error_log (Unix)
ErrorLog logs/error.log (Windows and OS/2) |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
ErrorLog
指令指定了当服务器遇到错误时记录错误日志的文件名。如果文件路径没有以一个斜杠(/)开头,那么它将会指定一个相对与ServerRoot
的路径。如果文件路径以一个管道(|)开头,那么会为它指定一个命令来处理错误日志。
如果系统支持,使用syslog
替代文件名将启用通过syslogd(8)来记载日志。默认将使用系统日志机制local7
,但您可以用syslog:
facility语法来覆盖这个设置,其中,facility的取值为syslog(1)中记载的任何一个名字。
安全提示:参阅安全提示文档获得关于为什么当您记录日志文件的目录对于启动服务器以外的用户是可写的会对您的服务器构成安全威胁。
说明: | 用以创建ETag HTTP回应头的文件的属性 |
---|---|
语法: | FileETag 组件名 ... |
默认值: | FileETag INode MTime Size |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
FileETag
指令配置了当文档是基于一个文件时用以创建Etag(entity tag)回应头域的文件的属性。(ETag的值用于进行缓冲管理以节约网络带宽。)在Apache 1.3.22及以前,ETag的值总是由文件的索引节,大小和最后修改时间(mtime)决定。FileETag指令可以让您选择(如果您想进行选择)这其中哪些要素将被使用。主要关键字如下:
FileETag INode MTime Size
’)INode,MTime和Size关键字可以在加以‘+’或‘-’前缀,用以改变由更上层继承下来的默认值。任何没有上述前缀的关键字将立刻完全取消继承下来的设置。
如果一个目录的配置包含了‘FileETag INode MTime Size
’而其一个子目录包含了‘FileETag -INode
’那么这个子目录的设置(并会被其下任何没有进行覆盖的子目录继承)将等价于‘FileETag MTime Size
’。
说明: | 包含将施用于匹配指定文件名的指令 |
---|---|
语法: | <Files 文件名> ... </Files> |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
<Files>
指令提供了基于文件名的访问控制。它相对于Directory
指令和Location
指令。它将匹配一个</Files>
指令。在此配置段中定义的指令将赋予基本名称(不是完整的路径)与指定的文件名相符的对象。<Files>
配置段将根据它们在配置文件出现的顺序被处理:在<Directory>
配置段和.htaccess
文件被读入之后,但在<Location>
配置段之前。请注意:<Files>
能嵌入到<Directory>
配置段中以限制它们被赋予的文件系统部分。
filename参数应当包括一个文件名或是一个通配符字串,其中‘?’匹配任何单个字符,‘*’匹配任何字串序列。扩展正则表达式也同样可以在使用了~
字符后被使用。比如说:
<Files ~ "\.(gif|jpe?g|png)$">
将匹配绝大部分常见的因特网图象格式。然而在Apache 1.3及其后继版本中,更推荐使用<FilesMatch>
指令。
请注意与 <Directory>
和<Location>
配置段不同的是:<Files>
配置段可用于.htaccess文件当中。这将允许用户在文件和文件之间的层面上控制对它们自己文件的访问。
说明: | 包含施用与匹配正则表达式的文件名的指令 |
---|---|
语法: | <FilesMatch 正则表达式> ... </FilesMatch> |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
<FilesMatch>
指令就像<Files>
指令一样提供了针对文件名的访问控制。然而,它可以使用正则表达式。比如说:
<FilesMatch "\.(gif|jpe?g|png)$">
将匹配最常见的internet图形文件格式。
说明: | 强制所有符合的文件被作为指定的MIME内容类型进行伺服 |
---|---|
语法: | ForceType mime类型 |
上下文: | 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
兼容性: | 在Apache 2.0中移入内核 |
当此指令放入.htaccess
文件或<Directory>
、<Location>
、<Files>
配置段时,此指令强制所有符合的文件被当作在mime类型制定的内容类型来伺服。比如说,如果您有一个包含大量GIF文件的目录,可您又不想全都为它们加上".gif"扩展名的话,您可以这样做:
ForceType image/gif
请注意:与DefaultType
指令不同,此指令将覆盖所有的mime类型关联。包括文件的扩展名。这将指定媒体的类型.
说明: | 启用对客户端IP的DNS查找 |
---|---|
语法: | HostnameLookups on|off|double |
默认值: | HostnameLookups off |
上下文: | 服务器配置, 虚拟主机, 目录 |
状态: | 核心 |
模块: | core |
此指令启用了DNS查询,使得主机名能被记入日志(并用REMOTE_HOST
参数传递给CGI/SSI)。参数double
指定进行一次双向DNS。也就是说在一次反向查询之后,再对返回的结果进行一次forward查询。在forward查询结果中至少应该有一个ip地址与初始的地址相符。(在"tcpwrappers"中的术语是PARANOID
。)
不论如何设置,当您使用mod_access
来控制根据主机名的访问的时候,就会执行一次双向查询。这对安全来说非常必要。请注意如果您没有设置HostnameLookups double
,这种双向查询的结果不是自动生成的。比如说:如果仅仅设置了HostnameLookups on
而且请求是针对一个根据主机名做了限制的对象,不论双向查询是否失败,CGI还是会把单向查询的结果用REMOTE_HOST
来传送。
默认值设置为off是为了那些不需要进行反向查询的站点节约网络带宽考虑的。这对最终用户也是有益的,因为这样他们就不用忍受查询造成的延迟了。高访问量的网站应该将此指令设置为off
因为DNS查询会造成明显的时间消耗。在/support目录下的logresolve工具可以在离线的情况下对已经记入日志的IP地址进行主机名的查询。
说明: | 启用对远端用户的RFC1413鉴证的日志 |
---|---|
语法: | IdentityCheck on|off |
默认值: | IdentityCheck off |
上下文: | 服务器配置, 虚拟主机, 目录 |
状态: | 核心 |
模块: | core |
当客户端机器运行了identd或类似程序时,此指令启用了每个连接的远端用户名的RFC1413兼容的日志记录。此信息将记入access日志中。
此信息除了用于基本的跟踪以外是不应该多加信任的。
请注意因为对于每个请求都会进行这样的查询,所以这样设置有可能会使您的服务器访问出现严重的延迟。当涉及到防火墙的时候,每次查询都会因为失败的可能而对每次点击增加30秒的延迟。所以一般来说对于公网上的服务器这个指令并不是很有用。
说明: | 只有在启动时进行了一个成功的测试后才进行的一个封装指令 |
---|---|
语法: | <IfDefine [!]参数名> ...
</IfDefine> |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
<IfDefine测试>...</IfDefine>
配置段用于标识附加施用条件的指令。<IfDefine>
配置段中的指令仅当测试结果为真时才进行处理。如果测试失败。此配置段中的指令将会被忽略。
<IfDefine>
配置段中的测试可以为以下两种形式之一:
!
参数名在第一种情况下,仅当符合参数名的参数已经定义的情况下才对开始和结束标记之间的指令进行处理。第二种情况则截然相反。仅当参数名没有定义的情况下才进行指令的处理。
参数名变量是在服务启动时,通过httpd
命令行的-D
参数-这样的形式指定的。
<IfDefine>
配置段是可以嵌套的,从而可以实现简单的多参数测试。比如说:
$ httpd -DReverseProxy ... # httpd.conf <IfDefine ReverseProxy> LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/libproxy.so </IfDefine>
说明: | 封装指令并根据指定的模块是否存在为条件而决定是否进行处理 |
---|---|
语法: | <IfModule [!]模块名> ...
</IfModule> |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
<IfModule 测试>...</IfModule>
配置段用于标识根据指定模块的存在与否而决定是否进行处理的指令。在<IfModule>
配置段中的指令仅当测试为真的时候才进行处理。如果测试失败,所有其间的指令都将忽略。
<IfModule>
段中的测试可以为以下两种方式之一:
在第一种情况下,起始和结束标记之间的指令仅当符合模块名的模块载入后才被执行。此模块可以为编译时加入的抑或是使用LoadModule
指令动态载入的。第二种情况是相反的。仅当模块名没有载入时才进行指令的处理。
模块名参数是在模块编译时模块的文件名。比如说:mod_rewrite.c
。如果模块包含多个源代码文件,您应当使用包含STANDARD20_MODULE_STUFF
的那个文件。
<IfModule>
配置段是可以嵌套的,从而可以实现简单的多模块测试。比如说:
<IfModule>
配置段中。说明: | 于服务器配置文件中包含其它配置文件 |
---|---|
语法: | Include 文件路径|目录路径 |
上下文: | 服务器配置, 虚拟主机, 目录 |
状态: | 核心 |
模块: | core |
此指令允许在服务器配置文件中加入其它配置文件。
如果Include
指向了一个目录而不是一个文件,Apache将读入目录及其子目录下的所有文件,并依照字母顺序将这些文件作为配置文件进行解析。
文件的路径可以是一个完整的绝对路径(比如说,以一个斜杠开头),或是相对于ServerRoot
目录的相对路径
举例如下:
Include /usr/local/apache/conf/ssl.conf
Include /usr/local/apache/conf/vhosts/
或是使用相对于您的ServerRoot
目录的相对路径:
Include conf/ssl.conf
Include conf/vhosts/
请确保包含的目录中不包含任何诸如编辑器临时文件等引起误导的文件,因为Apache会尝试着读取它们并把其中的内容作为配置指令来处理,这样可能会导致启动过程的失败。运行apachectl configtest
将会把配置检查时所使用的所有文件列出来以供参考。
root@host# apachectl configtest Processing config directory: /usr/local/apache/conf/vhosts Processing config file: /usr/local/apache/conf/vhosts/vhost1 Processing config file: /usr/local/apache/conf/vhosts/vhost2 Syntax OK
这将有助于检验配置中是否仅包含了您所希望出现那些文件。
说明: | 启用HTTP持续作用 |
---|---|
语法: | KeepAlive on|off |
默认值: | KeepAlive On |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
持续作用扩展自HTTP/1.0和HTTP/1.1的长连接特性。提供了长效的HTTP会话,用以在同一个TCP连接中进行多次请求。在某些情况下,这样的方式会对包含大量图片的HTML文档造成的延时起到50%的加速作用。在Apache 1.2版本以后,您可以设置KeepAlive On
以启用持续作用。
对于HTTP/1.0的客户端来说,仅当客户端指定使用的时候才会使用持续作用连接。此外,仅当能够预先知道传输的内容长度时,才会与HTTP/1.0的客户端建立持续作用连接。这意味着那些变长的内容,诸如CGI输出、SSI页面、以及服务器端生成的目录列表等内容一般来说将无法使用与HTTP/1.0客户端建立的持续作用连接。而对于HTTP/1.1的客户端来说,如果没有进行特殊指定,长连接将是默认的连接方式。如果客户端进行了请求,将使用分块编码以解决在长连接里发送未知长度内容的问题。
说明: | 持续作用中服务器在两次请求之间等待的时间数 |
---|---|
语法: | KeepAliveTimeout 秒数 |
默认值: | KeepAliveTimeout 15 |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
Apache在关闭连接前等待下一次请求的时间。一旦收到一个请求,超时值将会被设置为Timeout
指令指定的值。
对于高负荷的服务器来说,把KeepAliveTimeout
设置成一个比较大的值会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的服务器进程越多。
说明: | 限定访问控制仅施用于某些特定的HTTP方法 |
---|---|
语法: | <Limit 方法 [方法] ... > ...
</Limit> |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
访问控制一般来说是对所有的访问方法都生效的,这也是我们普遍希望达到的效果。一般情况下,访问控制指令不应该放入<limit>
配置段中。
<Limit>
指令的目的是限制访问控制的效果使其仅施用于某些HTTP方法。对于其它方法,<Limit>
括号中的访问限制将不起任何作用。下例中的访问控制仅施用于POST,PUT和DELETE方法,其它方法不受任何影响:
<Limit POST PUT DELETE>
Require valid-user
</Limit>
列出的方法名可为下列的一个或多个:GET,POST,PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,和UNLOCK。方法名是大小写敏感的。如果使用了GET的定义,它会同时限制HEAD请求。
说明: | 对除了指定以外的所有HTTP方法限定访问控制。 |
---|---|
语法: | <LimitExcept 方法 [方法] ... > ...
</LimitExcept> |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
<LimitExcept>
和</LimitExcept>
用于封装一组访问控制指令,并将其施用于所有未在参数中标出的HTTP访问方法。也就是说,与<Limit>
相反,它用于控制标准的和非标准/无法辨识的方法。参阅<Limit>
文档获取详情。
比如说:
<LimitExcept POST GET>
Require valid-user
<LimitExcept>
说明: | 限制客户端发送的HTTP请求体的总长度 |
---|---|
语法: | LimitRequestBody 字节数 |
默认值: | LimitRequestBody 0 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
此指令在0(意味着无限制)到2147483647(2GB)间限制了请求体所允许的字节数。默认值在编译期以常量DEFAULT_LIMIT_REQUEST_BODY
定义(发布值为0)。
LimitRequestBody
指令允许用户在给予指令的内容里(服务器、每个目录、每个文件或是每个位置)对一个HTTP请求的消息体设置一个大小限制。如果客户端的请求超出了这个限制,服务器会回报一个错误而不是伺服这个请求。一个普通请求的信息体在很大程度上取决于资源和这个资源允许的方法。CGI脚本经常用消息体把表单的信息传递给服务器。使用PUT方法至少会需要与服务器期望从这个资源得到的信息量差不多大小的值。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。
比如说,如果您允许文件上传到某个位置,而且希望能将上传文件的大小设置为100K,您可以使用下面的指令:
LimitRequestBody 102400
说明: | 限制接受客户端请求中HTTP请求头域的数量 |
---|---|
语法: | LimitRequestFields 数量 |
默认值: | LimitRequestFields 100 |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
数量是一个0(意味着不限)到32767之间的整数。默认值为编译期中的常量DEFAULT_LIMIT_REQUEST_FIELDS
所指定(发布值为100)。
LimitRequestFields
指令允许服务器管理员修改在一个HTTP请求中的请求头域的数量限制。服务器需要此值大于一个普通客户端请求中包含头域的数量。一个客户端请求头域的数量很少大于20,但根据客户端的不同这个数字有很大的差别,经常取决于用户配置他们的浏览器扩展以支持更详细的内容协商(content negotiation)。可选的HTTP扩展经常使用请求头域来实现。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。如果正常使用的客户端得到了服务器的错误回应,指出其在请求中发送了过多的头域,您应该适当的增大此值。
举例如下:
LimitRequestFields 50
说明: | 限制客户端发送的请求头的大小 |
---|---|
语法: | LimitRequestFieldsize 字节数 |
默认值: | LimitRequestFieldsize 8190 |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
此指令指定了一个HTTP请求头允许的大小。其字节数的取值范围为0到编译期常量DEFAULT_LIMIT_REQUEST_FIELDSIZE
的值(发布值为8190)。
LimitRequestFieldsize
指令允许服务器管理员在服务器编译时设定的输入缓冲大小的范围之下降低关于HTTP请求头域大小的限制。一般来说,服务器需要此值足够大,以适应普通客户端的任何请求的头域大小。一个普通头域的大小对于不同的客户端来说是有着很大差别的,一般与用户配置他们的浏览器以支持更多的内容协议密切相关。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。
举例如下:
LimitRequestFieldSize 16380
说明: | 限制接受客户端发送的HTTP请求的行数大小 |
---|---|
语法: | LimitRequestLine 字节数 |
默认值: | LimitRequestLine 8190 |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
此指令将设置HTTP请求行的字节数限制在0到编译期常量DEFAULT_LIMIT_REQUEST_LINE
(发布值为8190)之间。
LimitRequestLine
指令允许服务器管理员在服务器编译时设定的输入缓冲大小的范围之下降低客户端HTTP请求行允许大小的限制。因为请求行包括HTTP方法、URI和协议版本,所以LimitRequestLine
指令会加限制于涉及服务器的请求URI的长度。服务器会需要这个值足够大以装载它所有的资源名,包括可能在GET请求中所传递的查询部分的所有信息。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。
举例如下:
LimitRequestLine 16380
说明: | 限制基于XML的请求体的大小 |
---|---|
语法: | LimitXMLRequestBody 数值 |
默认值: | LimitXMLRequestBody 1000000 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
限制基于XML的请求体大小的最大值(以字节为单位),0
将禁用这一检查。
比如说:
LimitXMLRequestBody 0
说明: | 将封装的指令施用于匹配的URL |
---|---|
语法: | <Location
URL-path|URL> ... </Location> |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
<Location>
提供了基于URL的访问控制。与<Directory>
指令类似,它也会启用一个以</Location>
结尾的子配置段。<Location>
配置段的处理位于<Directory>
配置段和.htaccess
文件读入以及<Files>
配置段之后,并依照在配置文件中出现的顺序进行处理。
请注意:URL根本不必与文件系统一起排列,必须强调的是,<Location>的操作完全在文件系统以外。
对所有的初始(非代理)请求来说,匹配的URL应该是具有/path/
形式的URL路径。不包括访问方法、主机名、端口或查 询字串等。对于代理的请求,匹配的URL必须为 scheme://servername/path
的形式,而且必须包括前缀。
URL可以用一个通配符字串来进行通配符的处理。‘?’匹配任何单个的字符,而‘*’匹配所有字符序列。
也可以使用扩展的正则表达式,附加~
字符来进行说明。
例如:
<Location ~ "/(extra|special)/data">
将匹配所有包含字串"/extra/data"或"/special/data"的URL。在Apache 1.3及其后续版本中,加入了一个新的<LocationMatch>
命令,其功能与<Location>
的正则表达式版本相同。
<Location>
的功能在与SetHandler
指令联用时发挥最大效能。比如说启用状态请求,但仅对foo.com的浏览器起效,您可以这样使用:
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
斜线字符根据它在URL中出现的位置不同有着特殊的意义。大家可能都已经习惯在文件系统中,多个毗邻的斜线会被作为单一的斜线处理(例如/home///foo
与/home/foo
相同)。但在URL里面,这样是行不通的。<LocationMatch>
指令和正则表达式版本的<Location>
要求您根据您的目的明确的使用多重斜线。比如说<LocationMatch ^/abc>
将匹配请求URL/abc
但不会匹配请求URL//abc
。而非正则表达式版本的<Location>
指令在用于代理请求时,也有类似表现。但当非正则表达式版本的<Location>
用于非代理请求时,它会将多个毗邻的斜线认作单个斜线。比如说,如果您指定了<Location /abc/def>
而请求是指向/abc//def
的,那么它们就是匹配的。
说明: | 将封装的指令施用于匹配正则表达式的URL |
---|---|
语法: | <LocationMatch
正则表达式> ... </Location> |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
<LocationMatch>
与<Location>
指令相同,提供了基于URL的访问控制。但它使用正则表达式作为参数,而不是简单字符串。比如说:
<LocationMatch "/(extra|special)/data">
将匹配包含子串"/extra/data"或"/special/data"的URL。
说明: | 控制错误日志的详细程度 |
---|---|
语法: | LogLevel 级别 |
默认值: | LogLevel warn |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
LogLevel
用于调整记于错误日志中的信息的详细程度。(参阅ErrorLog
指令)。可以选择下列级别,依照重要性降序排列:
Level | Description | Example |
---|---|---|
emerg |
紧急 - 系统无法使用。 | "Child cannot open lock file. Exiting" |
alert |
必须立即采取措施。 | "getpwuid: couldn't determine user name from uid" |
crit |
致命情况。 | "socket: Failed to get a socket, exiting child" |
error |
错误情况。 | "Premature end of script headers" |
warn |
警告情况。 | "child process 1234 did not exit, sending another SIGHUP" |
notice |
一般重要情况。 | "httpd: caught SIGBUS, attempting to dump core in ..." |
info |
普通信息。 | "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..." |
debug |
出错级别信息 | "Opening config file ..." |
当指定了特定级别时,所有级别高于它的信息也会同时报告。比如说,当指定了LogLevel info
时,所有 notice
和warn
级别的信息也会被记录。
建议至少要使用crit
级别。
示例如下:
LogLevel notice
说明: | 一个长连接中允许的请求数量 |
---|---|
语法: | MaxKeepAliveRequests 数量 |
默认值: | MaxKeepAliveRequests 100 |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
MaxKeepAliveRequests
指令限制了当启用KeepAlive
时,每个连接允许的请求数量。如果将此值设为"0
",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。
示例如下:
MaxKeepAliveRequests 500
说明: | 为一个基于域名的虚拟主机指定一个IP地址 |
---|---|
语法: | NameVirtualHost 地址[:端口] |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
如果您要配置基于域名的虚拟主机,NameVirtualHost
指令就是您必须的指令之一。
尽管地址参数可以使用主机名,但建议您还是使用IP地址。比如说:
NameVirtualHost 111.22.33.44
使用NameVirtualHost
指令,您可以指定一个基于域名的虚拟主机将使用哪个IP地址来接受请求。在一个防火墙或是其它代理接受了请求并把它转到服务器所在的另外一个IP地址上的情况下,您必须指定伺服请求的机器物理界面上的IP地址。如果您对于多个地址使用了多个基于域名的虚拟主机,您应该为每个地址使用此指令。
请注意:“主服务器”和任何其它默认服务器都不会伺服发送到NameVirtualHost
IP地址的请求。(除非在某些情况下,您指定了NameVirtualHost
但没有为这个地址指定任何虚拟主机)。
另外,您还可以为您使用的基于域名的虚拟主机指定一个端口号。 比如说:
NameVirtualHost 111.22.33.44:8080
IPv6地址必须封装在一对方括号内,如下例所示:
NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
为接受所有界面的请求,您可以使用参数*
NameVirtualHost *
请注意<VirtualHost>指令的参数必须与NameVirtualHost
指令的参数完全匹配。
NameVirtualHost 1.2.3.4
<VirtualHost 1.2.3.4>
...
</VirtualHost>
说明: | 配置在特定目录使用哪些特性 |
---|---|
语法: | Options [+|-]可选项 [[+|-]可选项] ... |
默认值: | Options All |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | Options |
状态: | 核心 |
模块: | core |
Options
指令控制了在特定目录中将使用哪些服务器特性。
可选项能设置为None
,在这种情况下,将不启用任何额外特性。或设置为以下选项中的一个或多个:
<Directory>
配置段的路径名。<Location>
配置段中,则此设置会被忽略。<Location>
配置段中,此选项将被忽略。一般来说,如果一个目录被多次设置了Options
,则最特殊的一个会被完全接受,而各个可选项的设定彼此并不融合。然而,如果所有施用于Options
指令的可选项前都加有+或-符号,此可选项将被合并。所有前面加有+号的可选项将强制覆盖当前可选项设置,而所有前面有-号的可选项将强制从当前可选项设置中去除。
比如说,没有任何+和-符号:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options Includes
</Directory>
则只有Includes
设置到/web/docs/spec目录上。然而如果第二个Options
指令使用了+和-符号:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +Includes -Indexes
</Directory>
那么就会有FollowSymLinks
和Includes
设置到/web/docs/spec目录上。
请注意:使用-IncludesNOEXEC
或是-Includes
时,不论前面如何设置,都会完全禁用服务器端包含。
没有其它设置时,默认设置为All
。
说明: | 选择哪个认证用户能访问某个资源 |
---|---|
语法: | Require entity-name [entity-name] ... |
上下文: | 目录, .htaccess |
覆盖项: | AuthConfig |
状态: | 核心 |
模块: | core |
此指令选择那个认证用户能访问一个目录。其语法如下:
只有指定的用户可以访问此目录。
只有隶属于指定用户组的用户可以访问此目录。
所有有效用户都可以访问此目录。
Require
必须伴随AuthName
和AuthType
指令,以及诸如AuthUserFile
和AuthGroupFile
(用以定义用户和用户组)以确保其能够正确工作。例如:
AuthType Basic
AuthName "Restricted Directory"
AuthUserFile /web/users
AuthGroupFile /web/groups
Require group admin
使用这种方法施用的访问控制对所有方法都有效。 这是一般情况下期望达到的效果。如果您仅希望对某个特定的方法加以限制,而不涉及其它方法时,您可以将Require
语句放入<Limit>
配置段中。
说明: | 限制由Apache载入的子进程的CPU占用 |
---|---|
语法: | RLimitCPU 数值|max [数值|max] |
默认值: | 未定义,使用操作系统默认值 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
使用一个或两个参数。第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值或是max以表示服务器的限制设置为操作系统允许的最大值。增大此资源限制最大值需要以root运行服务器或是在初始化启动语句中进行设置。
这个限制将施于Apache子服务请求衍生出的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,但不包括所有从Apache父进程衍生出的进程。比如说管道日志。
CPU资源限制表示为每进程占用的秒数。
说明: | 限制由Apache载入的子进程的内存占用 |
---|---|
语法: | RLimitMEM 数值|max [数值|max] |
默认值: | 未定义,使用操作系统默认值 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
使用一个或两个参数。第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值或是max以表示服务器的限制设置为操作系统允许的最大值。增大此资源限制最大值需要以root运行服务器或是在初始化启动语句中进行设置。
这个限制将施于Apache子服务请求衍生出的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,但不包括所有从Apache父进程衍生出的进程。比如说管道日志。
内存资源限制表示为每进程占用的字节数。
说明: | 限制由Apache载入的子进程的进程载入数目 |
---|---|
语法: | RLimitNPROC 数值|max [数值|max] |
默认值: | 未定义,使用操作系统默认值 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
使用一个或两个参数。第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值或是max以表示服务器的限制设置为操作系统允许的最大值。增大此资源限制最大值需要以root权限运行服务器或是在初始化启动语句中进行设置。
这个限制将施于Apache子服务请求衍生出的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,但不包括所有从Apache父进程衍生出的进程。比如说管道日志。
进程限制控制了每用户的进程数。
请注意:如果CGI进程不是以web服务器的userid启动的,那么此指令将限制服务器自己能够创建的进程数目。此种情况将在错误日志中以无法创建进行记录。
说明: | 主机级别的访问控制和用户认证之间的关系 |
---|---|
语法: | Satisfy any|all |
默认值: | Satisfy all |
上下文: | 目录, .htaccess |
覆盖项: | AuthConfig |
状态: | 核心 |
模块: | core |
在同时使用Allow
和Require
同时使用时的访问策略。参数可以设置为'all'或者'any'。此指令仅在某个特定区域的访问权限同时被用户名/密码和客户端、主机地址进行限定的时候起作用。默认行为("all")采取客户端首先通过地址访问限制并输入有效的用户名和密码的方式。使用可选项"any"将使客户端在通过主机限制或是输入一个有效的用户名和密码两种方式之一得到访问权限。这样,就可以通过密码来限制一个区域的访问,但允许某些特定地址的客户端访问时不需要输入密码。
比如说,如果您想让您局域网内的用户访问您的web网站时不受限制,但局域网外的用户需提供密码才能进行访问,您可以采取类似如下的配置:
Require valid-user
Allow from 192.168.1
Satisfy any
说明: | 定位CGI脚本解释器的技术 |
---|---|
语法: | ScriptInterpreterSource 注册表项|脚本 |
默认值: | ScriptInterpreterSource 脚本 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
兼容性: | 仅用于Win32 |
此指令用于控制Apache如何找到运行CGI脚本所需的解释器。默认使用的技术是在脚本中以#!行指定的解释器。设置ScriptInterpreterSource registry
将使用脚本文件扩展名(比如说.pl)作为搜索项对Windows注册表进行搜索。
说明: | 服务器返回给客户端的错误信息中包含的邮件地址 |
---|---|
语法: | ServerAdmin 邮件地址 |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
ServerAdmin
设置了在所有返回给客户端的错误信息中包含的邮件地址。
您为这个目的专门设置一个邮箱是值得的比如说:
ServerAdmin [email protected]
因为用户一般不会注意到他们在讨论服务器的问题!
说明: | 匹配一个基于域名的虚拟主机的候补域名 |
---|---|
语法: | ServerAlias 主机名 [主机名] ... |
上下文: | 虚拟主机 |
状态: | 核心 |
模块: | core |
ServerAlias
指令与基于域名的虚拟主机联用,设定主机的候补域名。
<VirtualHost *>
ServerName server.domain.com
ServerAlias server server2.domain.com server2
...
</VirtualHost>
说明: | 服务器用于辨识自己的主机名和端口号 |
---|---|
语法: | ServerName 完整的域名[:端口号] |
上下文: | 服务器配置, 虚拟主机 |
状态: | 核心 |
模块: | core |
兼容性: | 在2.0版中,此指令代替了1.3版的Port 指令的功能。 |
ServerName
指令设置了服务器用于辨识自己的主机名和端口号。这主要用于创建转向URL。比如说,一个放置web服务器的主机域名为simple.example.com
,但同时有一个DNS别名www.example.com
。而您希望web服务器更显著一点,您可以使用如下的指令:
ServerName www.example.com:80
当没有指定ServerName
时,服务器会尝试着对IP地址进行反向查询来推出主机名。如果在服务器名中没有指定端口号,服务器会使用接受请求的那个端口。为了加强可靠性和可预测性,您应该使用ServerName
显式的指定一个主机名和端口号。
如果您正在使用基于域名的虚拟主机,在<VirtualHost>
配置段中的ServerName
将指定为了匹配这个虚拟主机,在请求的Host:
头中必须出现的主机名。
请参阅UseCanonicalName
指令以获得关于自指示(self-referential)URL(比如说,使用mod_dir
模块)是需要指定一个特定端口,还是使用客户端请求的端口号的更详细的信息。
说明: | 为兼容性不好的浏览器访问基于域名的虚拟主机保留的URL路径名 |
---|---|
语法: | ServerPath URL-path |
上下文: | 虚拟主机 |
状态: | 核心 |
模块: | core |
ServerPath
指令为主机设置了保守的(legacy)URL路径名,用于和基于域名的虚拟主机配合使用。
说明: | 服务器安装基础目录 |
---|---|
语法: | ServerRoot 目录路径 |
默认值: | ServerRoot /usr/local/apache |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
ServerRoot
指令设置了服务器存在的目录。一般来说它将包含conf/
和logs/
子目录。其它配置文件的相对路径即基于此目录。
ServerRoot /home/httpd
httpd
的-d
参数说明: | 配置服务器生成页面的页脚 |
---|---|
语法: | ServerSignature On|Off|EMail |
默认值: | ServerSignature Off |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | All |
状态: | 核心 |
模块: | core |
ServerSignature
指令允许您配置服务器端生 成文档的页脚(错误信息、mod_proxy的ftp目录列表、mod_info的输出)。您启用这个页脚的原因主要在于处于一个代理服务器链中的时候,用户基本无法辨识出究竟是链中的哪个服务器真正产生了返回的错误信息。
默认的Off
设定没有错误行(这样便与Apache 1.2及更旧版本兼容)。采用On
会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName
,而EMail
设置会如文档中说明的那样额外创建一个指向ServerAdmin
的"mailto:"部分。
说明: | 配置服务器HTTP回应头 |
---|---|
语法: | ServerTokens Major|Minor|Minimal|ProductOnly|OS|Full |
默认值: | ServerTokens Full |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
此指令控制了Server
回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息。
ServerTokens Prod[uctOnly]
Server:Apache
ServerTokens Major
Server:Apache/2
ServerTokens Minor
Server:Apache/2.0
ServerTokens Min[imal]
Server:Apache/2.0.41
ServerTokens OS
Server: Apache/2.0.41 (Unix)
ServerTokens Full
(or not specified)Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
此设置将施用与整个服务器,而且不能在虚拟主机的管理层次上予以启用或禁用。
说明: | 强制所有匹配文件被一个处理器处理 |
---|---|
语法: | SetHandler 处理器名 |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
兼容性: | 在Apache 2.0中移入核心 |
当此指令放入.htaccess
文件或是<Directory>
、 <Location>
配置段中时,此指令将强制所有匹配的文件通过处理器名指定的处理器来解析。比如说:如果有一个目录,您想不管其中的文件有怎么样的扩展名,都将它作为图像映射规则文件来解析,您可以将下例放入那个目录的.htaccess
文件中:
SetHandler imap-file
再来一个例子:如果您想当http://servername/status
被请求时,服务器显示一个状态报告,您可以将下面的语句放入httpd.conf里面:
<Location /status>
SetHandler server-status
</Location>
说明: | 设置处理客户端请求和POST输入时使用的过滤器 |
---|---|
语法: | SetInputFilter 过滤器[;过滤器...] |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
SetInputFilter
指令为服务器接受并处理客户端请求和POST输入设置了过滤器。这是在其它地方设置的包括AddInputFilter
指令在内的过滤器的外加过滤器。
如果设置了多于一个的过滤器,它们必须按照处理内容的顺序用分号分隔。
说明: | 设置用于处理服务器回应的过滤器 |
---|---|
语法: | SetOutputFilter 过滤器[;过滤器...] |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | 核心 |
模块: | core |
SetOutputFilter
指令设置了用于在服务器回应发送到客户端之前使用的过滤器。这是在其它地方设置的包括AddInputFilter
指令在内的过滤器的外加过滤器。
例如:下述配置将会把/www/data/
目录下的所有文件作为服务器端包含文件来处理。
<Directory /www/data/>
SetOutputFilter INCLUDES
</Directory>
如果设置了多于一个的过滤器,它们必须按照处理内容的顺序用分号分隔。
说明: | 对于某些事件,服务器在断定请求失败前等待的时间 |
---|---|
语法: | TimeOut 数字 |
默认值: | TimeOut 300 |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
TimeOut
指令现用于设置Apache在等待以下三种事件的时间长度:
我们计划在发展里程中,逐步把它们分别变得更易配置。计时器在1.2版本之前的默认值为1200,而现在已经设置为300了,但对于绝大多数情况来说仍是足够的。没有把它默认值设的更小的原因在于代码里还有点问题:有时发送一个包之后,计时器没有复位。
说明: | 配置服务器如何决定它自己的域名和端口 |
---|---|
语法: | UseCanonicalName on|off|dns |
默认值: | UseCanonicalName on |
上下文: | 服务器配置, 虚拟主机, 目录 |
状态: | 核心 |
模块: | core |
在很多情况下,Apache必须构建一个自指向URL——即一个指回相同服务器的URL。使用UseCanonicalName on
Apache将会使用ServerName
指令中指定的主机名和端口号来构建服务器的标准域名。这个域名将用于所有的自指向URL、SERVER_NAME
和CGI中SERVER_PORT
的取值。
设置为UseCanonicalName off
时,如果客户端提供了相关信息(否则,将如上所述使用标准域名),Apache将会使用这些信息来构建自指向URL。这些值与基于域名的虚拟主机对于同样的客户端实现的相同。CGI变量SERVER_NAME
和SERVER_PORT
也会由客户端提供的值来构建。
用这样的方式成功解决问题的例子如下:在一个局域网内,您想让连接主机的用户使用诸如www
这样的短域名进行访问。您会注意到,如果用户键入了类似http://www/splat
这样的一个短域名和一个目录的URL,而没有最后的斜线,Apache会将他们转向到http://www.domain.com/splat/
。如果您在这个目录上启用了鉴权,这会导致用户必须进行两次验证(一次针对www
而另外一次针对www.domain.com
——参阅关于此主题的FAQ获得更多信息)。但如果UseCanonicalName
设为off,Apache就会转向到http://www/splat/
。
第三个可选项是UseCanonicalName DNS
,用于为大量基于IP的虚拟主机支持那些老土的不提供Host:
头的浏览器使用。使用这个可选项时,Apache将对有客户端连入的服务器的IP地址进行反向DNS查询,以构建自指向URL。
警告:如果CGI对SERVER_NAME
的值作出了假定,它们会被此可选项破坏。客户端对于给出它们想要的主机名这样的行动是完全不受限制的。但如果CGI仅使用SERVER_NAME
来构建自指向的URL,它们会工作的很好。
说明: | 包含仅施用于指定主机名或IP地址的指令 |
---|---|
语法: | <VirtualHost
地址[:端口号] [地址[:端口号]]
...> ... </VirtualHost> |
上下文: | 服务器配置 |
状态: | 核心 |
模块: | core |
<VirtualHost>
和</VirtualHost>
用于封装一组仅施用于特定虚拟主机的指令。任何在虚拟主机配置中可以使用的指令也同样可以在这里使用。当服务器接受了一个特定虚拟主机的文档请求时,它会使用封装在<VirtualHost>
配置段中的指令。地址可以是
NameVirtualHost *
配合使用以匹配所有
的IP地址;或是_default_
,与基于IP的虚拟主机联用以捕获所
有没有匹配的IP地址。
<VirtualHost 10.1.2.3>
ServerAdmin [email protected]
DocumentRoot /www/docs/host.foo.com
ServerName host.foo.com
ErrorLog logs/host.foo.com-error_log
TransferLog logs/host.foo.com-access_log
</VirtualHost>
IPv6的地址必须放入方括号中指定,否则作为可选项的端口号将无法确定。一个IPv6的示例如下:
<VirtualHost [fe80::a00:20ff:fea7:ccea]>
ServerAdmin [email protected]
DocumentRoot /www/docs/host.foo.com
ServerName host.foo.com
ErrorLog logs/host.foo.com-error_log
TransferLog logs/host.foo.com-access_log
</VirtualHost>
每个虚拟主机必须对应不同的IP地址、端口号或是不同的主机名。在第一种情况下,服务器所在物理机器必须配置为可以为多个地址接受IP包。(在机器没有多个网络硬件界面的情况下,如果您的操作系统支持,您可以使用ifconfig alias
命令来达到这个目的。)。
当使用基于IP的虚拟主机时,特殊的名称_default_
可以在没有匹配上其它列出的虚拟主机的情况下作为匹配任何IP地址的虚拟主机。在没有进行_default_虚拟主机的设定时,在没有IP与请求匹配的情况下,将使用“主服务器”(包括所有在虚拟主机配置段之外的配置)的配置。(但请注意:任何匹配NameVirtualHost
指令的IP地址既不会使用"main"服务器配置,也不会使用_default_虚拟主机的配置。 参阅基于域名的虚拟主机文档获得更多详情。)
您可以指定一个:端口
来改变匹配的端口。如果没有指定,它将沿用主服务器中离它最近的那个Listen
语句指定的值。您也可以指定:*
来匹配那个地址上的所有端口。(当您使用_default_
时,这是推荐采用的方法。)
安全提示:参阅安全提示文档获得为什么当您存储日志文件的目录对于启动服务器以外的用户来说是可写的会危及服务器安全的详细资料。
注意:<VirtualHost>
的使用不会影响到Apache侦听的地址。您也许需要使用Listen
来确保Apache侦听着正确的地址。