描述: | 为协议的侦听器套接字配置优化 |
---|---|
句法: | AcceptFilter protocol accept_filter |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
该指令根据Protocol
类型为侦听套接字启用特定于操作系统的优化。基本前提是内核在接收到数据或缓冲整个HTTP请求之前,不向服务器进程发送套接字。当前仅支持
FreeBSD的Accept Filters,Linux的更原始的
TCP_DEFER_ACCEPT
和Windows的优化的AcceptEx()。
使用none
的参数将禁止任何接受该协议过滤器。这对于要求服务器首先发送数据的协议很有用,例如ftp:
或nntp
:
AcceptFilter nntp none
默认协议名称https
用于端口443和http
所有其他端口。要指定另一个协议正在与侦听端口一起使用,请将protocol
参数添加到Listen
指令中。
FreeBSD的默认值为:
AcceptFilter http httpready AcceptFilter https dataready
在httpready
接受滤波器缓冲器内核级别的完整的HTTP请求。一旦接收到整个请求,内核便将其发送到服务器。有关更多详细信息,请参见
accf_http(9)手册页。由于HTTPS请求已加密,因此仅使用
accf_data(9)过滤器。
Linux上的默认值为:
AcceptFilter http data AcceptFilter https data
Linux TCP_DEFER_ACCEPT
不支持缓冲http请求。除此以外的任何值none
都将TCP_DEFER_ACCEPT
在该侦听器上启用
。有关更多详细信息,请参见Linux
tcp(7)手册页。
Windows上的默认值为:
AcceptFilter http connect AcceptFilter https connect
Window的mpm_winnt解释AcceptFilter来切换AcceptEx()API,并且不支持http协议缓冲。connect
将使用AcceptEx()API,还检索网络端点地址,但是像none
该connect
选项一样,它不等待初始数据传输。
在Windows上,none
使用accept()而不是AcceptEx(),并且不会回收连接之间的套接字。这对于驱动程序支持已损坏的网络适配器以及某些虚拟网络提供程序(例如vpn驱动程序或垃圾邮件,病毒或间谍软件筛选器)很有用。
data
AcceptFilter(视窗)对于2.4.23及更低版本,Windows data
接受筛选器将一直等待,直到传输完数据并从单个AcceptEx()调用中检索了初始数据缓冲区和网络端点地址为止。此实现遭到拒绝服务攻击,已被禁用。
httpd的默认为当前版本的connect
Windows上过滤器,并会回落到connect
如果
data
被指定。鼓励connect
早期版本的用户为他们的AcceptFilter 添加显式设置,如上所示。
描述: | 资源接受尾随路径名信息 |
---|---|
句法: | AcceptPathInfo On|Off|Default |
默认: | AcceptPathInfo Default |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
该伪指令控制是否接受包含跟随实际文件名(或现有目录中不存在的文件)的尾随路径名信息的请求。尾随路径名信息可用于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/more
如果/test/here.html
映射到有效文件,则将接受
上述示例。Default
PATH_INFO
请求。提供脚本的处理程序(例如cgi-script和isapi-handler)通常PATH_INFO
默认情况下接受
。该AcceptPathInfo
指令的主要目的是允许您覆盖处理程序对accepting或rejecting的选择PATH_INFO
。例如,当您使用过滤器(例如INCLUDES)基于生成内容时,此覆盖是必需的PATH_INFO
。核心处理程序通常会拒绝该请求,因此您可以使用以下配置来启用此类脚本:
<Files "mypaths.shtml"> Options +Includes SetOutputFilter INCLUDES AcceptPathInfo On </Files>
描述: | 分布式配置文件的名称 |
---|---|
句法: | AccessFileName filename [filename] ... |
默认: | AccessFileName .htaccess |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
在处理请求时,如果为该目录启用了分布式配置文件,则服务器将从该名称列表中的文档的路径的每个目录中查找第一个现有配置文件。例如:
AccessFileName .acl
返回文档之前
/usr/local/web/index.html
,服务器将读取
/.acl
,/usr/.acl
,
/usr/local/.acl
和/usr/local/web/.acl
用于指令,除非他们已经被禁用:
<Directory "/"> AllowOverride None </Directory>
描述: | 响应内容类型为text/plain 或时要添加的默认字符集参数text/html |
---|---|
句法: | AddDefaultCharset On|Off|charset |
默认: | AddDefaultCharset Off |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
当且仅当响应的content-type为text/plain
或时,此伪指令指定要添加到响应的媒体类型charset参数的默认值(字符编码的名称)
text/html
。META
尽管确切的行为通常取决于用户的客户端配置,但它应该覆盖通过元素在响应主体中指定的任何字符集。设置为AddDefaultCharset Off
禁用此功能。AddDefaultCharset On
启用默认字符集iso-8859-1
。假定其他任何值都是要使用的字符集,它应该是用于Internet媒体类型(MIME类型)的
IANA注册字符集值之一。例如:
AddDefaultCharset utf-8
AddDefaultCharset
仅应在已知所有适用的文本资源都在该字符编码中并且不方便单独标记其字符集的情况下使用。一个这样的示例是将charset参数添加到包含生成的内容的资源(例如旧版CGI脚本),由于输出中包含用户提供的数据,这些资源可能容易受到跨站点脚本攻击。但是请注意,更好的解决方案是仅修复(或删除)这些脚本,因为设置默认字符集不会保护在浏览器中启用“自动检测字符编码”功能的用户。
描述: | 确定是否允许通过URL中的编码路径分隔符 |
---|---|
句法: | AllowEncodedSlashes On|Off|NoDecode |
默认: | AllowEncodedSlashes Off |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
兼容性: | NoDecode选项在2.3.12及更高版本中可用。 |
所述AllowEncodedSlashes
指令允许其含有编码路径分隔符(网址%2F
为/
并且附加%5C
用于\
在路径信息中可以使用一致的系统)。
使用默认值时Off
,此类URL将被拒绝,并显示404错误(未找到)。
使用值On
,将接受此类URL,并且像所有其他编码字符一样对编码斜杠进行解码。
使用值时NoDecode
,将接受此类URL,但是不会对编码的斜杠进行解码,而是保留其编码状态。
AllowEncodedSlashes
On
与结合使用时,车削最有用PATH_INFO
。
如果路径信息中需要编码的斜杠,NoDecode
则强烈建议使用来作为安全措施。允许对斜杠进行解码可能会导致路径不安全。
描述: | .htaccess 文件中允许的指令类型
|
---|---|
句法: | AllowOverride All|None|directive-type
[directive-type] ... |
默认: | AllowOverride None (2.3.9 and later), AllowOverride All (2.3.8 and earlier) |
内容: | 目录 |
状态: | 核心 |
模块: | 核心 |
服务器找到.htaccess
文件(由指定AccessFileName
)时,需要知道该文件中声明的指令可以覆盖较早的配置指令。
当此伪指令设置为None
且AllowOverrideList
设置
为时None
,.htaccess文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取.htaccess
文件系统中的文件。
当此指令设置All
为时,文件中将允许
具有.htaccess 上下文的任何指令.htaccess
。
该指令类型可指示以下分组之一。(有关每个指令类型启用了哪些指令的最新列表, 请参见重写类索引。)
AuthDBMGroupFile
,
AuthDBMUserFile
,
AuthGroupFile
,
AuthName
,
AuthType
,AuthUserFile
,Require
,等等)。ErrorDocument
,
ForceType
,
LanguagePriority
,
SetHandler
,
SetInputFilter
,
SetOutputFilter
,并
mod_mime
添加*和Remove *指令),文档元数据(Header
,RequestHeader
,SetEnvIf
,SetEnvIfNoCase
,BrowserMatch
,CookieExpires
,CookieDomain
,CookieStyle
,CookieTracking
,CookieName
),
mod_rewrite
指令(RewriteEngine
,RewriteOptions
,RewriteBase
,RewriteCond
,RewriteRule
),
mod_alias
指令(Redirect
,RedirectTemp
,RedirectPermanent
,RedirectMatch
),和
Action
从
mod_actions
。
AddDescription
,
AddIcon
,AddIconByEncoding
,
AddIconByType
,
DefaultIcon
,DirectoryIndex
,FancyIndexing
,HeaderName
,IndexIgnore
,IndexOptions
,ReadmeName
,
等等)。Allow
,Deny
和Order
)。请注意,有效指令中的语法错误仍将导致内部服务器错误。
Options
和
XBitHack
)的指令。可以给等号,后跟一个逗号分隔的列表,不带空格,表示可以使用Options
命令设置的选项。
即使可以使用此伪指令限制.htaccess文件中可能使用的选项列表,但只要Options
允许任何伪指令,就可以使用非相对语法禁用任何其他继承的选项。换句话说,此机制无法在允许设置任何其他选项的同时强制保持特定选项的设置。
AllowOverride Options=Indexes,MultiViews
例:
AllowOverride AuthConfig Indexes
在上面的示例中,所有既不在组中AuthConfig
也不会Indexes
引起内部服务器错误的指令
。
出于安全和性能方面的原因,不设置
AllowOverride
比其他任何东西None
在你的<Directory "/">
块。而是查找(或创建)<Directory>
引用实际计划放置.htaccess
文件的目录的块
。
描述: | .htaccess 文件中允许的个别指令
|
---|---|
句法: | AllowOverrideList None|directive
[directive-type] ... |
默认: | AllowOverrideList None |
内容: | 目录 |
状态: | 核心 |
模块: | 核心 |
服务器找到.htaccess
文件(由指定AccessFileName
)时,需要知道该文件中声明的指令可以覆盖较早的配置指令。
AllowOverrideList
只有在有效的
<Directory>
无正则表达式指定的,不分段<Location>
,<DirectoryMatch>
或
<Files>
部分。
当此伪指令设置为None
并AllowOverride
设置为时None
,.htaccess文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取
.htaccess
文件系统中的文件。
例:
AllowOverride None AllowOverrideList Redirect RedirectMatch
在上面的示例中,仅允许Redirect
和
RedirectMatch
指令。其他所有情况都将导致内部服务器错误。
例:
AllowOverride AuthConfig AllowOverrideList CookieTracking CookieName
在上面的示例中,AllowOverride
向AuthConfig
指令分组AllowOverrideList
授予权限,并且仅对FileInfo
指令分组中的两个指令授予权限。其他所有情况都将导致内部服务器错误。
描述: | 为CGI脚本定位解释器的技术 |
---|---|
句法: | CGIMapExtension cgi-path .extension |
内容: | 目录.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 仅NetWare |
该指令用于控制Apache httpd如何查找用于运行CGI脚本的解释器。例如,设置
CGIMapExtension sys:\foo.nlm .foo
将导致所有带有.foo
扩展名的CGI脚本文件传递到FOO解释器。
描述: | 启用将HTTP授权标头作为CGI变量传递给脚本 |
---|---|
句法: | CGIPassAuth On|Off |
默认: | CGIPassAuth Off |
内容: | 目录.htaccess |
覆写: | 验证配置 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache HTTP Server 2.4.13和更高版本中可用 |
CGIPassAuth
允许脚本访问HTTP授权标头,例如Authorization
,这是实现HTTP Basic身份验证的脚本所必需的。通常,这些HTTP标头是从脚本中隐藏的。这是为了防止脚本在Web服务器中启用HTTP基本身份验证时看到用于访问服务器的用户ID和密码。当允许脚本实现HTTP Basic身份验证时,应使用此伪指令。
可以使用此伪指令代替SECURITY_HOLE_PASS_AUTHORIZATION
Apache HTTP Server早期版本中提供的编译时设置
。
该设置通过使用任何模块推崇
ap_add_common_vars()
,如mod_cgi
,
mod_cgid
,mod_proxy_fcgi
,
mod_proxy_scgi
,等。值得注意的是,它会影响通常无法处理请求但仍使用此API的模块;的示例是mod_include
和mod_ext_filter
。不使用的第三方模块也ap_add_common_vars()
可以选择遵守设置。
描述: | 控制如何设置某些CGI变量 |
---|---|
句法: | CGIVar variable rule |
内容: | 目录.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache HTTP Server 2.4.21和更高版本中可用 |
该指令控制如何设置某些CGI变量。
REQUEST_URI规则:
original-uri
(默认)current-uri
描述: | 启用Content-MD5 HTTP响应标头的生成 |
---|---|
句法: | ContentDigest On|Off |
默认: | ContentDigest Off |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 选件 |
状态: | 核心 |
模块: | 核心 |
此伪指令可以生成Content-MD5
分别在RFC1864和RFC2616中定义的
标头。
MD5是一种算法,用于计算任意长度数据的“消息摘要”(有时称为“指纹”),并具有高度的信心,即数据中的任何更改都会反映在消息摘要中。
所述Content-MD5
头提供实体-主体的端部到端消息完整性检查(MIC)。代理或客户端可以检查此标头,以检测对运输中的实体的意外修改。标头示例:
Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
请注意,这可能会在您的服务器上导致性能问题,因为消息摘要是针对每个请求进行计算的(不缓存值)。
Content-MD5
仅发送由送达的文档core
,而不发送任何模块送达的文档。例如,SSI文档,CGI脚本的输出以及字节范围响应都没有此标头。
描述: | 服务器运行时文件的基本目录 |
---|---|
句法: | DefaultRuntimeDir directory-path |
默认: | DefaultRuntimeDir DEFAULT_REL_RUNTIMEDIR (logs/) |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache 2.4.2和更高版本中可用 |
该DefaultRuntimeDir
指令设置服务器将在其中创建各种运行时文件(共享内存,锁等)的目录。如果设置为相对路径,则完整路径将相对于ServerRoot
。
例
DefaultRuntimeDir scratch/
的默认位置DefaultRuntimeDir
可以通过DEFAULT_REL_RUNTIMEDIR
在构建时更改#define 来修改。
注意:ServerRoot
应在使用此伪指令之前指定。否则,默认值ServerRoot
将会用于设置基本目录。
ServerRoot
描述: | 如果该值不是,则此指令除了发出警告外没有其他作用none 。在以前的版本中,DefaultType将指定默认媒体类型以分配给响应内容,而找不到其他媒体类型配置。
|
---|---|
句法: | DefaultType media-type|none |
默认: | DefaultType none |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 该参数none 在Apache httpd 2.2.7及更高版本中可用。对于2.3.x和更高版本,所有其他选项均被禁用。 |
该指令已被禁用。为了向后兼容配置文件,可以将其指定为值
none
,表示没有默认媒体类型。例如:
DefaultType None
DefaultType None
仅在httpd-2.2.7和更高版本中可用。
使用mime.types配置文件和
AddType
通过文件扩展名配置媒体类型分配,或使用
ForceType
指令为特定资源配置媒体类型。否则,服务器将发送不包含Content-Type标头字段的响应,并且收件人可能会尝试猜测媒体类型。
描述: | 定义一个变量 |
---|---|
句法: | Define parameter-name [parameter-value] |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
以其一个参数形式,Define
相当于将-D
参数传递给
httpd
。它可用于切换各节的使用,
<IfDefine>
而无需更改-D
任何启动脚本中的参数。
除此之外,如果给定第二个参数,则将配置变量设置为此值。可以使用${VAR}
语法在配置中使用该变量。该变量始终是全局定义的,并且不限于周围的config部分的范围。
<IfDefine TEST> Define servername test.example.com </IfDefine> <IfDefine !TEST> Define servername www.example.com Define SSL </IfDefine> DocumentRoot "/var/www/${servername}/htdocs"
变量名不能包含冒号“:”字符,以避免与RewriteMap
的语法冲突。
尽管在虚拟主机上下文中支持此指令,但对其进行的更改对于任何后续的配置指令(包括任何封闭的虚拟主机)都是可见的。
描述: | 包含一组仅适用于命名文件系统目录,子目录及其内容的指令。 |
---|---|
句法: | <Directory directory-path>
... </Directory> |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
<Directory>
和
</Directory>
用于封装一组指令,这些指令仅适用于命名目录,该目录的子目录以及相应目录中的文件。可以使用目录上下文中允许的任何指令。Directory-path可以是目录的完整路径,也可以是使用Unix Shell样式匹配的通配符字符串。在通配符字符串中,?
匹配任何单个字符,并且*
匹配任何字符序列。您也可以使用[]
字符范围。所有通配符都不匹配'/'字符,因此<Directory
"/*/public_html">
将不匹配
/home/user/public_html
,但<Directory
"/home/*/public_html">
将匹配。例:
<Directory "/usr/local/httpd/htdocs"> Options Indexes FollowSymLinks </Directory>
目录路径可能会被引用,如果你喜欢,但是,它 必须要,如果路径中包含空格引用。这是因为否则空格将指示参数的结尾。
注意目录路径参数:它们必须从字面上匹配Apache httpd用于访问文件的文件系统路径。应用于特定<Directory>
目录的指令
不适用于通过不同路径(例如,通过不同符号链接)从同一目录访问的文件。
除~
字符外,还可以使用
正则表达式。例如:
<Directory ~ "^/www/[0-9]{3}"> </Directory>
将匹配/www/
由三个数字组成的目录。
如果多个(非正则表达式)<Directory>
节与包含文档的目录(或其父目录之一)匹配,则将以最短匹配的顺序应用这些指令,并在这些文件中插入.htaccess文件中的指令。例如,
<Directory "/"> AllowOverride None </Directory> <Directory "/home"> AllowOverride FileInfo </Directory>
访问文档/home/web/dir/doc.html
的步骤是:
AllowOverride None
(禁用.htaccess
文件)。AllowOverride FileInfo
(用于directory /home
)。FileInfo
的指令
/home/.htaccess
,/home/web/.htaccess
并
/home/web/dir/.htaccess
按此顺序。在应用了所有正常节之后,才考虑使用正则表达式。然后,按照它们在配置文件中出现的顺序测试所有正则表达式。例如,
<Directory ~ "abc$"> # ... directives here ... </Directory>
只有在应用了所有normal <Directory>
和
.htaccess
文件之后,才会考虑使用正则表达式部分。然后,正则表达式将匹配/home/abc/public_html/abc
并且<Directory>
将应用相应的正则表达式。
请注意,默认访问权限
<Directory "/">
是允许所有访问。这意味着Apache httpd将提供从URL映射的任何文件。建议您使用诸如
<Directory "/"> Require all denied </Directory>
然后将其替换为您想要访问的目录 。有关更多详细信息,请参见“ 安全提示”页面。
目录部分出现在httpd.conf
文件中。
<Directory>
指令不能嵌套,也不能出现在<Limit>
或<LimitExcept>
部分中。
描述: | 包含适用于与正则表达式匹配的文件系统目录的内容的指令。 |
---|---|
句法: | <DirectoryMatch regex>
... </DirectoryMatch> |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
<DirectoryMatch>
并且
</DirectoryMatch>
用于封装一组指令,这些指令仅适用于命名目录(及其中的文件),与相同<Directory>
。但是,它以正则表达式作为参数
。例如:
<DirectoryMatch "^/www/(.+/)?[0-9]{3}/"> # ... </DirectoryMatch>
匹配/www/
包含三个数字的目录(或其任何子目录)。
<Directory>
),并且与行符号($)的末尾不匹配。在2.3.9及更高版本中,仅与表达式匹配的目录受附带的指令影响。
从2.4.8开始,将捕获命名的组和反向引用,并将其以大写的前缀“ MATCH_”的相应名称写入环境。这样可以从表达式和模块(如)中
引用路径的元素mod_rewrite
。为了避免混淆,将忽略编号(未命名)的反向引用。请改用命名组。
<DirectoryMatch "^/var/www/combined/(?<sitename>[^/]+)"> Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example </DirectoryMatch>
<Directory>
用于描述正则表达式如何与normal <Directory>
s 混合
描述: | 构成从网络可见的主文档树的目录 |
---|---|
句法: | DocumentRoot directory-path |
默认: | DocumentRoot "/usr/local/apache/htdocs" |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该指令设置httpd
将从中提供文件的目录。除非通过类似的指令进行匹配,否则Alias
服务器会将从请求的URL到文档根目录的路径附加到该文档的路径中。例:
DocumentRoot "/usr/web"
然后访问
http://my.example.com/index.html
指向
/usr/web/index.html
。如果目录路径不是绝对路径,则假定它是相对于的ServerRoot
。
本DocumentRoot
应无拖尾斜杠来指定。
描述: | 包含仅在运行时请求不满足前一个<If> 或
<ElseIf> 节的条件时适用的指令 |
---|---|
句法: | <Else> ... </Else> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 嵌套条件在2.4.26及更高版本中进行评估 |
在<Else>
当且仅当最近的应用封闭指令
<If>
或
<ElseIf>
在同一范围内部分还没有得到应用。例如:
<If "-z req('Host')"> # ... </If> <Else> # ... </Else>
在<If>
将匹配HTTP / 1.0的请求,而不一个主机:报头和
<Else>
将匹配请求与主机:报头。
<If>
<ElseIf>
<If>
,,
<ElseIf>
和
<Else>
最后应用。描述: | 包含仅在运行时请求满足条件而前一个<If> 或
<ElseIf> 节的条件不满足时才适用的指令
|
---|---|
句法: | <ElseIf expression> ... </ElseIf> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 嵌套条件在2.4.26及更高版本中进行评估 |
该<ElseIf>
如果只有两者给定的条件计算为真,最近期的应用封闭指令<If>
或
<ElseIf>
尚未应用于部分在同一范围内。例如:
<If "-R '10.1.0.0/16'"> #... </If> <ElseIf "-R '10.0.0.0/8'"> #... </ElseIf> <Else> #... </Else>
<ElseIf>
如果请求的远程地址属于子网10.0.0.0/8但不属于子网10.1.0.0/16 ,则将匹配。
<If>
<Else>
<If>
,,
<ElseIf>
和
<Else>
最后应用。描述: | 在传送过程中使用内存映射读取文件 |
---|---|
句法: | EnableMMAP On|Off |
默认: | EnableMMAP On |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
该指令控制httpd
如果在传递过程中需要读取文件的内容,则是否可以使用内存映射。默认情况下,当请求的处理需要访问文件中的数据时(例如,使用传递服务器解析mod_include
的文件时),如果操作系统支持,Apache httpd内存将映射该文件。
这种内存映射有时会提高性能。但是在某些环境中,最好禁用内存映射以防止操作问题:
对于易受这些问题影响的服务器配置,应通过指定以下内容来禁用已传递文件的内存映射:
EnableMMAP Off
对于NFS挂载的文件,可以通过指定以下内容来明确禁用有问题的文件的此功能:
<目录“ / nfs文件路径”> EnableMMAP Off </目录>
描述: | 使用内核sendfile支持将文件传送到客户端 |
---|---|
句法: | EnableSendfile On|Off |
默认: | EnableSendfile Off |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在版本2.3.9中默认更改为“关闭”。 |
该指令控制是否httpd
可以使用内核的sendfile支持将文件内容传输到客户端。默认情况下,当请求的处理不需要访问文件中的数据时(例如,传递静态文件时),如果操作系统支持,则Apache httpd使用sendfile传递文件内容而无需读取文件。
这种sendfile机制避免了单独的读取和发送操作以及缓冲区分配。但是在某些平台或某些文件系统内,最好禁用此功能以避免操作问题:
sendfile
可能无法处理2GB以上的文件。DocumentRoot
(例如NFS,SMB,CIFS,FUSE),内核可能无法通过其自己的缓存来服务网络文件。对于不易受这些问题影响的服务器配置,可以通过指定以下内容来启用此功能:
EnableSendfile On
对于网络安装的文件,可以通过指定以下内容来明确禁用有问题的文件的此功能:
<Directory "/path-to-nfs-files"> EnableSendfile Off </Directory>
请注意,的按目录和.htaccess配置EnableSendfile
不受支持
mod_cache_disk
。模块仅考虑的全局定义EnableSendfile
。
描述: | 使用自定义错误消息中止配置解析 |
---|---|
句法: | Error message |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 核心 |
模块: | 核心 |
兼容性: | 2.3.9及更高版本 |
如果可以在配置内检测到错误,则可以使用此伪指令生成自定义错误消息,并停止配置解析。通常用于报告配置中缺少的必需模块。
# Example # ensure that mod_include is loaded <IfModule !include_module> Error "mod_include is required by mod_foo. Load it with LoadModule." </IfModule> # ensure that exactly one of SSL,NOSSL is defined <IfDefine SSL> <IfDefine NOSSL> Error "Both SSL and NOSSL are defined. Define only one of them." </IfDefine> </IfDefine> <IfDefine !SSL> <IfDefine !NOSSL> Error "Either SSL or NOSSL must be defined." </IfDefine> </IfDefine>
描述: | 发生错误时服务器将返回给客户端的内容 |
---|---|
句法: | ErrorDocument error-code document |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
如果出现问题或错误,则可以将Apache httpd配置为执行以下四种操作之一,
第一个选项是默认选项,而选项2-4是使用ErrorDocument
伪指令配置的,其后是HTTP响应代码以及URL或消息。Apache httpd有时会提供有关问题/错误的其他信息。
从2.4.13开始,可以在指令内部使用表达式语法来生成动态字符串和URL。
URL可以以本地Web路径的斜线(/)开头(相对于DocumentRoot
),也可以是客户端可以解析的完整URL。可替代地,可以提供消息以由浏览器显示。请注意,在解析任何表达式之前要确定参数是URL,路径还是消息。例子:
ErrorDocument 500 http://example.com/cgi-bin/server-error.cgi ErrorDocument 404 /errors/bad_urls.php ErrorDocument 401 /subscription_info.html ErrorDocument 403 "Sorry, can't allow you access today" ErrorDocument 403 Forbidden! ErrorDocument 403 /errors/forbidden.py?referrer=%{escape:%{HTTP_REFERER}}
此外,特殊值default
可用于指定Apache httpd的简单硬编码消息。尽管在通常情况下不是必需的,但是default
将恢复Apache httpd的简单硬编码消息,以进行配置,否则这些配置将继承现有的ErrorDocument
。
ErrorDocument 404 /cgi-bin/bad_urls.pl <Directory "/web/docs"> ErrorDocument 404 default </Directory>
请注意,当您指定ErrorDocument
指向远程URL的时(例如,带有诸如http
前面的方法的任何
内容),Apache HTTP Server将向客户端发送重定向,以告诉客户端在哪里可以找到该文档,即使该文档最终位于同一服务器上。这有几个含义,最重要的是,客户端将不会收到原始错误状态代码,而是会收到重定向状态代码。反过来,这会使Web机器人和其他尝试使用状态代码确定URL是否有效的客户端混淆。此外,如果您在中使用了远程URL ErrorDocument 401
,则客户端将不知道提示用户输入密码,因为它将不会收到401状态代码。因此,如果您使用
ErrorDocument 401
指令,则它必须引用本地文档。
默认情况下,Microsoft Internet Explorer(MSIE)将忽略服务器生成的错误消息,如果它们“太小”并替换其自己的“友好”错误消息。大小阈值因错误类型而异,但是通常,如果使错误文档大于512字节,则MSIE将显示服务器生成的错误而不是将其掩盖。Microsoft知识库文章Q294807中提供了更多信息。
尽管可以覆盖大多数错误消息,但是在某些情况下,无论设置为,都将使用内部消息ErrorDocument
。特别是,如果检测到格式错误的请求,将立即停止正常的请求处理并返回内部错误消息。这对于防止由错误请求引起的安全问题是必要的。
如果您使用的是mod_proxy,则可能希望启用
ProxyErrorOverride
该功能,以便您可以代表Origin服务器提供自定义错误消息。如果未启用ProxyErrorOverride,则Apache httpd将不会为代理内容生成自定义错误文档。
描述: | 服务器将记录错误的位置 |
---|---|
句法: | ErrorLog file-path|syslog[:[facility][:tag]] |
默认: | ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2) |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该ErrorLog
指令设定的服务器将记录遇到的任何错误的文件名。如果文件路径不是绝对路径,则假定它是相对于的ServerRoot
。
ErrorLog "/var/log/httpd/error_log"
如果文件路径
以竖线字符“ |
” 开头,则假定它是生成以处理错误日志的命令。
ErrorLog "|/usr/local/bin/httpd_errors"
有关更多信息,请参见管道日志中的注释。
syslog
如果系统支持,则使用代替文件名启用通过syslogd(8)进行日志记录。默认设置是使用syslog工具local7
,但是您可以使用以下语法
来覆盖它:工具可以是syslog(1)中通常记录的名称之一。该功能实际上是全局的,如果在单个虚拟主机中进行了更改,则指定的最终功能会影响整个服务器。syslog标记适用相同的规则,在大多数情况下,默认情况下使用Apache二进制名称。您也可以使用
语法覆盖此内容。syslog:facility
httpd
syslog::tag
ErrorLog syslog:user ErrorLog syslog:user:httpd.srv1 ErrorLog syslog::httpd.srv2
其他模块可以提供自己的ErrorLog提供程序。语法类似于syslog
上面的示例。
安全性:有关启动 日志的用户以外的任何人都可写存储日志文件的目录的原因,为什么会破坏安全性的详细信息,请参阅安全性提示文档。
在非Unix平台上输入文件路径时,即使平台可能允许使用反斜杠,也应确保仅使用正斜杠。通常,在整个配置文件中始终使用正斜杠是一个好主意。
描述: | 错误日志条目的格式规范 |
---|---|
句法: | ErrorLogFormat [connection|request] format |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
ErrorLogFormat
允许指定除实际日志消息外,错误日志中还记录了哪些补充信息。
#Simple example ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"
指定connection
或request
作为第一个参数允许指定其他格式,从而在分别记录特定连接或请求的第一条消息时记录其他信息。每个连接/请求仅记录一次此附加信息。如果在处理连接或请求时未引起任何日志消息,则也不会记录其他信息。
某些格式字符串项可能不会产生输出,这可能会发生。例如,仅当日志消息与请求关联并且日志消息发生在已经从客户端读取了Referer标头的时间时,Referer标头才出现。如果未产生任何输出,则默认行为是删除从前一个空格字符到下一个空格字符的所有内容。这意味着在非空白到空白的转换中,日志行被隐式划分为多个字段。如果格式字符串项未产生输出,则将省略整个字段。例如,如果远程地址%a
为日志格式[%t] [%l] [%a] %M
不可用,也不记录周围的括号。可以使用反斜杠对空格字符进行转义,以防止它们分隔字段。组合'%'(百分比空间)是零宽度的字段定界符,不会产生任何输出。
通过将修饰符添加到格式字符串项,可以更改上述行为。甲-
(减)改性剂引起的负如果相应的项目中不产生任何输出被记录。在每个连接/请求一次的格式中,也可以使用+
(plus)修饰符。如果带有plus修饰符的项目不产生任何输出,则省略整行。
用作修饰符的数字可用于将日志严重性级别分配给格式项。仅当日志消息的严重性不高于指定的日志严重性级别时,才记录该项目。该数字的范围可以从1(警报)到4(警告)和7(调试)到15(trace8)。
例如,如果您在%{Referer}i
令牌中添加了修饰符并记录了Referer
请求标头,
则将发生以下情况。
修改令牌 | 含义 |
---|---|
%-{Referer}i |
记录未设置的- if Referer 。 |
%+{Referer}i |
如果Referer 未设置,则忽略整行。 |
%4{Referer}i |
日志Referer 仅在日志消息严重程度高于4。 |
某些格式字符串项目在括号中接受其他参数。
格式字符串 | 描述 |
---|---|
%% |
百分号 |
%a |
客户端IP地址和请求的端口 |
%{c}a |
连接的底层对等IP地址和端口(请参阅
mod_remoteip 模块) |
%A |
本地IP地址和端口 |
%{name}e |
请求环境变量名称 |
%E |
APR / OS错误状态代码和字符串 |
%F |
日志调用的源文件名和行号 |
%{name}i |
请求标头名称 |
%k |
此连接上的保持活动请求数 |
%l |
消息的日志级别 |
%L |
请求的日志ID |
%{c}L |
连接的日志ID |
%{C}L |
连接的日志ID(如果用于连接范围),否则为空 |
%m |
记录消息的模块名称 |
%M |
实际的日志消息 |
%{name}n |
要求备注名称 |
%P |
当前进程的进程ID |
%T |
当前线程的线程ID |
%{g}T |
当前线程的系统唯一线程ID(与显示的ID相同top ;例如,当前仅Linux) |
%t |
当前时间 |
%{u}t |
当前时间,包括微秒 |
%{cu}t |
紧凑ISO 8601格式的当前时间,包括微秒 |
%v |
ServerName
当前服务器的规范。 |
%V |
根据UseCanonicalName
设置为请求服务的服务器的服务器名称
。 |
\ (反斜杠空间) |
非场定界空间 |
% (空间百分比) |
字段定界符(无输出) |
日志ID格式%L
为连接或请求生成唯一的ID。这可用于关联哪些日志行属于同一连接或请求,哪个请求发生在哪个连接上。一个%L
格式字符串也可在
mod_log_config
允许错误日志行归属关系的访问日志条目。如果mod_unique_id
已加载,则其唯一ID将用作请求的日志ID。
#Example (default format for threaded MPMs) ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M%?,\?referer\?%{Referer}i"
这将导致错误消息,例如:
[Thu May 12 08:28:57.652118 2011] [core:error] [pid 8777:tid 4326490112] [client ::1:58619] File does not exist: /usr/local/apache2/htdocs/favicon.ico
请注意,如上所述,由于未定义某些字段,因此将其完全省略。
#Example (similar to the 2.2.x format) ErrorLogFormat "[%t] [%l] %7F: %E: [client\ %a] %M%?,\?referer\?%{Referer}i"
#Advanced example with request/connection log IDs ErrorLogFormat "[%{uc}t] [%-m:%-l] [R:%L] [C:%{C}L] %7F: %E: %M" ErrorLogFormat request "[%{uc}t] [R:%L] Request %k on C:%{c}L pid:%P tid:%T" ErrorLogFormat request "[%{uc}t] [R:%L] UA:'%+{User-Agent}i'" ErrorLogFormat request "[%{uc}t] [R:%L] Referer:'%+{Referer}i'" ErrorLogFormat connection "[%{uc}t] [C:%{c}L] local\ %a remote\ %A"
描述: | 跟踪每个请求的扩展状态信息 |
---|---|
句法: | ExtendedStatus On|Off |
默认: | ExtendedStatus Off[*] |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
此选项跟踪每个工作人员有关当前正在执行的请求的其他数据,并创建利用率摘要。您可以通过配置在运行时查看这些变量
mod_status
。请注意,其他模块可能依赖于此计分板。
此设置适用于整个服务器,并且不能在逐个虚拟主机的基础上启用或禁用。扩展状态信息的收集会降低服务器的速度。另请注意,在正常重启期间无法更改此设置。
请注意,加载mod_status
会将默认行为更改为ExtendedStatus On,而其他第三方模块可能会执行相同的操作。这样的模块依赖于收集有关所有工人状态的详细信息。mod_status
从版本2.3.6开始更改默认值。以前的默认值始终为“关”。
描述: | 用于为静态文件创建ETag HTTP响应标头的文件属性 |
---|---|
句法: | FileETag component ... |
默认: | FileETag MTime Size |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在2.3.14及更早版本中,默认值是“ INode MTime Size”。 |
所述FileETag
指令配置了用于创建文件属性ETag
当文档是基于静态文件(实体标签)响应报头字段。(该ETag
值在高速缓存管理中用于节省网络带宽。)该
FileETag
指令允许您选择应使用其中的哪一个(如果有)。公认的关键字是:
FileETag INode MTime Size
ETag
则响应中将不包含任何字段的INode
,MTime
和Size
关键字可与任一前缀+
或-
,这允许改变从更广的范围所继承的默认设置进行。任何不带此类前缀的关键字立即出现并完全取消继承的设置。
如果目录的配置包括
FileETag INode MTime Size
,子目录的包括FileETag -INode
,则该子目录的设置(将由不覆盖该子目录的任何子子目录继承)等效于
FileETag MTime Size
。
mod_dav_fs
用作存储提供程序的目录或位置的默认设置。
mod_dav_fs
使用MTime Size
作为一个固定格式ETag
的条件请求比较。如果ETag
通过更改格式,这些条件请求将中断FileETag
。
mod_include
的响应,不会生成ETag,因为响应实体可以更改,而无需更改具有嵌入式SSI指令的INode,MTime或静态文件的大小。
描述: | 包含适用于匹配文件名的指令 |
---|---|
句法: | <Files filename> ... </Files> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
该<Files>
指令通过文件名限制了封闭指令的范围。它与<Directory>
和<Location>
指令可比。它应该与</Files>
指令匹配。本节中给出的指令将应用于具有与指定文件名匹配的基本名(文件名的最后一个组成部分)的任何对象。<Files>
在读取<Directory>
节和.htaccess
文件之后,但在<Location>
节之前,将按照节
在配置文件中出现的顺序处理节。注意,<Files>
可以嵌套在<Directory>
部分中以限制它们应用于文件系统的一部分。
的文件名参数应该包括一个文件名,或外卡的字符串,其中?
匹配任何单个字符,并且*
字符的任意序列相匹配。
<Files "cat.html"> # Insert stuff that applies to cat.html here </Files> <Files "?at.*"> # This would apply to cat.html, bat.html, hat.php and so on. </Files>
除~
字符外,还可以使用
正则表达式。例如:
<Files ~ "\.(gif|jpe?g|png)$"> #... </Files>
可以匹配最常见的Internet图形格式。<FilesMatch>
但是,首选。
请注意,与<Directory>
和<Location>
节不同,<Files>
节可以在.htaccess
文件内部使用
。这允许用户在逐个文件级别控制对自己文件的访问。
描述: | 包含适用于正则表达式匹配文件名的指令 |
---|---|
句法: | <FilesMatch regex> ... </FilesMatch> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
该<FilesMatch>
指令限制了文件名的指令的范围,就像
<Files>
指令一样。但是,它接受正则表达式。例如:
<FilesMatch ".+\.(gif|jpe?g|png)$"> # ... </FilesMatch>
可以匹配最常见的Internet图形格式。
.+
在正则表达式确保了文件命名的开始.png
,或者.gif
,例如,不匹配。从2.4.8开始,将捕获命名的组和反向引用,并将其以大写的前缀“ MATCH_”的相应名称写入环境。这样可以从表达式和模块(如)中
引用文件的元素mod_rewrite
。为了避免混淆,将忽略编号(未命名)的反向引用。请改用命名组。
<FilesMatch "^(?<sitename>[^/]+)"> Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example </FilesMatch>
描述: | 强制所有匹配的文件以HTTP Content-Type标头字段中的指定媒体类型提供 |
---|---|
句法: | ForceType media-type|None |
内容: | 目录.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
当放置在.htaccess
文件或或
<Directory>
或
<Location>
或
<Files>
节中时,此伪指令将强制所有匹配的文件使用media-type给出的内容类型标识进行服务
。例如,如果您的目录中充满了GIF文件,但又不想用来标记它们.gif
,则可能要使用:
ForceType image/gif
请注意,此指令会覆盖mime.types中定义的其他间接媒体类型关联或通过
AddType
。
您还可以ForceType
使用的值覆盖其他常规
设置None
:
#强制所有文件为image / gif: <Location“ / images”> ForceType image/gif </ Location> #但这里是正常的mime类型关联: <位置“ / images / mixed”> ForceType无 </ Location>
该指令主要覆盖为从文件系统提供的静态文件生成的内容类型。对于静态文件以外的资源(响应的生成器通常指定了Content-Type),该指令无效。
当显式指令(例如
SetHandler
或
AddHandler
不适用于当前请求)时,通常由这些指令设置的内部处理程序名称将设置为与该指令指定的内容类型匹配。这是一种历史行为,某些第三方模块(例如mod_php)可能使用“魔术”内容类型,这些内容类型仅用于指示该模块对匹配请求负责。应该通过使用SetHandler
或
来避免依赖于此类“魔术”类型的配置
AddHandler
。
描述: | 要写入gmon.out分析数据的目录。 |
---|---|
句法: | GprofDir /tmp/gprof/|/tmp/gprof/% |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
使用gprof分析支持对服务器进行编译后,
GprofDir
导致gmon.out
该进程退出时将文件写入指定的目录。如果参数以百分比符号('%')结尾,则会为每个进程ID创建子目录。
该指令当前仅适用于prefork
MPM。
描述: | 在客户端IP地址上启用DNS查找 |
---|---|
句法: | HostnameLookups On|Off|Double |
默认: | HostnameLookups Off |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
该指令启用DNS查找,以便可以记录主机名(并在中将其传递给CGI / SSI REMOTE_HOST
)。该值Double
是指进行双反向DNS查找。即,在执行反向查找之后,然后对该结果执行正向查找。前向查找中的至少一个IP地址必须与原始地址匹配。(在“ tcpwrappers”术语中,这称为
PARANOID
。)
无论设置如何,当mod_authz_host
用于通过主机名控制访问时,都会执行双重反向查找。这对于安全性是必需的。请注意,除非您设置,否则通常无法获得这种双向反转的结果HostnameLookups Double
。例如,如果仅对
HostnameLookups On
主机名限制保护的对象发出请求,则无论双反向是否失败,CGI仍将通过单反向结果传递给CGI REMOTE_HOST
。
默认设置是Off
为了为那些确实不需要进行反向查找的站点保存网络流量。对于最终用户而言,这也更好,因为他们不必承受查找所带来的额外延迟。重载的站点应该保留此指令
Off
,因为DNS查找会花费大量时间。该实用程序logresolve
默认情况下编译到bin
安装目录的子目录中,可用于从已记录的IP地址脱机查找主机名。
最后,如果您具有基于主机名的Require指令,则无论设置为,都将执行主机名查找HostnameLookups
。
描述: | 修改对HTTP请求消息的限制 |
---|---|
句法: | HttpProtocolOptions [Strict|Unsafe] [RegisteredMethods|LenientMethods]
[Allow0.9|Require1.0] |
默认: | HttpProtocolOptions Strict LenientMethods Allow0.9 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 2.2.32或2.4.24及更高版本 |
该指令更改了应用于HTTP请求行(RFC 7230?3.1.1)和HTTP请求标头字段(RFC 7230?3.2)的规则,这些规则现在默认或使用该Strict
选项应用。由于必须使用旧版模块,应用程序或自定义用户代理,Unsafe
因此已添加该选项以恢复到旧版行为。
这些规则是在请求处理之前应用的,因此必须在全局或默认(第一个)匹配的虚拟主机部分通过IP /端口接口(而不是名称)进行配置。
该指令从以下选项列表中接受三个参数,并将默认值应用于未指定的参数:
在引入该指令之前,Apache HTTP Server请求消息解析器可以容忍多种不符合该协议的输入形式。
RFC 7230 –9.4请求拆分和
–9.5响应走私仅指出了接受不合格请求消息的两种潜在风险,而
RFC 7230〜3.5 “消息解析的鲁棒性”则确定了接受晦涩的空白和请求消息格式的风险。从引入该指令开始,该规范的所有语法规则均在默认Strict
操作模式下强制执行,并且第3.5节建议的严格空格已强制执行且不能放宽。
强烈警告用户不要切换Unsafe
操作模式,尤其是在面向外部的,可公开访问的服务器部署上。如果需要接口进行故障监视或Intranet上运行的其他自定义服务使用者,则用户应仅在配置为为其内部专用网络提供服务的特定虚拟主机上切换“不安全”选项。
# Missing CRLF
GET / HTTP/1.0\n\n
需要强制某些工具使用CRLF,否则httpd将返回HTTP 400响应,如上述用例中所述。例如,OpenSSL s_client需要-crlf参数才能正常工作。
该DumpIOInput
指令可以在查看HTTP请求以识别诸如CRLF缺失之类的问题时提供帮助。
RFC 7231?4.1 “请求方法”“概述”要求当请求行中遇到不支持的方法时,原始服务器应使用HTTP 501状态码进行响应。LenientMethods
使用该选项时已经发生了这种情况,但是管理员可能希望RegisteredMethods
使用该RegisterHttpMethod
指令切换选项并注册任何非标准方法
,尤其是Unsafe
在切换选项的情况下。
该RegisteredMethods
选项应该不
被切换为转发代理主机,由原始服务器所支持的方法是未知的代理服务器。
# Unknown HTTP method
WOW / HTTP/1.0\r\n\r\n
# Lowercase HTTP method
get / HTTP/1.0\r\n\r\n
RFC 2616 19.6 “与先前版本的兼容性”鼓励HTTP服务器支持旧版HTTP / 0.9请求。RFC 7230以“已删除了对支持HTTP / 0.9请求的期望”取代了这一点,并在RFC 7230附录A中提供了其他注释
。该Require1.0
选项允许用户删除对默认Allow0.9
选项行为的支持。
# Unsupported HTTP version
GET /\r\n\r\n
查看ErrorLog
配置为
LogLevel
debug
级别的登录到的消息
可以帮助识别此类错误请求及其来源。用户应特别注意访问日志中的400个响应,以应对被意外拒绝的无效请求。
描述: | 包含仅在运行时请求满足条件时才适用的指令 |
---|---|
句法: | <If expression> ... </If> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 嵌套条件在2.4.26及更高版本中进行评估 |
该<If>
指令在运行时对表达式求值,并且仅当该表达式求值为true时,才应用封闭的指令。例如:
<If "-z req('Host')">
会匹配没有Host:头的HTTP / 1.0请求。表达式可以包含各种壳状运营商字符串比较(==
,!=
,<
,...),整数比较(-eq
,-ne
,...),和其他(-n
,-z
,-f
,...)。也可以使用正则表达式,
<If "%{QUERY_STRING} =~ /(delete|commit)=.*?elem/">
类壳模式匹配和许多其他操作。这些操作可以在请求标头(req
),环境变量(env
)和大量其他属性上完成。完整的文档可在Apache HTTP Server中的Expressions中找到。
在配置部分中只能使用支持目录上下文的指令。
CONTENT_TYPE
和其他响应标头)在<If>条件已经被求值之后设置,因此将无法在此伪指令中使用。
<ElseIf>
<Else>
<If>
,,
<ElseIf>
和
<Else>
最后应用。描述: | 包含仅在启动时为真的情况下才会处理的指令 |
---|---|
句法: | <IfDefine [!]parameter-name> ...
</IfDefine> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
本节用于标记条件指令。
仅当测试为true时,才处理节中的指令。如果
test为假,则忽略开始标记和结束标记之间的所有内容。<IfDefine test>...</IfDefine>
<IfDefine>
该试验在<IfDefine>
部分指令可以有两种形式:
!
参数名在前一种情况下,仅当定义了名为parameter-name的参数时,才处理开始标记和结束标记之间的指令 。第二格式反转测试,并且仅当进行指令的处理 参数名是不限定。
该参数名称参数是一个定义上所提供的
httpd
通过命令行,在服务器启动时或者通过指令。-Dparameter
Define
<IfDefine>
部分是可嵌套的,可用于实现简单的多参数测试。例:
httpd -DReverseProxy -DUseCache -DMemCache ...
<IfDefine ReverseProxy> LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so <IfDefine UseCache> LoadModule cache_module modules/mod_cache.so <IfDefine MemCache> LoadModule mem_cache_module modules/mod_mem_cache.so </IfDefine> <IfDefine !MemCache> LoadModule cache_disk_module modules/mod_cache_disk.so </IfDefine> </IfDefine> </IfDefine>
描述: | 包含根据是否存在特定指令而处理的指令 |
---|---|
句法: | <IfDirective [!]directive-name> ...
</IfDirective> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在2.4.34及更高版本中可用。 |
本
节用于标记以存在特定指令为条件的指令。仅当测试
为true时,才处理节中的指令。如果test为假,则忽略开始标记和结束标记之间的所有内容。<IfDirective test>...</IfDirective>
<IfDirective>
该测试在<IfDirective>
截面可以是两种形式之一:
在前一种情况下,只有在处理时可以使用给定名称的指令时,才处理开始标记和结束标记之间的指令。第二个格式反转的考验,如果只进行指令的处理指令名是 没有用。
httpd
,而不管是否有特定的指令可用。在正常操作中,无需将指令放在<IfDirective>
各节中。描述: | 包含仅在文件启动时才会处理的指令 |
---|---|
句法: | <IfFile [!]filename> ...
</IfFile> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在2.4.34及更高版本中可用。 |
本节用于标记以磁盘上文件是否存在为条件的指令。如果存在文件名,则仅处理节中的指令
。如果文件名
不存在,则开始标记和结束标记之间的所有内容都将被忽略。filename可以是绝对路径,也可以是相对于服务器根目录的路径。<IfFile filename>...</IfFile>
<IfFile>
section指令中的filename<IfFile>
可以采用与section中的测试变量相同的形式
<IfDefine>
,即,如果
!
字符直接放在filename之前,则可以否定测试。
如果提供了相对文件名,则检查是
ServerRoot
相对的。如果此指令出现在之前ServerRoot
,则将相对于已编译的服务器根目录或通过-d
参数传入命令行的服务器根目录检查路径。
描述: | 包含根据特定模块是否存在而进行处理的指令 |
---|---|
句法: | <IfModule [!]module-file|module-identifier> ...
</IfModule> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 模块标识符在2.1版和更高版本中可用。 |
本
节用于标记以特定模块为条件的指令。仅当测试
为true时,才处理节中的指令。如果test为假,则忽略开始标记和结束标记之间的所有内容。<IfModule test>...</IfModule>
<IfModule>
该试验在<IfModule>
部分指令可以有两种形式:
在前一种情况下,仅当
Apache httpd中包含名为module的模块时,才处理开始标记和结束标记之间的指令-可以使用进行编译或动态加载LoadModule
。第二种格式可逆转测试,并且仅在不包含模块的情况下
才处理指令。
所述模块参数可以是模块标识符或模块的文件名,在一次被编译。例如,
rewrite_module
是标识符,
mod_rewrite.c
是文件名。如果模块由多个源文件组成,请使用包含字符串的文件名
STANDARD20_MODULE_STUFF
。
<IfModule>
部分是可嵌套的,可用于实现简单的多模块测试。
<IfModule>
各节中。描述: | 包含根据是否存在特定节指令而进行处理的指令 |
---|---|
句法: | <IfSection [!]section-name> ...
</IfSection> |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在2.4.34及更高版本中可用。 |
该节用于标记以存在特定节指令为条件的指令。节指令是任何指令,例如将其他指令括起来的指令,指令名称前带有“ <”。<IfSection
test>...</IfSection>
<VirtualHost>
<IfSection>
仅当测试
为true时,才处理节中的指令。如果test为假,则忽略开始标记和结束标记之间的所有内容。
的部分名称必须在没有任一前导“<”或闭合“>”来指定。该测试在
<IfSection>
截面可以是两种形式之一:
在前一种情况下,只有在处理时可以使用给定名称的段指令时,才处理开始标记和结束标记之间的指令。第二个格式反转的考验,如果只进行指令的处理 部分名称是不是可用的部分指令。
例如:
<IfSection VirtualHost> ... </IfSection>
httpd
,而不管是否有特定的section指令可用。在正常操作中,无需将指令放在
<IfSection>
各节中。描述: | 包括服务器配置文件中的其他配置文件 |
---|---|
句法: | Include file-path|directory-path|wildcard |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 目录通配符匹配在2.3.6和更高版本中可用 |
此伪指令允许从服务器配置文件中包含其他配置文件。
fnmatch()
可以在路径的文件名或目录部分中使用Shell样式()通配符,以按字母顺序一次包含多个文件。另外,如果
Include
指向目录而不是文件,Apache httpd将读取该目录和任何子目录中的所有文件。但是,不建议包括整个目录,因为很容易将临时文件意外地留在可能导致httpd
失败的目录中
。相反,我们建议您使用下面显示的通配符语法,以包含与特定模式匹配的文件,例如* .conf。
该Include
指令将
失败,错误,如果一个通配符表达式不匹配的任何文件。IncludeOptional
如果应忽略不匹配的通配符,则可以使用该指令。
指定的文件路径可以是绝对路径,也可以相对于ServerRoot
目录。
例子:
Include /usr/local/apache2/conf/ssl.conf Include /usr/local/apache2/conf/vhosts/*.conf
或者,提供相对于ServerRoot
目录的路径:
Include conf/ssl.conf Include conf/vhosts/*.conf
通配符可以包含在路径的目录或文件部分中。如果conf / vhosts中没有包含至少一个* .conf文件的子目录,则此示例将失败:
Include conf/vhosts/*/*.conf
另外,如果缺少文件或目录,则将忽略以下命令:
IncludeOptional conf/vhosts/*/*.conf
描述: | 包括服务器配置文件中的其他配置文件 |
---|---|
句法: | IncludeOptional file-path|directory-path|wildcard |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在2.3.6及更高版本中可用。没有通配符的不存在文件路径在2.4.30之后不会导致SyntaxError |
此伪指令允许从服务器配置文件中包含其他配置文件。它的作用与Include
指令相同
,但是如果使用通配符且它们与任何文件或目录都不匹配,或者文件系统上不存在文件路径,它将被静默忽略(而不是导致错误)。
描述: | 启用HTTP持久连接 |
---|---|
句法: | KeepAlive On|Off |
默认: | KeepAlive On |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
HTTP / 1.0的Keep-Alive扩展和HTTP / 1.1的持久连接功能提供了长期存在的HTTP会话,该会话允许通过同一TCP连接发送多个请求。在某些情况下,对于具有许多图像的HTML文档,这已导致延迟时间提高了近50%。要启用保持活动连接,请设置
KeepAlive On
。
对于HTTP / 1.0客户端,仅当客户端明确请求保持连接时,才会使用保持连接。此外,只有在事先知道内容长度的情况下,才能使用与HTTP / 1.0客户端的Keep-Alive连接。这意味着动态内容(例如CGI输出,SSI页面和服务器生成的目录列表)通常将不使用与HTTP / 1.0客户端的Keep-Alive连接。对于HTTP / 1.1客户端,除非另有说明,否则持久连接是默认设置。如果客户端请求,将使用分块编码,以便通过持久连接发送未知长度的内容。
当客户端使用Keep-Alive连接时MaxConnectionsPerChild
,无论使用该连接发送了多少个请求,该请求都将被视为该指令的单个“请求” 。
描述: | 服务器将在持久连接上等待后续请求的时间 |
---|---|
句法: | KeepAliveTimeout num[ms] |
默认: | KeepAliveTimeout 5 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
Apache httpd在关闭连接之前将等待后续请求的秒数。通过添加ms的后缀,还可以以毫秒为单位设置超时。收到请求后,该Timeout
指令指定的超时值
适用。
设置KeepAliveTimeout
为较高的值可能会导致服务器负载过重的性能问题。超时时间越高,等待与空闲客户端进行连接的服务器进程将被占用的时间越多。
如果KeepAliveTimeout
是没有
一个基于域名的虚拟主机设置,将使用最好的第一定义的虚拟主机匹配的本地IP和端口值。
描述: | 将封闭的访问控制限制为仅某些HTTP方法 |
---|---|
句法: | <Limit method [method] ... > ...
</Limit> |
内容: | 目录.htaccess |
覆写: | AuthConfig,限制 |
状态: | 核心 |
模块: | 核心 |
访问控制通常对所有访问方法都有效
,这是通常需要的行为。在一般情况下,访问控制指令不应放在
<Limit>
节中。
该<Limit>
指令的目的是将访问控制的影响限制为指定的HTTP方法。对于所有其他方法,<Limit>
括号内的访问限制将无效。下面的例子中,访问控制只适用于方法POST
,PUT
以及
DELETE
,让所有其他方法不受保护的:
<Limit POST PUT DELETE> Require valid-user </Limit>
列出的方法名可以是一种或多种:GET
,
POST
,PUT
,DELETE
,
CONNECT
,OPTIONS
,
PATCH
,PROPFIND
,PROPPATCH
,
MKCOL
,COPY
,MOVE
,
LOCK
,和UNLOCK
。方法名称区分大小写。如果GET
使用,还将限制HEAD
请求。该TRACE
方法不能限制(见TraceEnable
)。
的<Limit>
和
<LimitExcept>
指令可以嵌套。在这种情况下,<Limit>
或<LimitExcept>
指令的每个连续级别
必须进一步限制访问控制所应用的方法集。
例如,给定以下配置,将授权所有用户进行POST
请求,并且Require group editors
在所有情况下都将忽略该
伪指令:
<LimitExcept GET> Require valid-user </LimitExcept> <Limit POST> Require group editors </Limit>
描述: | 将访问控制限制为除命名方法外的所有HTTP方法 |
---|---|
句法: | <LimitExcept method [method] ... > ...
</LimitExcept> |
内容: | 目录.htaccess |
覆写: | AuthConfig,限制 |
状态: | 核心 |
模块: | 核心 |
<LimitExcept>
并
</LimitExcept>
用于封装一组访问控制指令,这些指令随后将应用于参数中未列出的任何HTTP访问方法;即,它与<Limit>
部分相反,可用于控制标准方法和非标准/无法识别的方法。有关<Limit>
更多详细信息,请参见文档。
例如:
<LimitExcept POST GET> Require valid-user </LimitExcept>
描述: | 确定内部重定向和嵌套子请求的最大数量 |
---|---|
句法: | LimitInternalRecursion number [number] |
默认: | LimitInternalRecursion 10 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
例如,使用Action
伪指令时会发生内部重定向,该伪指令在内部将原始请求重定向到CGI脚本。子请求是Apache httpd的机制,用于发现某些URI(如果被请求)将会发生什么。例如,mod_dir
使用子请求查找DirectoryIndex
指令中列出的文件。
LimitInternalRecursion
防止在进入内部重定向或子请求的无限循环时服务器崩溃。这样的循环通常是由错误配置引起的。
该指令存储两个不同的限制,这些限制将根据每个请求进行评估。第一个数字是可能互相跟随的最大内部重定向数。第二个数字 确定子请求的嵌套深度。如果仅指定一个 数字,则将其分配给两个限制。
LimitInternalRecursion 5
描述: | 限制从客户端发送的HTTP请求正文的总大小 |
---|---|
句法: | LimitRequestBody bytes |
默认: | LimitRequestBody 0 |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
此伪指令指定请求正文中允许的字节数,范围从0(无限制)到2147483647(2GB)。有关代理请求的有限适用性,请参见下面的注释。
该LimitRequestBody
指令允许用户设置一个极限上的HTTP请求消息的主体,其中该指令被给予的范围内所允许的大小(服务器,每个目录,每个文件或每个位置)。如果客户端请求超出该限制,则服务器将返回错误响应,而不是服务请求。正常请求消息正文的大小将根据资源的性质以及该资源允许的方法而有很大的不同。CGI脚本通常使用消息正文来检索表单信息。该PUT
方法的实现将需要一个至少与服务器希望对该资源接受的表示形式一样大的值。
该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。
例如,如果您允许文件上传到特定位置,并希望将上传文件的大小限制为100K,则可以使用以下指令:
LimitRequestBody 102400
有关代理请求如何解释此伪指令的完整说明,请参见mod_proxy
文档。
描述: | 限制将从客户端接受的HTTP请求标头字段的数量 |
---|---|
句法: | LimitRequestFields number |
默认: | LimitRequestFields 100 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
Number是一个从0(表示无限制)到32767的整数。默认值由编译时常数DEFAULT_LIMIT_REQUEST_FIELDS
(分布时为100)定义。
该LimitRequestFields
指令允许服务器管理员修改HTTP请求中允许的请求标头字段数的限制。服务器需要此值大于普通客户端请求可能包含的字段数。客户端使用的请求标头字段的数量很少超过20,但这在不同的客户端实现中可能会有所不同,这通常取决于用户将其浏览器配置为支持详细内容协商的程度。可选的HTTP扩展通常使用请求标头字段表示。
该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。如果普通客户端看到来自服务器的错误响应(指示请求中发送了太多字段),则应增加该值。
例如:
LimitRequestFields 50
使用基于名称的虚拟主机时,该指令的值取自本地IP和端口组合的默认(第一列出)虚拟主机。
描述: | 限制客户端允许的HTTP请求标头的大小 |
---|---|
句法: | LimitRequestFieldSize bytes |
默认: | LimitRequestFieldSize 8190 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该伪指令指定 HTTP请求标头中允许的字节数。
该LimitRequestFieldSize
指令允许服务器管理员为HTTP请求标头字段的允许大小设置限制。服务器需要此值足够大以容纳正常客户端请求中的任何一个标头字段。在不同的客户端实现中,正常请求标头字段的大小将有很大不同,这通常取决于用户将其浏览器配置为支持详细内容协商的程度。SPNEGO身份验证标头最多可以为12392个字节。
该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。
例如:
LimitRequestFieldSize 4094
当使用基于名称的虚拟主机时,此指令的值取自与当前IP地址和端口组合最匹配的默认(优先列出)虚拟主机。
描述: | 限制将从客户端接受的HTTP请求行的大小 |
---|---|
句法: | LimitRequestLine bytes |
默认: | LimitRequestLine 8190 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
此伪指令设置HTTP请求行上允许的字节数。
该LimitRequestLine
指令允许服务器管理员为客户端的HTTP请求行设置允许的大小限制。由于请求行由HTTP方法,URI和协议版本组成,因此该
LimitRequestLine
指令对服务器上允许请求的请求URI的长度进行了限制。服务器需要此值足够大以容纳其任何资源名称,包括可能在GET
请求的查询部分传递的任何信息。
该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。
例如:
LimitRequestLine 4094
当使用基于名称的虚拟主机时,此指令的值取自与当前IP地址和端口组合最匹配的默认(优先列出)虚拟主机。
描述: | 限制基于XML的请求正文的大小 |
---|---|
句法: | LimitXMLRequestBody bytes |
默认: | LimitXMLRequestBody 1000000 |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
基于XML的请求主体的最大大小的限制(以字节为单位)。值0
将会禁用所有检查。
例:
LimitXMLRequestBody 0
描述: | 仅将随附的指令应用于匹配的URL |
---|---|
句法: | <Location
URL-path|URL> ... </Location> |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该<Location>
指令通过URL限制了随附指令的范围。它与<Directory>
指令相似,并以该
指令开始的子节开始
</Location>
。<Location>
在读取<Directory>
节和.htaccess
文件之后以及节之后,将按照节
在配置文件中出现的顺序处理<Files>
节。
<Location>
部分完全在文件系统外部运行。这有几个后果。最重要的是,<Location>
不应使用指令来控制对文件系统位置的访问。由于几个不同的URL可能映射到同一文件系统位置,因此可能会规避此类访问控制。
如果URL的路径部分满足以下任一条件,则将随附的指令应用于请求:
在下面的示例中,在不使用尾部斜杠的情况下,对/ private1,/ private1 /和/private1/file.txt的请求将应用随附的指令,而/ private1other则不使用。
<Location "/private1"> # ... </Location>
在下面的示例中,使用尾部斜杠时,对/ private2 /和/private2/file.txt的请求将应用随附的指令,但/ private2和/ private2other则不会。
<Location "/private2/"> # ... </Location>
<Location>
使用<Location>
的文件系统之外的指令适用于内容的生活。对于文件系统中的内容,请使用<Directory>
和<Files>
。例外是
<Location "/">
,这是将配置应用于整个服务器的简便方法。
对于所有原始(非代理)请求,要匹配的URL是形式为的URL路径/path/
。 不得包含方案,主机名,端口或查询字符串。 对于代理请求,要匹配的URL格式为
scheme://servername/path
,并且必须包含前缀。
该URL可以使用通配符。在通配符字符串中,?
匹配任何单个字符,并且*
匹配任何字符序列。这两个通配符都不匹配URL路径中的/。
除~
字符外,还可以使用正则表达式。例如:
<Location ~ "/(extra|special)/data"> #... </Location>
将匹配包含子字符串/extra/data
或的URL /special/data
。该伪指令的<LocationMatch>
行为与的正则表达式版本相同<Location>
,因此首选,原因~
是-
在许多字体中很难与之区别
的简单原因。
<Location>
与SetHandler
指令结合使用时,此功能特别有用
。例如,要启用状态请求但仅允许来自浏览器的状态请求example.com
,可以使用:
<Location "/status"> SetHandler server-status Require host example.com </Location>
斜杠具有特殊的含义,具体取决于它在URL中出现的位置。人们可能会习惯于文件系统中多个相邻斜杠经常折叠为单个斜杠(即,/home///foo
与相同
/home/foo
)的行为。在URL空间中,这不一定是正确的。该<LocationMatch>
指令和正则表达式版本<Location>
要求你明确指定多个斜线,如果这是你的意图。
例如,<LocationMatch "^/abc">
将匹配请求URL /abc
而不匹配请求URL
//abc
。<Location>
当用于代理请求时,(非正则表达式)指令的行为类似。但是,当(非正则表达式)<Location>
用于非代理请求时,它将隐式地将多个斜杠与单个斜杠匹配。例如,如果您指定<Location "/abc/def">
且请求为,/abc//def
则它将匹配。
LocationMatch
描述: | 仅将随附的指令应用于正则表达式匹配的URL |
---|---|
句法: | <LocationMatch
regex> ... </LocationMatch> |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
的<LocationMatch>
指令限制了由URL所附指示的范围内,以相同的方式来<Location>
。但是,它使用正则表达式
作为参数而不是简单的字符串。例如:
<LocationMatch "/(extra|special)/data"> # ... </LocationMatch>
将匹配包含子字符串/extra/data
或的URL /special/data
。
如果目的是URL 以开头
/extra/data
,而不是仅
包含 /extra/data
,则在正则表达式前加上前缀^
以要求此。
<LocationMatch "^/(extra|special)/data">
从2.4.8开始,将捕获命名的组和反向引用,并将其以大写的前缀“ MATCH_”的相应名称写入环境。这样可以从表达式和模块(如)中
引用URL的元素mod_rewrite
。为了避免混淆,将忽略编号(未命名)的反向引用。请改用命名组。
<LocationMatch "^/combined/(?<sitename>[^/]+)"> Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example </LocationMatch>
斜杠具有特殊的含义,具体取决于它在URL中出现的位置。人们可能会习惯于文件系统中多个相邻斜杠经常折叠为单个斜杠(即,/home///foo
与相同
/home/foo
)的行为。在URL空间中,这不一定是正确的。该<LocationMatch>
指令和正则表达式版本<Location>
要求你明确指定多个斜线,如果这是你的意图。
例如,<LocationMatch "^/abc">
将匹配请求URL /abc
而不匹配请求URL
//abc
。<Location>
当用于代理请求时,(非正则表达式)指令的行为类似。但是,当(非正则表达式)<Location>
用于非代理请求时,它将隐式地将多个斜杠与单个斜杠匹配。例如,如果您指定<Location "/abc/def">
且请求为,/abc//def
则它将匹配。
描述: | 控制ErrorLog的详细程度 |
---|---|
句法: | LogLevel [module:]level
[module:level] ...
|
默认: | LogLevel warn |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
兼容性: | Apache HTTP Server 2.3.6和更高版本提供了按模块和按目录的配置 |
LogLevel
调整错误日志中记录的消息的详细程度(请参见ErrorLog
指令)。按照重要性递减的顺序,可以使用以下
级别:
水平 | 描述 | 例 |
---|---|---|
emerg |
紧急情况-系统无法使用。 | “孩子无法打开锁定文件。正在退出” |
alert |
必须立即采取行动。 | “ getpwuid:无法从uid确定用户名” |
crit |
关键条件。 | “套接字:无法获取套接字,正在退出子进程” |
error |
错误条件。 | “脚本头过早结束” |
warn |
警告条件。 | “子进程1234没有退出,发送了另一个SIGHUP” |
notice |
正常但状况显着。 | “ httpd:捕获了SIGBUS,试图将内核转储到...” |
info |
信息性的。 | “服务器似乎很忙,(您可能需要增加StartServers或Min / MaxSpareServers)...” |
debug |
调试级消息 | “正在打开配置文件...” |
trace1 |
追踪讯息 | “代理:FTP:控制连接完成” |
trace2 |
追踪讯息 | “代理:CONNECT:将CONNECT请求发送到远程代理” |
trace3 |
追踪讯息 | “ openssl:握手:开始” |
trace4 |
追踪讯息 | “从缓冲的SSL旅读取,模式0,17个字节” |
trace5 |
追踪讯息 | “映射查找失败:map = rewritemap key = keyname” |
trace6 |
追踪讯息 | “缓存查找失败,强制进行新的地图查找” |
trace7 |
跟踪消息,转储大量数据 | “ | 0000:02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |” |
trace8 |
跟踪消息,转储大量数据 | “ | 0000:02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |” |
当指定了特定级别时,还将报告来自所有其他更高级别的消息。
例如,当LogLevel info
指定时,日志级别为notice
和的
消息warn
也将被发布。
建议使用至少一个级别crit
。
例如:
LogLevel notice
当记录到常规文件时,该级别的消息
notice
无法被抑制,因此总是被记录。但是,当使用完成日志记录时,这并不适用syslog
。
指定不带模块名称的级别会将所有模块的级别重置为该级别。使用模块名称指定级别将仅设置该模块的级别。可以使用模块源文件名,模块标识符或带有_module
省略尾随的模块标识符作为模块规范。这意味着以下三个规格是等效的:
LogLevel info ssl:warn LogLevel info mod_ssl.c:warn LogLevel info ssl_module:warn
也可以更改每个目录的级别:
LogLevel info <Directory "/usr/local/apache/htdocs/app"> LogLevel debug </Directory>
描述: | 持久连接上允许的请求数 |
---|---|
句法: | MaxKeepAliveRequests number |
默认: | MaxKeepAliveRequests 100 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该MaxKeepAliveRequests
指令限制打开时每个连接允许的请求数
KeepAlive
。如果将其设置为0
,将允许无限制的请求。我们建议将此设置保持较高的值,以实现最佳服务器性能。
例如:
MaxKeepAliveRequests 500
描述: | 100-200,150-300 返回完整资源之前允许的重叠范围数(例如:) |
---|---|
句法: | MaxRangeOverlaps default | unlimited | none | number-of-ranges |
默认: | MaxRangeOverlaps 20 |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache HTTP Server 2.3.15和更高版本中可用 |
该MaxRangeOverlaps
指令限制服务器愿意返回给客户端的重叠HTTP范围的数量。如果请求的重叠范围超出允许范围,则返回完整资源。
描述: | 100-200,50-70 返回完整资源之前允许的范围反转次数(例如:) |
---|---|
句法: | MaxRangeReversals default | unlimited | none | number-of-ranges |
默认: | MaxRangeReversals 20 |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache HTTP Server 2.3.15和更高版本中可用 |
该MaxRangeReversals
指令限制服务器愿意返回给客户端的HTTP范围反转的次数。如果请求的范围反转超出允许范围,则返回完整资源。
描述: | 返回完整资源之前允许的范围数 |
---|---|
句法: | MaxRanges default | unlimited | none | number-of-ranges |
默认: | MaxRanges 200 |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache HTTP Server 2.3.15和更高版本中可用 |
该MaxRanges
指令限制服务器愿意返回给客户端的HTTP范围的数量。如果请求的范围超出允许范围,则返回完整资源。
描述: | 控制服务器是否合并URL中的连续斜杠。 |
---|---|
句法: | MergeSlashes ON|OFF |
默认: | MergeSlashes ON |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在2.4.39中添加 |
默认情况下,服务器在请求URL的路径部分中合并(或折叠)多个连续的斜杠('/')字符。
将URL映射到文件系统时,这些多个斜杠并不重要。但是,URL的其他处理方式(例如CGI或代理)可能更喜欢保留多个连续斜杠的含义。在这些情况下,MergeSlashes
可以将其设置为
OFF以保留多个连续的斜杠。在这些配置中,URL的路径组件相匹配的配置文件中使用正则表达式(LocationMatch
,
RewriteRule
,...),需要考虑多个连续的斜杠。
描述: | 确定预告片是否合并到标题中 |
---|---|
句法: | MergeTrailers [on|off] |
默认: | MergeTrailers off |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 2.4.11及更高版本 |
该指令控制是否将HTTP预告片复制到HTTP标头的内部表示中。当大多数请求头处理将有机会检查或修改请求头后,请求主体已被完全消耗时,就会发生这种合并。
提供此选项是为了与2.4.11之前的版本兼容,在这些版本中始终合并了预告片。
描述: | 为所有或指定的互斥配置互斥机制并锁定文件目录 |
---|---|
句法: | Mutex mechanism [default|mutex-name] ... [OmitPID] |
默认: | Mutex default |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache HTTP Server 2.3.4和更高版本中可用 |
该Mutex
指令设置httpd和模块用来序列化对资源的访问的机制以及锁定文件的位置(可选)。指定default
为第二个参数来更改所有互斥锁的设置。指定互斥量名称(请参见下表)作为第二个参数,以仅覆盖该互斥量的默认值。
该Mutex
指令通常在以下特殊情况下使用:
该指令仅配置已使用ap_mutex_register()
API 在核心服务器上注册的互斥锁。与httpd捆绑在一起的所有模块均支持该Mutex
指令,但第三方模块可能不支持。请查阅第三方模块的文档,该文档必须指出如果支持此伪指令可以配置的互斥量名称。
可以使用以下互斥机制:
default | yes
none | no
这有效地禁用了互斥锁,并且只有在模块指示它是有效的选择时才允许互斥锁使用。有关更多信息,请查阅模块文档。
posixsem
这是基于Posix信号量的互斥体变体。
如果进程中的一个线程持有互斥段错误,则信号所有权将无法恢复,从而导致Web服务器挂起。
sysvsem
这是基于SystemV IPC信号量的互斥体变体。
如果进程在删除信号之前崩溃,则有可能“泄漏” SysV信号。
信号量API允许任何在与Web服务器相同的uid下运行的CGI(即所有CGI,除非您使用诸如suexec
或cgiwrapper
)来拒绝服务攻击。
sem
这将选择“最佳”可用信号量实现,并按此顺序在Posix和SystemV IPC信号量之间进行选择。
pthread
这是基于跨进程Posix线程互斥量的互斥体变体。
在大多数系统上,如果子进程在持有使用此实现的互斥锁的同时异常终止,则服务器将死锁并停止响应请求。发生这种情况时,服务器将需要手动重启才能恢复。
Solaris和Linux是显着的例外,因为它们提供了一种机制,该机制通常允许子进程在持有互斥锁时异常终止后恢复互斥锁。
如果您的系统兼容POSIX或实现了该
pthread_mutexattr_setrobust_np()
功能,则可以pthread
安全地使用该选件。
fcntl:/path/to/mutex
这是互斥体的变体,其中物理(锁定)文件和
fcntl()
函数用作互斥体。
在多线程,多进程环境中使用基于此机制的多个互斥锁时,如果fcntl()
不知道线程的有效互斥锁操作(例如在Solaris上),则会报告死锁错误(EDEADLK)。
flock:/path/to/mutex
这与fcntl:/path/to/mutex
方法类似,不同之处在于该flock()
函数用于提供文件锁定。
file:/path/to/mutex
这将选择“最佳”可用文件锁定实现,fcntl
并在和之间flock
按该顺序进行选择。
大多数机制仅在基础平台和APR支持的选定平台上可用。并非在所有平台上都可用的机制是posixsem, sysvsem,sem,pthread,fcntl, flock和file。
使用基于文件的机制fcntl和flock,该路径(如果提供)是将在其中创建锁定文件的目录。默认目录是httpd相对于的运行时文件目录
ServerRoot
。始终将本地磁盘文件系统用于/path/to/mutex
NFS文件系统或AFS文件系统上的目录,而永远不要使用该目录。文件的基本名称将是互斥体类型,模块提供的可选实例字符串,并且除非OmitPID
指定了关键字,否则
将附加httpd父进程的进程ID以使文件名唯一,从而避免在多个httpd时发生冲突。实例共享一个锁文件目录。例如,如果互斥名称为mpm-accept
且锁定文件目录为/var/httpd/locks
,父进程ID为12345的httpd实例的锁定文件名将为
/var/httpd/locks/mpm-accept.12345
。
最好避免将互斥文件放在世界可写的目录中,例如,/var/tmp
因为有人可能会创建拒绝服务攻击,并通过创建与服务器尝试创建的文件具有相同名称的锁文件来阻止服务器启动。
下表记录了httpd和捆绑的模块使用的互斥锁的名称。
互斥体名称 | 模组 | 受保护的资源 |
---|---|---|
mpm-accept |
prefork 和worker MPM |
传入的连接,以避免打雷的牧群问题;有关更多信息,请参考 性能调整 文档。 |
authdigest-client |
mod_auth_digest |
共享内存中的客户端列表 |
authdigest-opaque |
mod_auth_digest |
共享内存中的计数器 |
ldap-cache |
mod_ldap |
LDAP结果缓存 |
rewrite-map |
mod_rewrite |
与外部映射程序进行通信,以避免来自多个请求的混合I / O |
ssl-cache |
mod_ssl |
SSL会话缓存 |
ssl-stapling |
mod_ssl |
OCSP装订响应缓存 |
watchdog-callback |
mod_watchdog |
特定客户端模块的回调函数 |
该OmitPID
关键字抑制除了从锁定的文件名的httpd父进程ID的。
在以下示例中,用于MPM接受互斥的互斥机制将从默认编译为fcntl
,并在directory中创建关联的锁定文件
/var/httpd/locks
。所有其他互斥锁的互斥锁机制将从已编译的默认值更改为sysvsem
。
Mutex sysvsem default Mutex fcntl:/var/httpd/locks mpm-accept
描述: | 弃用:指定用于名称虚拟主机的IP地址 |
---|---|
句法: | NameVirtualHost addr[:port] |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
在2.3.11之前,NameVirtualHost
需要指示服务器特定的IP地址和端口组合可用作基于名称的虚拟主机。在2.3.11及更高版本中,每当在多个虚拟主机中使用IP地址和端口组合时,都会自动为该地址启用基于名称的虚拟主机。
该指令当前无效。
描述: | 配置特定目录中可用的功能 |
---|---|
句法: | Options
[+|-]option [[+|-]option] ... |
默认: | Options FollowSymlinks |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 选件 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在2.3.11中将默认值从All更改为FollowSymlinks |
该Options
指令控制特定目录中可用的服务器功能。
选项可以设置为None
,在这种情况下,不会启用任何附加功能,或者以下一项或多项:
All
MultiViews
。ExecCGI
mod_cgi
允许
使用执行CGI脚本。FollowSymLinks
即使服务器遵循符号链接,它也不会
更改用于与<Directory>
节匹配的路径名。
在FollowSymLinks
和
SymLinksIfOwnerMatch
Options
只在工作<Directory>
段或
.htaccess
文件。
忽略此选项不应被视为安全限制,因为符号链接测试会受到使其无法回避的竞争条件的影响。
Includes
mod_include
允许
提供的服务器端包含。IncludesNOEXEC
#exec
cmd
和#exec cgi
被禁用。仍然可以#include virtual
从ScriptAlias
ed目录使用CGI脚本
。Indexes
DirectoryIndex
(如,index.html
)在该目录中,然后
mod_autoindex
将返回目录的格式化上市。MultiViews
mod_negotiation
。
如果将设置<Directory>
为以外的其他位置,则会忽略此选项,因为mod_negotiation
需要实际资源进行比较和评估。
SymLinksIfOwnerMatch
在FollowSymLinks
和
SymLinksIfOwnerMatch
Options
只在工作<Directory>
段或
.htaccess
文件。
此选项不应被视为安全限制,因为符号链接测试会受到使其无法回避的竞争条件的影响。
通常,如果Options
一个目录可以应用多个目录,则使用最具体的目录,而其他目录则被忽略。选项不会合并。(请参阅节的合并方法。)但是,如果指令上的所有选项
Options
都以a
+
或-
符号开头,则这些选项将被合并。任何以a开头+
的选项都将添加到当前有效的选项中,并且将所有以a
-
开头的选项从当前有效的选项中删除。
Options
与a +
或
-
不与a 混合使用无效的语法,并且在服务器启动期间将被语法检查(带有中止)拒绝。
例如,不带+
和-
符号:
<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
禁用服务器端包含。
没有其他任何设置时的默认值为
FollowSymlinks
。
描述: | 侦听套接字的协议 |
---|---|
句法: | Protocol protocol |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache 2.1.5和更高版本中可用。在Windows上,从Apache 2.3.3及更高版本开始。 |
该指令指定用于特定侦听套接字的协议。该协议用于确定哪个模块应处理请求,并通过AcceptFilter
指令应用协议特定的优化。
如果您在非标准端口上运行,则只需要设置协议即可;否则,http
假定端口80和https
端口443。
例如,如果您https
在非标准端口上运行,请明确指定协议:
Protocol https
您也可以使用Listen
指令指定协议。
描述: | 服务器/虚拟主机可用的协议 |
---|---|
句法: | Protocols protocol ... |
默认: | Protocols http/1.1 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 仅在Apache 2.4.17及更高版本中可用。 |
该伪指令指定服务器/虚拟主机支持的协议列表。该列表确定客户端可以为此服务器/主机协商的允许协议。
如果要扩展服务器/主机的可用协议,则需要设置协议。默认情况下,仅允许使用http / 1.1协议(包括与1.0和0.9客户端的兼容性)。
例如,如果要为具有TLS的服务器支持HTTP / 2,请指定:
Protocols h2 http/1.1
有效协议适用http/1.1
于http和https连接,
h2
https连接和h2c
http连接。模块可以启用更多协议。
指定不可用/禁用的协议是安全的。这样的协议名称将被忽略。
仅当虚拟主机没有自己的Protocols指令时,才会为虚拟主机继承基本服务器中指定的协议。或者,反过来,虚拟主机中的Protocols指令将替换基本服务器中的任何此类指令。
描述: | 确定协议的顺序是否确定协商期间的优先级 |
---|---|
句法: | ProtocolsHonorOrder On|Off |
默认: | ProtocolsHonorOrder On |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 仅在Apache 2.4.17及更高版本中可用。 |
该指令指定服务器是否应遵循Protocols
指令列出协议的顺序。
如果配置为“关”,则客户端提供的协议列表顺序优先于服务器配置中的顺序。
随着ProtocolsHonorOrder
设置为on
(默认值),客户端排序并不重要,只是排序在服务器设置影响的协议协商的结果。
描述: | 控制REDIRECT_URL环境变量是否完全合格 |
---|---|
句法: | QualifyRedirectURL On|Off |
默认: | QualifyRedirectURL Off |
内容: | 服务器配置,虚拟主机,目录 |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 2.4.18及更高版本中支持的指令。2.4.17就像配置了“ QualifyRedirectURL On”一样。 |
该指令控制服务器是否将确保REDIRECT_URL环境变量完全合格。默认情况下,该变量包含客户端请求的逐字网址,例如“ /index.html”。使用QualifyRedirectURL On
,同一请求将产生一个值,例如“ http://www.example.com/index.html”。
即使未设置此指令,当针对完全限定的URL发出请求时,REDIRECT_URL也将保持完全限定。
描述: | 允许为正则表达式配置全局/默认选项 |
---|---|
句法: | RegexDefaultOptions [none] [+|-]option [[+|-]option] ... |
默认: | RegexDefaultOptions DOTALL DOLLAR_ENDONLY |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 仅在Apache 2.4.30及更高版本中可用。 |
该指令将某些默认行为添加到以后使用的ANY正则表达式中。
任何以“ +”开头的选项都将添加到已设置的选项中。
任何以“-”开头的选项将从已设置的选项中删除。
将设置任何没有'+'或'-'的选项,并删除任何其他已设置的选项。
该none
关键字复位任何已经设置的选项。
选项可以是:
ICASE
EXTENDED
DOTALL
DOLLAR_ENDONLY
# Add the ICASE option for all regexes by default RegexDefaultOptions +ICASE ... # Remove the default DOLLAR_ENDONLY option, but keep any other one RegexDefaultOptions -DOLLAR_ENDONLY ... # Set the DOTALL option only, resetting any other one RegexDefaultOptions DOTALL ... # Reset all defined options RegexDefaultOptions none ...
描述: | 注册非标准的HTTP方法 |
---|---|
句法: | RegisterHttpMethod method [method [...]] |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache HTTP Server 2.4.24和更高版本中可用 |
此伪指令可用于注册其他HTTP方法。如果非标准方法需要与接受方法名称作为参数的指令一起使用,或者在服务器已配置为仅将识别的方法传递给模块时允许通过代理或CGI脚本使用特定的非标准方法,则这是必需的。
描述: | 限制由Apache httpd子级启动的进程的CPU消耗 |
---|---|
句法: | RLimitCPU seconds|max [seconds|max] |
默认: | Unset; uses operating system defaults |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
带有1或2个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。任何一个参数都可以是一个数字,也max
可以向服务器指示该限制应设置为操作系统配置所允许的最大值。提高最大资源限制要求服务器root
在初始启动阶段或在初始启动阶段运行。
这适用于从Apache httpd子级服务请求派生的进程,而不适用于Apache httpd子级本身。这包括CGI脚本和SSI exec命令,但不包括从Apache httpd父节点派生的任何进程,例如管道日志。
CPU资源限制以每个进程的秒数表示。
描述: | 限制由Apache httpd子级启动的进程的内存消耗 |
---|---|
句法: | RLimitMEM bytes|max [bytes|max] |
默认: | Unset; uses operating system defaults |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
带有1或2个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。任何一个参数都可以是一个数字,也max
可以向服务器指示该限制应设置为操作系统配置所允许的最大值。提高最大资源限制要求服务器root
在初始启动阶段或在初始启动阶段运行。
这适用于从Apache httpd子级服务请求派生的进程,而不适用于Apache httpd子级本身。这包括CGI脚本和SSI exec命令,但不包括从Apache httpd父节点派生的任何进程,例如管道日志。
内存资源限制以每个进程的字节数表示。
描述: | 限制Apache httpd子级启动的进程可以启动的进程数 |
---|---|
句法: | RLimitNPROC number|max [number|max] |
默认: | Unset; uses operating system defaults |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
带有1或2个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。任何一个参数都可以是一个数字,也max
可以向服务器指示该限制应设置为操作系统配置所允许的最大值。提高最大资源限制要求服务器root
在初始启动阶段或在初始启动阶段运行。
这适用于从Apache httpd子级服务请求派生的进程,而不适用于Apache httpd子级本身。这包括CGI脚本和SSI exec命令,但不包括从Apache httpd父节点派生的任何进程,例如管道日志。
进程限制控制每个用户的进程数。
如果CGI进程不在 Web服务器用户ID之外的其他用户ID下运行,则此伪指令将限制服务器本身可以创建的进程数。这种情况的证据将被显示
cannot fork
在消息中
error_log
。
描述: | 为CGI脚本定位解释器的技术 |
---|---|
句法: | ScriptInterpreterSource Registry|Registry-Strict|Script |
默认: | ScriptInterpreterSource Script |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 仅Win32。 |
该指令用于控制Apache httpd如何查找用于运行CGI脚本的解释器。默认设置为
Script
。这将导致Apache httpd使用#!
脚本中shebang行(第一行,以开头)指向的解释器。在Win32系统上,此行通常如下所示:
#!C:/Perl/bin/perl.exe
或者,如果perl
位于中PATH
,则只需:
#!perl
设置ScriptInterpreterSource Registry
将导致HKEY_CLASSES_ROOT
使用脚本文件扩展名(例如.pl
)作为搜索关键字来搜索Windows注册表树。由注册表子项定义的命令,Shell\ExecCGI\Command
或者如果不存在,则由子项
定义的命令
Shell\Open\Command
用于打开脚本文件。如果找不到注册表项,则Apache httpd会退回到该Script
选项的行为
。
ScriptInterpreterSource
Registry
与ScriptAlias
ed目录一起使用时要小心,因为Apache httpd会尝试执行该目录中的每个文件。该Registry
设置可能导致对通常不执行的文件进行不希望的程序调用。例如,.htm
大多数Windows系统上文件的默认打开命令将执行Microsoft Internet Explorer,因此.htm
,对脚本目录中现有文件的任何HTTP请求都将在服务器后台启动浏览器。这是在一分钟左右的时间内使系统崩溃的好方法。
该选项的Registry-Strict
作用与Registry
仅使用子项相同Shell\ExecCGI\Command
。ExecCGI
钥匙不是普通的
钥匙。必须在Windows注册表中手动配置它,因此可以防止在系统上意外调用程序。
描述: | 假设请求本身大于63个字符,请确定mod_status是显示请求的前63个字符还是显示最后63个字符。 |
---|---|
句法: | SeeRequestTail On|Off |
默认: | SeeRequestTail Off |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 在Apache httpd 2.2.7和更高版本中可用。 |
mod_status with ExtendedStatus On
显示正在处理的实际请求。出于历史目的,实际上仅存储了63个字符用于显示。该指令控制是否存储第63个字符(前一个行为和默认行为)或是否存储最后63个字符。当然,这仅适用于请求的长度为64个字符或更大的情况。
如果Apache httpd正在处理GET /disk1/storage/apache/htdocs/images/imagestore1/food/apples.jpg HTTP/1.1
mod_status,则显示如下:
关(默认) | GET / disk1 / storage / apache / htdocs / images / imagestore1 / food / apples |
---|---|
上 | orage / apache / htdocs / images / imagestore1 / food / apples.jpg HTTP / 1.1 |
描述: | 服务器在发送给客户端的错误消息中包含的电子邮件地址 |
---|---|
句法: | ServerAdmin email-address|URL |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该ServerAdmin
设置的联系人地址,所述服务器在它返回到客户端的任何错误消息包括。如果httpd
不能将提供的参数识别为URL,则假定它是一个电子邮件地址,并
mailto:
在超链接目标中添加它。但是,建议使用实际的电子邮件地址,因为有许多CGI脚本可以进行此假设。如果要使用URL,它应指向您控制下的另一台服务器。否则,如果出现错误,用户可能无法与您联系。
为此,可能需要设置一个专用地址,例如
ServerAdmin www-admin@foo.example.com
因为用户并不总是提到他们在谈论服务器!
描述: | 将请求与名称虚拟主机匹配时使用的主机的备用名称 |
---|---|
句法: | ServerAlias hostname [hostname] ... |
内容: | 虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该ServerAlias
指令设置主机的备用名称,以与基于名称的虚拟主机一起使用。该
ServerAlias
可包含通配符,如果合适的话。
<VirtualHost *:80> ServerName server.example.com ServerAlias server server2.example.com server2 ServerAlias *.example.com UseCanonicalName Off # ... </VirtualHost>
一组最匹配的基于名称的虚拟主机 <virtualhost>
将按照它们在配置中出现的顺序进行处理。使用第一个匹配ServerName
或ServerAlias
,通配符的优先级没有不同(服务器名和ServerAlias也不相同)。
<VirtualHost>
伪指令中名称的完整列表被视为(非通配符)
ServerAlias
。
描述: | 服务器用来标识自己的主机名和端口 |
---|---|
句法: | ServerName [scheme://]domain-name|ip-address[:port] |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该ServerName
伪指令设置服务器用来标识自身的请求方案,主机名和端口。
ServerName
使用基于名称ServerAlias
的虚拟主机时,用于(可能与结合使用)唯一标识虚拟主机。
此外,当UseCanonicalName
设置为非默认值时创建自引用重定向URL时将使用此选项
。
例如,如果托管Web服务器的计算机的名称为simple.example.com
,但该计算机还具有DNS别名,www.example.com
并且您希望如此标识Web服务器,则应使用以下指令:
ServerName www.example.com
该ServerName
指令可以出现在服务器定义内的任何位置。但是,每个外观都会覆盖先前的外观(在该服务器内)。
如果未ServerName
指定,服务器首先尝试向操作系统询问系统主机名,以推断出客户端可见的主机名,如果失败,则对系统上存在的IP地址执行反向查找。
如果没有在中指定端口
ServerName
,则服务器将使用传入请求中的端口。为了获得最佳的可靠性和可预测性,您应该使用ServerName
指令指定一个明确的主机名和端口。
如果您使用的是基于名称的虚拟主机,则
部分ServerName
内部将
<VirtualHost>
指定必须在请求Host:
标头中显示的主机名,
以匹配该虚拟主机。
有时,服务器在运行SSL的设备(例如反向代理,负载平衡器或SSL卸载设备)后面运行。在这种情况下,请https://
在ServerName
指令中指定客户端连接的
方案和端口号,以确保服务器生成正确的自引用URL。
看到的说明
UseCanonicalName
和
UseCanonicalPhysicalPort
指令,其用于确定自引用的URL(例如,通过是否设置
mod_dir
模块)将是指指定的端口,或在客户端的请求给定的端口号。
如果未设置ServerName
服务器可以解析为IP地址的名称,则会导致启动警告。httpd
然后,将使用系统hostname
命令使用它可以确定的任何主机名。这几乎永远不会是您真正想要的主机名。
httpd: Could not reliably determine the server's fully qualified domain name, using rocinante.local for ServerName
描述: | 不兼容的浏览器访问的基于名称的虚拟主机的旧版URL路径名 |
---|---|
句法: | ServerPath URL-path |
内容: | 虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该ServerPath
指令设置主机的旧版URL路径名,以与基于名称的虚拟主机一起使用。
描述: | 服务器安装的基本目录 |
---|---|
句法: | ServerRoot directory-path |
默认: | ServerRoot /usr/local/apache |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
该ServerRoot
伪指令设置服务器所在的目录。通常,它将包含子目录conf/
和logs/
。其他配置指令(例如Include
或LoadModule
)中的相对路径被视为相对于该目录。
ServerRoot "/home/httpd"
ServerRoot
可以使用的--prefix
参数来
修改的默认位置configure
,并且服务器的大多数第三方发行版的默认位置都不同于上面列出的默认位置。
-d
选择httpd
ServerRoot
描述: | 在服务器生成的文档上配置页脚 |
---|---|
句法: | ServerSignature On|Off|EMail |
默认: | ServerSignature Off |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 所有 |
状态: | 核心 |
模块: | 核心 |
该ServerSignature
指令允许在服务器生成的文档(错误消息,mod_proxy
ftp目录列表,mod_info
输出等)下配置尾随行。之所以要启用此页脚行,是因为在代理服务器链中,用户通常无法分辨出哪个链接服务器实际上产生了返回的错误消息。
该Off
设置是默认设置,它禁止显示页脚行。该On
设置仅在服务器版本号和ServerName
所服务虚拟主机的行之间添加一行,并且该EMail
设置还额外创建了ServerAdmin
对所引用文档的“ mailto:”引用。
所显示的服务器版本号的详细信息由ServerTokens
指令控制。
描述: | 配置Server HTTP响应头 |
---|---|
句法: | ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full |
默认: | ServerTokens Full |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
此伪指令控制Server
发送回客户端的响应头字段是否包括服务器的通用OS类型的描述以及有关嵌入式模块的信息。
ServerTokens Full
(或未指定)Server: Apache/2.4.2
(Unix) PHP/4.2.2 MyMod/1.2
ServerTokens Prod[uctOnly]
Server:
Apache
ServerTokens Major
Server:
Apache/2
ServerTokens Minor
Server:
Apache/2.4
ServerTokens Min[imal]
Server:
Apache/2.4.2
ServerTokens OS
Server: Apache/2.4.2
(Unix)
此设置适用于整个服务器,并且不能在逐个虚拟主机的基础上启用或禁用。
该指令还控制该指令提供的信息ServerSignature
。
ServerTokens
为小于,
minimal
因为这样会使调试互操作问题更加困难。另请注意,禁用Server:标头根本没有任何作用来使您的服务器更安全。“默默无闻的安全”的想法是一个神话,并导致错误的安全感。描述: | 强制所有匹配文件由处理程序处理 |
---|---|
句法: | SetHandler handler-name|none|expression |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
兼容性: | 表达式参数2.4.19及更高版本 |
当放入一个.htaccess
文件或
<Directory>
或
<Location>
部分,该指令将强制所有匹配的文件通过解析处理程序给出
的处理程序名。例如,如果您有一个目录希望完全解析为imagemap规则文件,而不管其扩展名如何,则可以将以下内容放入.htaccess
该目录中的
文件中:
SetHandler imap-file
另一个例子:如果您希望服务器在每次http://servername/status
调用URL时都显示状态报告,
则可以将以下内容放入httpd.conf
:
<Location "/status"> SetHandler server-status </Location>
您也可以使用此伪指令为具有特定文件扩展名的文件配置特定处理程序。例如:
<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch>
字符串值表达式可用于引用每个请求变量,包括对已命名正则表达式的反向引用:
<LocationMatch ^/app/(?<sub>[^/]+)/> SetHandler "proxy:unix:/var/run/app_%{env:MATCH_sub}.sock|fcgi://localhost:8080" </LocationMatch>
您可以SetHandler
使用value 覆盖先前定义的指令None
。
由于SetHandler
覆盖默认处理程序,因此抑制了诸如将以斜杠(/)结尾的URL作为目录或索引文件进行处理的正常行为。
描述: | 设置将处理客户端请求和POST输入的过滤器 |
---|---|
句法: | SetInputFilter filter[;filter...] |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
该SetInputFilter
指令设置一个或多个过滤器,当服务器接收到客户机请求和POST输入时,将处理这些请求。这是在其他地方定义的任何过滤器的补充,包括
AddInputFilter
指令。
如果指定了多个过滤器,则必须按分号将它们按处理内容的顺序分隔。
描述: | 设置将处理服务器响应的过滤器 |
---|---|
句法: | SetOutputFilter filter[;filter...] |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 核心 |
模块: | 核心 |
该SetOutputFilter
指令将被发送到客户端之前,将处理来自服务器的响应的过滤器。这是在其他地方定义的任何过滤器的补充,包括
AddOutputFilter
指令。
例如,以下配置将处理/www/data/
服务器端包含目录中的所有文件。
<Directory "/www/data/"> SetOutputFilter INCLUDES </Directory>
如果指定了多个过滤器,则必须按分号将它们按处理内容的顺序分隔。
描述: | 服务器在失败请求之前等待某些事件的时间 |
---|---|
句法: | TimeOut seconds |
默认: | TimeOut 60 |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该TimeOut
指令定义了Apache httpd在各种情况下等待I / O的时间:
从客户端读取数据时,如果读取缓冲区为空,则等待TCP数据包到达的时间。
对于新连接上的初始数据,该伪指令
AcceptFilter
只有在任何配置将新连接传递到服务器后才生效。
mod_cgi
和中mod_cgid
,等待CGI脚本的任何单个输出块的时间长度。mod_ext_filter
,等待过滤过程输出的时间长度。mod_proxy
,默认超时值if
ProxyTimeout
未配置。描述: | 确定TRACE 请求的行为 |
---|---|
句法: | TraceEnable [on|off|extended] |
默认: | TraceEnable on |
内容: | 服务器配置,虚拟主机 |
状态: | 核心 |
模块: | 核心 |
该指令将覆盖TRACE
核心服务器和的行为mod_proxy
。默认情况
TraceEnable on
下,TRACE
根据RFC 2616 允许请求,该请求不允许任何请求正文伴随该请求。
TraceEnable off
导致核心服务器并向
客户端mod_proxy
返回405
(不允许使用方法)错误。
最后,仅出于测试和诊断目的,可以使用不符合要求的TraceEnable
extended
指令允许请求正文。核心(作为源服务器)会将请求主体限制为64Kb(如果Transfer-Encoding: chunked
使用块头,则另加8Kb
)。核心将在响应主体中反映完整的标头和所有块标头。作为代理服务器,请求主体不限于64Kb。
尽管有相反的说法,但启用该TRACE
方法不会在Apache httpd中暴露任何安全漏洞。该TRACE
方法由HTTP / 1.1规范定义,并且预期实现会支持该方法。
描述: | 未定义变量的存在 |
---|---|
句法: | UnDefine parameter-name |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
此伪指令可用于切换节的使用,<IfDefine>
而无需更改
-D
任何启动脚本中的参数。
尽管在虚拟主机上下文中支持此指令,但对其进行的更改对于任何后续的配置指令(包括任何封闭的虚拟主机)都是可见的。
描述: | 配置服务器如何确定自己的名称和端口 |
---|---|
句法: | UseCanonicalName On|Off|DNS |
默认: | UseCanonicalName Off |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
在许多情况下,Apache httpd必须构造一个自我引用的
URL,即,引用回同一服务器的URL。对于
UseCanonicalName On
Apache,httpd将使用ServerName
指令中指定的主机名和端口来构造服务器的规范名称。此名称在所有自引用URL中SERVER_NAME
以及SERVER_PORT
CGI 和中的值中使用
。
使用UseCanonicalName Off
Apache httpd时,将使用客户机提供的主机名和端口(如果提供了主机名和端口)来形成自我引用的URL(否则,它将使用规范名称,如上定义)。这些值与用于实现基于名称的虚拟主机的值相同,并且可用于
相同的客户端。CGI变量
SERVER_NAME
也SERVER_PORT
将从客户端提供的值构造。
一个可能有用的示例是Intranet服务器上,在该服务器上,用户使用诸如的短名称连接到计算机www
。您会注意到,如果用户键入短名和URL(即目录)(例如
http://www/splat
,不带斜杠),则Apache httpd会将其重定向到
http://www.example.com/splat/
。如果您启用了身份验证,这将导致用户必须进行两次身份验证(www
一次又一次的身份验证www.example.com
-
有关更多信息,请参阅此主题的FAQ)。但是如果
UseCanonicalName
设置了Off
,那么Apache httpd将重定向到http://www/splat/
。
第三个选项,UseCanonicalName DNS
旨在与基于大规模IP的虚拟主机一起使用,以支持不提供Host:
标头的古老客户端
。使用此选项,Apache httpd在客户端连接到的服务器IP地址上执行反向DNS查找,以计算出自引用URL。
如果CGI对的值进行假设SERVER_NAME
,则此选项可能会破坏它们。客户端实际上可以自由地提供他们想要的任何值作为主机名。但是,如果CGI仅SERVER_NAME
用于构造自引用URL,则应该没问题。
描述: | 配置服务器如何确定自己的端口 |
---|---|
句法: | UseCanonicalPhysicalPort On|Off |
默认: | UseCanonicalPhysicalPort Off |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 核心 |
模块: | 核心 |
在许多情况下,Apache httpd必须构造一个自我引用的
URL,即,引用回同一服务器的URL。使用时
UseCanonicalPhysicalPort On
,Apache httpd将在为服务器构造规范端口以遵守UseCanonicalName
指令时,提供此请求用作潜在端口的实际物理端口号。使用UseCanonicalPhysicalPort Off
,Apache httpd永远不会使用实际的物理端口号,而是依靠所有已配置的信息来构造有效的端口号。
使用物理端口时查找的顺序如下:
UseCanonicalName On
Servername
UseCanonicalName Off | DNS
Host:
标头解析端口Servername
使用UseCanonicalPhysicalPort Off
,从订购中删除物理端口。
描述: | 包含仅适用于特定主机名或IP地址的指令 |
---|---|
句法: | <VirtualHost
addr[:port] [addr[:port]]
...> ... </VirtualHost> |
内容: | 服务器配置 |
状态: | 核心 |
模块: | 核心 |
<VirtualHost>
并且
</VirtualHost>
用于封装一组仅适用于特定虚拟主机的指令。可以使用虚拟主机上下文中允许的任何指令。服务器在特定虚拟主机上收到对文档的请求时,将使用本<VirtualHost>
节中随附的配置指令。Addr可以是以下任意一种,可以选择后面跟一个冒号和一个端口号(或*):
*
,用作通配符并匹配任何IP地址。_default_
,这是别名*
<VirtualHost 10.1.2.3:80> ServerAdmin webmaster@host.example.com DocumentRoot "/www/docs/host.example.com" ServerName host.example.com ErrorLog "logs/host.example.com-error_log" TransferLog "logs/host.example.com-access_log" </VirtualHost>
必须在方括号中指定IPv6地址,因为否则无法确定可选端口号。一个IPv6示例如下所示:
<VirtualHost [2001:db8::a00:20ff:fea7:ccea]:80> ServerAdmin webmaster@host.example.com DocumentRoot "/www/docs/host.example.com" ServerName host.example.com ErrorLog "logs/host.example.com-error_log" TransferLog "logs/host.example.com-access_log" </VirtualHost>
每个虚拟主机必须对应于服务器的不同IP地址,不同端口号或不同主机名,在前一种情况下,必须将服务器计算机配置为接受多个地址的IP数据包。(如果计算机没有多个网络接口,则可以使用以下ifconfig alias
命令完成此操作-如果您的操作系统支持该命令)。
使用<VirtualHost>
并
不会影响什么地址的Apache httpd的侦听。您可能需要确保Apache httpd使用监听正确的地址Listen
。
ServerName
应在每个<VirtualHost>
块内指定A。如果不存在,
ServerName
则将继承“主”服务器的配置。
收到请求后,服务器首先<VirtualHost>
仅基于本地IP地址和端口组合将其映射到最佳匹配
。非通配符具有更高的优先级。如果根本没有基于IP和端口的匹配发生,则使用“主”服务器配置。
如果多个虚拟主机包含最匹配的IP地址和端口,则服务器会根据请求的主机名从这些虚拟主机中选择最匹配的主机。如果找不到匹配的基于名称的虚拟主机,则将使用与IP地址匹配的第一个列出的虚拟主机。因此,给定IP地址和端口组合的第一个列出的虚拟主机是该IP和端口组合的默认虚拟主机。
请参阅安全性提示 文档,以获取有关如果启动日志的用户以外的任何人都可写存储日志文件的目录的原因,为什么会损害安全性的详细信息。