<-
Apache HTTP 服务器 2.4 > Apache核心功能

Apache核心功能

描述:始终可用的核心Apache HTTP Server功能
状态:核心
支持Apache!

指令

错误修正清单

也可以看看

最佳

AcceptFilter 指令

描述:为协议的侦听器套接字配置优化
句法: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,还检索网络端点地址,但是像noneconnect选项一样,它不等待初始数据传输。

在Windows上,none使用accept()而不是AcceptEx(),并且不会回收连接之间的套接字。这对于驱动程序支持已损坏的网络适配器以及某些虚拟网络提供程序(例如vpn驱动程序或垃圾邮件,病毒或间谍软件筛选器)很有用。

dataAcceptFilter(视窗)

对于2.4.23及更低版本,Windows data接受筛选器将一直等待,直到传输完数据并从单个AcceptEx()调用中检索了初始数据缓冲区和网络端点地址为止。此实现遭到拒绝服务攻击,已被禁用。

httpd的默认为当前版本的connectWindows上过滤器,并会回落到connect如果 data被指定。鼓励connect早期版本的用户为他们的AcceptFilter 添加显式设置,如上所示。

也可以看看

最佳

AcceptPathInfo 指令

描述:资源接受尾随路径名信息
句法:AcceptPathInfo On|Off|Default
默认:AcceptPathInfo Default
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心

该伪指令控制是否接受包含跟随实际文件名(或现有目录中不存在的文件)的尾随路径名信息的请求。尾随路径名信息可用于PATH_INFO环境变量中的脚本。

例如,假设位置/test/指向仅包含单个文件的目录 here.html。那么对于要求 /test/here.html/more/test/nothere.html/more双方收集 /morePATH_INFO

AcceptPathInfo指令的三个可能的参数 是:

Off
仅当请求映射到存在的文字路径时,该请求才会被接受。因此/test/here.html/more,如上例所示,在真实文件名之后具有尾随路径名信息的请求 将返回404 NOT FOUND错误。
On
如果前导路径组件映射到存在的文件,则将接受请求。/test/here.html/more如果/test/here.html映射到有效文件,则将接受 上述示例。
Default
具有尾随路径名信息的请求的处理方式由负责请求的处理程序确定。普通文件的核心处理程序默认为拒绝 PATH_INFO请求。提供脚本的处理程序(例如cgi-scriptisapi-handler)通常PATH_INFO默认情况下接受 。

AcceptPathInfo 指令的主要目的是允许您覆盖处理程序对accepting或rejecting的选择PATH_INFO。例如,当您使用过滤器(例如INCLUDES)基于生成内容时,此覆盖是必需的PATH_INFO。核心处理程序通常会拒绝该请求,因此您可以使用以下配置来启用此类脚本:

<Files "mypaths.shtml">
  Options +Includes
  SetOutputFilter INCLUDES
  AcceptPathInfo On
</Files>
最佳

AccessFileName 指令

描述:分布式配置文件的名称
句法: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>

也可以看看

最佳

AddDefaultCharset 指令

描述:响应内容类型为text/plain或时要添加的默认字符集参数text/html
句法:AddDefaultCharset On|Off|charset
默认:AddDefaultCharset Off
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心

当且仅当响应的content-type为text/plain或时,此伪指令指定要添加到响应的媒体类型charset参数的默认值(字符编码的名称) text/htmlMETA 尽管确切的行为通常取决于用户的客户端配置,但它应该覆盖通过元素在响应主体中指定的任何字符集。设置为AddDefaultCharset Off 禁用此功能。AddDefaultCharset On启用默认字符集iso-8859-1。假定其他任何值都是要使用的字符集,它应该是用于Internet媒体类型(MIME类型)的 IANA注册字符集值之一。例如:

AddDefaultCharset utf-8

AddDefaultCharset仅应在已知所有适用的文本资源都在该字符编码中并且不方便单独标记其字符集的情况下使用。一个这样的示例是将charset参数添加到包含生成的内容的资源(例如旧版CGI脚本),由于输出中包含用户提供的数据,这些资源可能容易​​受到跨站点脚本攻击。但是请注意,更好的解决方案是仅修复(或删除)这些脚本,因为设置默认字符集不会保护在浏览器中启用“自动检测字符编码”功能的用户。

也可以看看

最佳

AllowEncodedSlashes 指令

描述:确定是否允许通过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则强烈建议使用来作为安全措施。允许对斜杠进行解码可能会导致路径不安全。

也可以看看

最佳

AllowOverride 指令

描述:.htaccess文件中允许的指令类型
句法:AllowOverride All|None|directive-type [directive-type] ...
默认:AllowOverride None (2.3.9 and later), AllowOverride All (2.3.8 and earlier)
内容:目录
状态:核心
模块:核心

服务器找到.htaccess文件(由指定AccessFileName)时,需要知道该文件中声明的指令可以覆盖较早的配置指令。

仅在<目录>部分中可用

AllowOverride只有在有效的 <Directory> 无正则表达式指定的,不分段<Location><DirectoryMatch><Files>部分。

当此伪指令设置为NoneAllowOverrideList设置 为时None.htaccess文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取.htaccess文件系统中的文件。

当此指令设置All为时,文件中将允许 具有.htaccess 上下文的任何指令.htaccess

指令类型可指示以下分组之一。(有关每个指令类型启用了哪些指令的最新列表, 请参见重写类索引。)

验证配置
允许使用的授权指令(AuthDBMGroupFileAuthDBMUserFileAuthGroupFileAuthNameAuthTypeAuthUserFileRequire等等)。
文件信息
允许使用控制文档类型(的ErrorDocumentForceTypeLanguagePrioritySetHandlerSetInputFilterSetOutputFilter,并 mod_mime添加*和Remove *指令),文档元数据(HeaderRequestHeaderSetEnvIfSetEnvIfNoCaseBrowserMatchCookieExpiresCookieDomainCookieStyleCookieTrackingCookieName), mod_rewrite指令(RewriteEngineRewriteOptionsRewriteBaseRewriteCondRewriteRule), mod_alias指令(RedirectRedirectTempRedirectPermanentRedirectMatch),和 Actionmod_actions
指标
允许使用的指令控制目录索引的(AddDescriptionAddIconAddIconByEncodingAddIconByTypeDefaultIconDirectoryIndexFancyIndexingHeaderNameIndexIgnoreIndexOptionsReadmeName等等)。
限制
允许使用指令控制主机访问(中AllowDenyOrder)。
Nonfatal = [覆盖|未知|全部]
允许使用AllowOverride选项将.htaccess中的语法错误视为非致命错误。不会导致内部服务器错误,而是会忽略不允许的或无法识别的指令,并记录警告:
  • Nonfatal = Override将AllowOverride禁止的指令视为非致命指令。
  • Nonfatal = Unknown将未知指令视为非致命指令。这涵盖了由不存在的模块实现的错别字和指令。
  • Nonfatal = All将以上两者均视为非致命。

请注意,有效指令中的语法错误仍将导致内部服务器错误。

安全

非致命错误可能会对.htaccess用户造成安全隐患。例如,如果AllowOverride禁止AuthConfig,则用于限制访问网站的用户配置将被禁用。
选项 [= 选项,...]
允许使用控制特定目录功能(OptionsXBitHack)的指令。可以给等号,后跟一个逗号分隔的列表,不带空格,表示可以使用Options命令设置的选项。

隐式禁用选项

即使可以使用此伪指令限制.htaccess文件中可能使用的选项列表,但只要Options允许任何伪指令,就可以使用非相对语法禁用任何其他继承的选项。换句话说,此机制无法在允许设置任何其他选项的同时强制保持特定选项的设置。

AllowOverride Options=Indexes,MultiViews

例:

AllowOverride AuthConfig Indexes

在上面的示例中,所有既不在组中AuthConfig也不会Indexes引起内部服务器错误的指令 。

出于安全和性能方面的原因,不设置 AllowOverride比其他任何东西None 在你的<Directory "/">块。而是查找(或创建)<Directory>引用实际计划放置.htaccess文件的目录的块 。

也可以看看

最佳

AllowOverrideList 指令

描述:.htaccess文件中允许的个别指令
句法:AllowOverrideList None|directive [directive-type] ...
默认:AllowOverrideList None
内容:目录
状态:核心
模块:核心

服务器找到.htaccess文件(由指定AccessFileName)时,需要知道该文件中声明的指令可以覆盖较早的配置指令。

仅在<目录>部分中可用

AllowOverrideList只有在有效的 <Directory> 无正则表达式指定的,不分段<Location><DirectoryMatch><Files>部分。

当此伪指令设置为NoneAllowOverride设置为时None.htaccess文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取 .htaccess文件系统中的文件。

例:

AllowOverride None
AllowOverrideList Redirect RedirectMatch

在上面的示例中,仅允许RedirectRedirectMatch指令。其他所有情况都将导致内部服务器错误。

例:

AllowOverride AuthConfig
AllowOverrideList CookieTracking CookieName

在上面的示例中,AllowOverride AuthConfig 指令分组AllowOverrideList授予权限,并且仅对FileInfo指令分组中的两个指令授予权限。其他所有情况都将导致内部服务器错误。

也可以看看

最佳

CGIMapExtension 指令

描述:为CGI脚本定位解释器的技术
句法:CGIMapExtension cgi-path .extension
内容:目录.htaccess
覆写:文件信息
状态:核心
模块:核心
兼容性:仅NetWare

该指令用于控制Apache httpd如何查找用于运行CGI脚本的解释器。例如,设置 CGIMapExtension sys:\foo.nlm .foo将导致所有带有.foo扩展名的CGI脚本文件传递到FOO解释器。

最佳

CGIPassAuth 指令

描述:启用将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_AUTHORIZATIONApache HTTP Server早期版本中提供的编译时设置 。

该设置通过使用任何模块推崇 ap_add_common_vars(),如mod_cgimod_cgidmod_proxy_fcgimod_proxy_scgi,等。值得注意的是,它会影响通常无法处理请求但仍使用此API的模块;的示例是mod_includemod_ext_filter。不使用的第三方模块也ap_add_common_vars()可以选择遵守设置。

最佳

CGIVar 指令

描述:控制如何设置某些CGI变量
句法:CGIVar variable rule
内容:目录.htaccess
覆写:文件信息
状态:核心
模块:核心
兼容性:在Apache HTTP Server 2.4.21和更高版本中可用

该指令控制如何设置某些CGI变量。

REQUEST_URI规则:

original-uri (默认)
该值取自原始请求行,不会反映内部重定向或更改请求资源的子请求。
current-uri
该值反映当前正在处理的资源,由于内部重定向或子请求,该资源可能与来自客户端的原始请求不同。
最佳

ContentDigest 指令

描述:启用Content-MD5HTTP响应标头的生成
句法:ContentDigest On|Off
默认:ContentDigest Off
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:选件
状态:核心
模块:核心

此伪指令可以生成Content-MD5分别在RFC1864和RFC2616中定义的 标头。

MD5是一种算法,用于计算任意长度数据的“消息摘要”(有时称为“指纹”),并具有高度的信心,即数据中的任何更改都会反映在消息摘要中。

所述Content-MD5头提供实体-主体的端部到端消息完整性检查(MIC)。代理或客户端可以检查此标头,以检测对运输中的实体的意外修改。标头示例:

Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==

请注意,这可能会在您的服务器上导致性能问题,因为消息摘要是针对每个请求进行计算的(不缓存值)。

Content-MD5仅发送由送达的文档core,而不发送任何模块送达的文档。例如,SSI文档,CGI脚本的输出以及字节范围响应都没有此标头。

最佳

DefaultRuntimeDir 指令

描述:服务器运行时文件的基本目录
句法:DefaultRuntimeDir directory-path
默认:DefaultRuntimeDir DEFAULT_REL_RUNTIMEDIR (logs/)
内容:服务器配置
状态:核心
模块:核心
兼容性:在Apache 2.4.2和更高版本中可用

DefaultRuntimeDir指令设置服务器将在其中创建各种运行时文件(共享内存,锁等)的目录。如果设置为相对路径,则完整路径将相对于ServerRoot

DefaultRuntimeDir scratch/

的默认位置DefaultRuntimeDir可以通过DEFAULT_REL_RUNTIMEDIR在构建时更改#define 来修改。

注意:ServerRoot应在使用此伪指令之前指定。否则,默认值ServerRoot 将会用于设置基本目录。

也可以看看

最佳

DefaultType 指令

描述:如果该值不是,则此指令除了发出警告外没有其他作用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 的步骤是:

在应用了所有正常节之后,才考虑使用正则表达式。然后,按照它们在配置文件中出现的顺序测试所有正则表达式。例如,

<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> 指令

描述:包含适用于与正则表达式匹配的文件系统目录的内容的指令。
句法:<DirectoryMatch regex> ... </DirectoryMatch>
内容:服务器配置,虚拟主机
状态:核心
模块:核心

<DirectoryMatch>并且 </DirectoryMatch>用于封装一组指令,这些指令仅适用于命名目录(及其中的文件),与相同<Directory>。但是,它以正则表达式作为参数 。例如:

<DirectoryMatch "^/www/(.+/)?[0-9]{3}/">
    # ...
</DirectoryMatch>

匹配/www/包含三个数字的目录(或其任何子目录)。

兼容性

在2.3.9之前的版本中,此伪指令隐式应用于子目录(如<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>

也可以看看

最佳

DocumentRoot 指令

描述:构成从网络可见的主文档树的目录
句法: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>将匹配请求与主机:报头。

也可以看看

最佳

<ElseIf> 指令

描述:包含仅在运行时请求满足条件而前一个<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 ,则将匹配。

也可以看看

最佳

EnableMMAP 指令

描述:在传送过程中使用内存映射读取文件
句法:EnableMMAP On|Off
默认:EnableMMAP On
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心

该指令控制httpd如果在传递过程中需要读取文件的内容,则是否可以使用内存映射。默认情况下,当请求的处理需要访问文件中的数据时(例如,使用传递服务器解析mod_include的文件时),如果操作系统支持,Apache httpd内存将映射该文件。

这种内存映射有时会提高性能。但是在某些环境中,最好禁用内存映射以防止操作问题:

对于易受这些问题影响的服务器配置,应通过指定以下内容来禁用已传递文件的内存映射:

EnableMMAP Off

对于NFS挂载的文件,可以通过指定以下内容来明确禁用有问题的文件的此功能:

<目录“ / nfs文件路径”>
  EnableMMAP Off
</目录>
最佳

EnableSendfile 指令

描述:使用内核sendfile支持将文件传送到客户端
句法:EnableSendfile On|Off
默认:EnableSendfile Off
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心
兼容性:在版本2.3.9中默认更改为“关闭”。

该指令控制是否httpd可以使用内核的sendfile支持将文件内容传输到客户端。默认情况下,当请求的处理不需要访问文件中的数据时(例如,传递静态文件时),如果操作系统支持,则Apache httpd使用sendfile传递文件内容而无需读取文件。

这种sendfile机制避免了单独的读取和发送操作以及缓冲区分配。但是在某些平台或某些文件系统内,最好禁用此功能以避免操作问题:

对于不易受这些问题影响的服务器配置,可以通过指定以下内容来启用此功能:

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 指令

描述:发生错误时服务器将返回给客户端的内容
句法:ErrorDocument error-code document
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心

如果出现问题或错误,则可以将Apache httpd配置为执行以下四种操作之一,

  1. 输出简单的硬编码错误消息
  2. 输出定制的消息
  3. 内部重定向到本地URL路径以处理问题/错误
  4. 重定向到外部URL以处理问题/错误

第一个选项是默认选项,而选项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 指令

描述:服务器将记录错误的位置
句法: 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:facilityhttpdsyslog::tag

ErrorLog syslog:user
ErrorLog syslog:user:httpd.srv1
ErrorLog syslog::httpd.srv2

其他模块可以提供自己的ErrorLog提供程序。语法类似于syslog上面的示例。

安全性:有关启动 日志的用户以外的任何人都可写存储日志文件的目录的原因,为什么会破坏安全性的详细信息,请参阅安全性提示文档。

注意

在非Unix平台上输入文件路径时,即使平台可能允许使用反斜杠,也应确保仅使用正斜杠。通常,在整个配置文件中始终使用正斜杠是一个好主意。

也可以看看

最佳

ErrorLogFormat 指令

描述:错误日志条目的格式规范
句法: ErrorLogFormat [connection|request] format
内容:服务器配置,虚拟主机
状态:核心
模块:核心

ErrorLogFormat 允许指定除实际日志消息外,错误日志中还记录了哪些补充信息。

#Simple example
ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"

指定connectionrequest作为第一个参数允许指定其他格式,从而在分别记录特定连接或请求的第一条消息时记录其他信息。每个连接/请求仅记录一次此附加信息。如果在处理连接或请求时未引起任何日志消息,则也不会记录其他信息。

某些格式字符串项可能不会产生输出,这可能会发生。例如,仅当日志消息与请求关联并且日志消息发生在已经从客户端读取了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 指令

描述:跟踪每个请求的扩展状态信息
句法:ExtendedStatus On|Off
默认:ExtendedStatus Off[*]
内容:服务器配置
状态:核心
模块:核心

此选项跟踪每个工作人员有关当前正在执行的请求的其他数据,并创建利用率摘要。您可以通过配置在运行时查看这些变量 mod_status。请注意,其他模块可能依赖于此计分板。

此设置适用于整个服务器,并且不能在逐个虚拟主机的基础上启用或禁用。扩展状态信息的收集会降低服务器的速度。另请注意,在正常重启期间无法更改此设置。

请注意,加载mod_status会将默认行为更改为ExtendedStatus On,而其他第三方模块可能会执行相同的操作。这样的模块依赖于收集有关所有工人状态的详细信息。mod_status从版本2.3.6开始更改默认值。以前的默认值始终为“关”。

最佳

FileETag 指令

描述:用于为静态文件创建ETag HTTP响应标头的文件属性
句法:FileETag component ...
默认:FileETag MTime Size
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心
兼容性:在2.3.14及更早版本中,默认值是“ INode MTime Size”。

所述FileETag指令配置了用于创建文件属性ETag当文档是基于静态文件(实体标签)响应报头字段。(该ETag值在高速缓存管理中用于节省网络带宽。)该 FileETag指令允许您选择应使用其中的哪一个(如果有)。公认的关键字是:

节点
文件的索引节点编号将包含在计算中
时间
上次修改文件的日期和时间将包括在内
尺寸
文件中的字节数将被包括在内
所有
将使用所有可用字段。这等效于:
FileETag INode MTime Size
没有
如果文档是基于文件的,ETag则响应中将不包含任何字段

INodeMTimeSize 关键字可与任一前缀+-,这允许改变从更广的范围所继承的默认设置进行。任何不带此类前缀的关键字立即出现并完全取消继承的设置。

如果目录的配置包括 FileETag INode MTime Size,子目录的包括FileETag -INode,则该子目录的设置(将由不覆盖该子目录的任何子子目录继承)等效于 FileETag MTime Size

警告

不要更改已启用WebDAV并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> 指令

描述:包含适用于正则表达式匹配文件名的指令
句法:<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>

也可以看看

最佳

ForceType 指令

描述:强制所有匹配的文件以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),该指令无效。

注意

当显式指令(例如 SetHandlerAddHandler不适用于当前请求)时,通常由这些指令设置的内部处理程序名称将设置为与该指令指定的内容类型匹配。这是一种历史行为,某些第三方模块(例如mod_php)可能使用“魔术”内容类型,这些内容类型仅用于指示该模块对匹配请求负责。应该通过使用SetHandler或 来避免依赖于此类“魔术”类型的配置 AddHandler

最佳

GprofDir 指令

描述:要写入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

最佳

HttpProtocolOptions 指令

描述:修改对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上运行的其他自定义服务使用者,则用户应仅在配置为为其内部专用网络提供服务的特定虚拟主机上切换“不安全”选项。

导致使用严格模式的HTTP 400的请求示例

# Missing CRLF
GET / HTTP/1.0\n\n

命令行工具和CRLF

需要强制某些工具使用CRLF,否则httpd将返回HTTP 400响应,如上述用例中所述。例如,OpenSSL s_client需要-crlf参数才能正常工作

DumpIOInput指令可以在查看HTTP请求以识别诸如CRLF缺失之类的问题时提供帮助。

RegisteredMethods | LenientMethods

RFC 7231?4.1 “请求方法”“概述”要求当请求行中遇到不支持的方法时,原始服务器应使用HTTP 501状态码进行响应。LenientMethods使用该选项时已经发生了这种情况,但是管理员可能希望RegisteredMethods 使用该RegisterHttpMethod 指令切换选项并注册任何非标准方法 ,尤其是Unsafe 在切换选项的情况下。

转发代理兼容性

RegisteredMethods选项应该 被切换为转发代理主机,由原始服务器所支持的方法是未知的代理服务器。

使用LenientMethods模式导致HTTP 501的请求示例

# Unknown HTTP method
WOW / HTTP/1.0\r\n\r\n

# Lowercase HTTP method
get / HTTP/1.0\r\n\r\n

允许0.9 |需要1.0

RFC 2616 19.6 “与先前版本的兼容性”鼓励HTTP服务器支持旧版HTTP / 0.9请求。RFC 7230以“已删除了对支持HTTP / 0.9请求的期望”取代了这一点,并在RFC 7230附录A中提供了其他注释 。该Require1.0选项允许用户删除对默认Allow0.9选项行为的支持。

导致使用Require1.0模式的HTTP 400的请求示例

# Unsupported HTTP version
GET /\r\n\r\n

查看ErrorLog配置为 LogLevel debug级别的登录到的消息 可以帮助识别此类错误请求及其来源。用户应特别注意访问日志中的400个响应,以应对被意外拒绝的无效请求。

最佳

<If> 指令

描述:包含仅在运行时请求满足条件时才适用的指令
句法:<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>条件已经被求值之后设置,因此将无法在此伪指令中使用。

也可以看看

最佳

<IfDefine> 指令

描述:包含仅在启动时为真的情况下才会处理的指令
句法:<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> 指令

描述:包含根据是否存在特定指令而处理的指令
句法:<IfDirective [!]directive-name> ... </IfDirective>
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:所有
状态:核心
模块:核心
兼容性:在2.4.34及更高版本中可用。

本 节用于标记以存在特定指令为条件的指令。仅当测试 为true时,才处理节中的指令。如果test为假,则忽略开始标记和结束标记之间的所有内容。<IfDirective test>...</IfDirective><IfDirective>

测试<IfDirective>截面可以是两种形式之一:

在前一种情况下,只有在处理时可以使用给定名称的指令时,才处理开始标记和结束标记之间的指令。第二个格式反转的考验,如果只进行指令的处理指令名没有用。

仅当您需要一个可跨多个版本使用的配置文件时,才使用此部分 httpd,而不管是否有特定的指令可用。在正常操作中,无需将指令放在<IfDirective> 各节中。

也可以看看

最佳

<IfFile> 指令

描述:包含仅在文件启动时才会处理的指令
句法:<IfFile [!]filename> ... </IfFile>
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:所有
状态:核心
模块:核心
兼容性:在2.4.34及更高版本中可用。

本节用于标记以磁盘上文件是否存在为条件的指令。如果存在文件名,则仅处理节中的指令 。如果文件名 不存在,则开始标记和结束标记之间的所有内容都将被忽略。filename可以是绝对路径,也可以是相对于服务器根目录的路径。<IfFile filename>...</IfFile> <IfFile>

section指令中的filename<IfFile>可以采用与section中的测试变量相同的形式 <IfDefine>,即,如果 !字符直接放在filename之前,则可以否定测试。

如果提供了相对文件名,则检查是 ServerRoot相对的。如果此指令出现在之前ServerRoot,则将相对于已编译的服务器根目录或通过-d 参数传入命令行的服务器根目录检查路径。

最佳

<IfModule> 指令

描述:包含根据特定模块是否存在而进行处理的指令
句法:<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> 指令

描述:包含根据是否存在特定节指令而进行处理的指令
句法:<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指令相同 ,但是如果使用通配符且它们与任何文件或目录都不匹配,或者文件系统上不存在文件路径,它将被静默忽略(而不是导致错误)。

也可以看看

最佳

KeepAlive 指令

描述:启用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 指令

描述:服务器将在持久连接上等待后续请求的时间
句法:KeepAliveTimeout num[ms]
默认:KeepAliveTimeout 5
内容:服务器配置,虚拟主机
状态:核心
模块:核心

Apache httpd在关闭连接之前将等待后续请求的秒数。通过添加ms的后缀,还可以以毫秒为单位设置超时。收到请求后,该Timeout指令指定的超时值 适用。

设置KeepAliveTimeout为较高的值可能会导致服务器负载过重的性能问题。超时时间越高,等待与空闲客户端进行连接的服务器进程将被占用的时间越多。

如果KeepAliveTimeout没有 一个基于域名的虚拟主机设置,将使用最好的第一定义的虚拟主机匹配的本地IP和端口值。

最佳

<Limit> 指令

描述:将封闭的访问控制限制为仅某些HTTP方法
句法:<Limit method [method] ... > ... </Limit>
内容:目录.htaccess
覆写:AuthConfig,限制
状态:核心
模块:核心

访问控制通常对所有访问方法都有效 ,这是通常需要的行为。在一般情况下,访问控制指令不应放在 <Limit>节中。

<Limit> 指令的目的是将访问控制的影响限制为指定的HTTP方法。对于所有其他方法,<Limit>括号内的访问限制将无效。下面的例子中,访问控制只适用于方法POSTPUT以及 DELETE,让所有其他方法不受保护的:

<Limit POST PUT DELETE>
  Require valid-user
</Limit>

列出的方法名可以是一种或多种:GETPOSTPUTDELETECONNECTOPTIONSPATCHPROPFINDPROPPATCHMKCOLCOPYMOVELOCK,和UNLOCK方法名称区分大小写。如果GET使用,还将限制HEAD请求。该TRACE方法不能限制(见TraceEnable)。

<LimitExcept>节应该总是优先使用的<Limit> 限制访问时部分,由于<LimitExcept>部分提供了对任意方法保护。

<Limit><LimitExcept> 指令可以嵌套。在这种情况下,<Limit><LimitExcept>指令的每个连续级别 必须进一步限制访问控制所应用的方法集。

与指令一起使用 <Limit><LimitExcept>指令时Require,请注意Require ,无论是否存在其他Require指令,成功的第一个都会授权请求 。

例如,给定以下配置,将授权所有用户进行POST请求,并且Require group editors在所有情况下都将忽略该 伪指令:

<LimitExcept GET>
  Require valid-user
</LimitExcept>
<Limit POST>
  Require group editors
</Limit>
最佳

<LimitExcept> 指令

描述:将访问控制限制为除命名方法外的所有HTTP方法
句法:<LimitExcept method [method] ... > ... </LimitExcept>
内容:目录.htaccess
覆写:AuthConfig,限制
状态:核心
模块:核心

<LimitExcept></LimitExcept>用于封装一组访问控制指令,这些指令随后将应用于参数中列出的任何HTTP访问方法;即,它与<Limit>部分相反,可用于控制标准方法和非标准/无法识别的方法。有关<Limit>更多详细信息,请参见文档。

例如:

<LimitExcept POST GET>
  Require valid-user
</LimitExcept>
最佳

LimitInternalRecursion 指令

描述:确定内部重定向和嵌套子请求的最大数量
句法:LimitInternalRecursion number [number]
默认:LimitInternalRecursion 10
内容:服务器配置,虚拟主机
状态:核心
模块:核心

例如,使用Action伪指令时会发生内部重定向,该伪指令在内部将原始请求重定向到CGI脚本。子请求是Apache httpd的机制,用于发现某些URI(如果被请求)将会发生什么。例如,mod_dir使用子请求查找DirectoryIndex 指令中列出的文件。

LimitInternalRecursion防止在进入内部重定向或子请求的无限循环时服务器崩溃。这样的循环通常是由错误配置引起的。

该指令存储两个不同的限制,这些限制将根据每个请求进行评估。第一个数字是可能互相跟随的最大内部重定向数。第二个数字 确定子请求的嵌套深度。如果仅指定一个 数字,则将其分配给两个限制。

LimitInternalRecursion 5
最佳

LimitRequestBody 指令

描述:限制从客户端发送的HTTP请求正文的总大小
句法:LimitRequestBody bytes
默认:LimitRequestBody 0
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:所有
状态:核心
模块:核心

此伪指令指定请求正文中允许的字节数,范围从0(无限制)到2147483647(2GB)。有关代理请求的有限适用性,请参见下面的注释。

LimitRequestBody指令允许用户设置一个极限上的HTTP请求消息的主体,其中该指令被给予的范围内所允许的大小(服务器,每个目录,每个文件或每个位置)。如果客户端请求超出该限制,则服务器将返回错误响应,而不是服务请求。正常请求消息正文的大小将根据资源的性质以及该资源允许的方法而有很大的不同。CGI脚本通常使用消息正文来检索表单信息。该PUT方法的实现将需要一个至少与服务器希望对该资源接受的表示形式一样大的值。

该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。

例如,如果您允许文件上传到特定位置,并希望将上传文件的大小限制为100K,则可以使用以下指令:

LimitRequestBody 102400

有关代理请求如何解释此伪指令的完整说明,请参见mod_proxy文档。

最佳

LimitRequestFields 指令

描述:限制将从客户端接受的HTTP请求标头字段的数量
句法:LimitRequestFields number
默认:LimitRequestFields 100
内容:服务器配置,虚拟主机
状态:核心
模块:核心

Number是一个从0(表示无限制)到32767的整数。默认值由编译时常数DEFAULT_LIMIT_REQUEST_FIELDS(分布时为100)定义。

LimitRequestFields指令允许服务器管理员修改HTTP请求中允许的请求标头字段数的限制。服务器需要此值大于普通客户端请求可能包含的字段数。客户端使用的请求标头字段的数量很少超过20,但这在不同的客户端实现中可能会有所不同,这通常取决于用户将其浏览器配置为支持详细内容协商的程度。可选的HTTP扩展通常使用请求标头字段表示。

该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。如果普通客户端看到来自服务器的错误响应(指示请求中发送了太多字段),则应增加该值。

例如:

LimitRequestFields 50

警告

使用基于名称的虚拟主机时,该指令的值取自本地IP和端口组合的默认(第一列出)虚拟主机。

最佳

LimitRequestFieldSize 指令

描述:限制客户端允许的HTTP请求标头的大小
句法:LimitRequestFieldSize bytes
默认:LimitRequestFieldSize 8190
内容:服务器配置,虚拟主机
状态:核心
模块:核心

该伪指令指定 HTTP请求标头中允许的字节数。

LimitRequestFieldSize指令允许服务器管理员为HTTP请求标头字段的允许大小设置限制。服务器需要此值足够大以容纳正常客户端请求中的任何一个标头字段。在不同的客户端实现中,正常请求标头字段的大小将有很大不同,这通常取决于用户将其浏览器配置为支持详细内容协商的程度。SPNEGO身份验证标头最多可以为12392个字节。

该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。

例如:

LimitRequestFieldSize 4094
在正常情况下,该值不应更改为默认值。

警告

当使用基于名称的虚拟主机时,此指令的值取自与当前IP地址和端口组合最匹配的默认(优先列出)虚拟主机。

最佳

LimitRequestLine 指令

描述:限制将从客户端接受的HTTP请求行的大小
句法:LimitRequestLine bytes
默认:LimitRequestLine 8190
内容:服务器配置,虚拟主机
状态:核心
模块:核心

此伪指令设置HTTP请求行上允许的字节数。

LimitRequestLine指令允许服务器管理员为客户端的HTTP请求行设置允许的大小限制。由于请求行由HTTP方法,URI和协议版本组成,因此该 LimitRequestLine指令对服务器上允许请求的请求URI的长度进行了限制。服务器需要此值足够大以容纳其任何资源名称,包括可能在GET请求的查询部分传递的任何信息。

该指令使服务器管理员可以更好地控制异常的客户端请求行为,这对于避免某种形式的拒绝服务攻击可能很有用。

例如:

LimitRequestLine 4094
在正常情况下,该值不应更改为默认值。

警告

当使用基于名称的虚拟主机时,此指令的值取自与当前IP地址和端口组合最匹配的默认(优先列出)虚拟主机。

最佳

LimitXMLRequestBody 指令

描述:限制基于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则它将匹配。

也可以看看

最佳

LogLevel 指令

描述:控制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 指令

描述:持久连接上允许的请求数
句法:MaxKeepAliveRequests number
默认:MaxKeepAliveRequests 100
内容:服务器配置,虚拟主机
状态:核心
模块:核心

MaxKeepAliveRequests指令限制打开时每个连接允许的请求数 KeepAlive。如果将其设置为0,将允许无限制的请求。我们建议将此设置保持较高的值,以实现最佳服务器性能。

例如:

MaxKeepAliveRequests 500
最佳

MaxRangeOverlaps 指令

描述:100-200,150-300返回完整资源之前允许的重叠范围数(例如:)
句法:MaxRangeOverlaps default | unlimited | none | number-of-ranges
默认:MaxRangeOverlaps 20
内容:服务器配置,虚拟主机,目录
状态:核心
模块:核心
兼容性:在Apache HTTP Server 2.3.15和更高版本中可用

MaxRangeOverlaps指令限制服务器愿意返回给客户端的重叠HTTP范围的数量。如果请求的重叠范围超出允许范围,则返回完整资源。

默认
将重叠范围的数量限制为编译时默认值20。
没有
不允许重叠的Range标头。
无限
服务器不限制其愿意满足的重叠范围的数量。
范围数
一个正数,表示服务器愿意满足的最大重叠范围数。
最佳

MaxRangeReversals 指令

描述:100-200,50-70返回完整资源之前允许的范围反转次数(例如:)
句法:MaxRangeReversals default | unlimited | none | number-of-ranges
默认:MaxRangeReversals 20
内容:服务器配置,虚拟主机,目录
状态:核心
模块:核心
兼容性:在Apache HTTP Server 2.3.15和更高版本中可用

MaxRangeReversals指令限制服务器愿意返回给客户端的HTTP范围反转的次数。如果请求的范围反转超出允许范围,则返回完整资源。

默认
将范围反转的次数限制为编译时默认值20。
没有
不允许范围反转标头。
无限
服务器不限制其希望满足的范围反转次数。
范围数
一个正数,表示服务器愿意满足的最大范围反转数。
最佳

MaxRanges 指令

描述:返回完整资源之前允许的范围数
句法:MaxRanges default | unlimited | none | number-of-ranges
默认:MaxRanges 200
内容:服务器配置,虚拟主机,目录
状态:核心
模块:核心
兼容性:在Apache HTTP Server 2.3.15和更高版本中可用

MaxRanges指令限制服务器愿意返回给客户端的HTTP范围的数量。如果请求的范围超出允许范围,则返回完整资源。

默认
将范围数限制为编译时默认值200。
没有
范围标头将被忽略。
无限
服务器不限制其愿意满足的范围数。
范围数
一个正数,表示服务器愿意满足的最大范围数。
最佳

MergeSlashes 指令

描述:控制服务器是否合并URL中的连续斜杠。
句法:MergeSlashes ON|OFF
默认:MergeSlashes ON
内容:服务器配置,虚拟主机
状态:核心
模块:核心
兼容性:在2.4.39中添加

默认情况下,服务器在请求URL的路径部分中合并(或折叠)多个连续的斜杠('/')字符。

将URL映射到文件系统时,这些多个斜杠并不重要。但是,URL的其他处理方式(例如CGI或代理)可能更喜欢保留多个连续斜杠的含义。在这些情况下,MergeSlashes可以将其设置为 OFF以保留多个连续的斜杠。在这些配置中,URL的路径组件相匹配的配置文件中使用正则表达式(LocationMatchRewriteRule,...),需要考虑多个连续的斜杠。

最佳

MergeTrailers 指令

描述:确定预告片是否合并到标题中
句法: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 指令,但第三方模块可能不支持。请查阅第三方模块的文档,该文档必须指出如果支持此伪指令可以配置的互斥量名称。

可以使用以下互斥机制

大多数机制仅在基础平台和APR支持的选定平台上可用。并非在所有平台上都可用的机制是posixsemsysvsemsempthreadfcntlflockfile

使用基于文件的机制fcntlflock,该路径(如果提供)是将在其中创建锁定文件的目录。默认目录是httpd相对于的运行时文件目录 ServerRoot。始终将本地磁盘文件系统用于/path/to/mutexNFS文件系统或AFS文件系统上的目录,而永远不要使用该目录。文件的基本名称将是互斥体类型,模块提供的可选实例字符串,并且除非OmitPID指定了关键字,否则 将附加httpd父进程的进程ID以使文件名唯一,从而避免在多个httpd时发生冲突。实例共享一个锁文件目录。例如,如果互斥名称为mpm-accept且锁定文件目录为/var/httpd/locks,父进程ID为12345的httpd实例的锁定文件名将为 /var/httpd/locks/mpm-accept.12345

安全

最好避免将互斥文件放在世界可写的目录中,例如,/var/tmp因为有人可能会创建拒绝服务攻击,并通过创建与服务器尝试创建的文件具有相同名称的锁文件来阻止服务器启动。

下表记录了httpd和捆绑的模块使用的互斥锁的名称。

互斥体名称 模组 受保护的资源
mpm-accept preforkworkerMPM 传入的连接,以避免打雷的牧群问题;有关更多信息,请参考 性能调整 文档。
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
最佳

NameVirtualHost 指令

描述:弃用:指定用于名称虚拟主机的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>节匹配的路径名。

FollowSymLinksSymLinksIfOwnerMatch Options只在工作<Directory>段或 .htaccess文件。

忽略此选项不应被视为安全限制,因为符号链接测试会受到使其无法回避的竞争条件的影响。

Includes
mod_include 允许 提供的服务器端包含。
IncludesNOEXEC
服务器端包含被允许,但#exec cmd#exec cgi被禁用。仍然可以#include virtualScriptAliased目录使用CGI脚本 。
Indexes
如果请求映射到目录的URL并没有DirectoryIndexindex.html)在该目录中,然后 mod_autoindex将返回目录的格式化上市。
MultiViews
允许使用协商的内容 “ MultiViews” mod_negotiation

注意

如果将设置<Directory>为以外的其他位置,则会忽略此选项,因为mod_negotiation 需要实际资源进行比较和评估。

SymLinksIfOwnerMatch
服务器将仅遵循符号链接,这些符号链接的目标文件或目录由与该链接相同的用户标识拥有。

注意

FollowSymLinksSymLinksIfOwnerMatch 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连接, h2https连接和h2chttp连接。模块可以启用更多协议。

指定不可用/禁用的协议是安全的。这样的协议名称将被忽略。

仅当虚拟主机没有自己的Protocols指令时,才会为虚拟主机继承基本服务器中指定的协议。或者,反过来,虚拟主机中的Protocols指令将替换基本服务器中的任何此类指令。

也可以看看

最佳

协议 荣誉订单指令

描述:确定协议的顺序是否确定协商期间的优先级
句法:ProtocolsHonorOrder On|Off
默认:ProtocolsHonorOrder On
内容:服务器配置,虚拟主机
状态:核心
模块:核心
兼容性:仅在Apache 2.4.17及更高版本中可用。

该指令指定服务器是否应遵循Protocols指令列出协议的顺序。

如果配置为“关”,则客户端提供的协议列表顺序优先于服务器配置中的顺序。

随着ProtocolsHonorOrder设置为on (默认值),客户端排序并不重要,只是排序在服务器设置影响的协议协商的结果。

也可以看看

最佳

QualifyRedirectURL 指令

描述:控制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 指令

描述:允许为正则表达式配置全局/默认选项
句法:RegexDefaultOptions [none] [+|-]option [[+|-]option] ...
默认:RegexDefaultOptions DOTALL DOLLAR_ENDONLY
内容:服务器配置
状态:核心
模块:核心
兼容性:仅在Apache 2.4.30及更高版本中可用。

该指令将某些默认行为添加到以后使用的ANY正则表达式中。

任何以“ +”开头的选项都将添加到已设置的选项中。
任何以“-”开头的选项将从已设置的选项中删除。
将设置任何没有'+'或'-'的选项,并删除任何其他已设置的选项。
none关键字复位任何已经设置的选项。

选项可以是:

ICASE
使用不区分大小写的匹配。
EXTENDED
Perl的/ x标志,忽略(未转义的)空格和模式中的注释。
DOTALL
Perl的/ s标志“。” 匹配换行符。
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
...
最佳

RegisterHttpMethod 指令

描述:注册非标准的HTTP方法
句法:RegisterHttpMethod method [method [...]]
内容:服务器配置
状态:核心
模块:核心
兼容性:在Apache HTTP Server 2.4.24和更高版本中可用

此伪指令可用于注册其他HTTP方法。如果非标准方法需要与接受方法名称作为参数的指令一起使用,或者在服务器已配置为仅将识别的方法传递给模块时允许通过代理或CGI脚本使用特定的非标准方法,则这是必需的。

也可以看看

最佳

RLimitCPU 指令

描述:限制由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资源限制以每个进程的秒数表示。

也可以看看

最佳

RLimitMEM 指令

描述:限制由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父节点派生的任何进程,例如管道日志。

内存资源限制以每个进程的字节数表示。

也可以看看

最佳

RLimitNPROC 指令

描述:限制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

也可以看看

最佳

ScriptInterpreterSource 指令

描述:为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 RegistryScriptAliased目录一起使用时要小心,因为Apache httpd会尝试执行该目录中的每个文件。该Registry设置可能导致对通常不执行的文件进行不希望的程序调用。例如,.htm大多数Windows系统上文件的默认打开命令将执行Microsoft Internet Explorer,因此.htm,对脚本目录中现有文件的任何HTTP请求都将在服务器后台启动浏览器。这是在一分钟左右的时间内使系统崩溃的好方法。

该选项的Registry-Strict 作用与Registry仅使用子项相同Shell\ExecCGI\CommandExecCGI钥匙不是普通的 钥匙。必须在Windows注册表中手动配置它,因此可以防止在系统上意外调用程序。

最佳

SeeRequestTail 指令

描述:假设请求本身大于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.1mod_status,则显示如下:

关(默认) GET / disk1 / storage / apache / htdocs / images / imagestore1 / food / apples
orage / apache / htdocs / images / imagestore1 / food / apples.jpg HTTP / 1.1
最佳

ServerAdmin 指令

描述:服务器在发送给客户端的错误消息中包含的电子邮件地址
句法:ServerAdmin email-address|URL
内容:服务器配置,虚拟主机
状态:核心
模块:核心

ServerAdmin设置的联系人地址,所述服务器在它返回到客户端的任何错误消息包括。如果httpd不能将提供的参数识别为URL,则假定它是一个电子邮件地址,并 mailto:在超链接目标中添加它。但是,建议使用实际的电子邮件地址,因为有许多CGI脚本可以进行此假设。如果要使用URL,它应指向您控制下的另一台服务器。否则,如果出现错误,用户可能无法与您联系。

为此,可能需要设置一个专用地址,例如

ServerAdmin www-admin@foo.example.com

因为用户并不总是提到他们在谈论服务器!

最佳

ServerAlias 指令

描述:将请求与名称虚拟主机匹配时使用的主机的备用名称
句法:ServerAlias hostname [hostname] ...
内容:虚拟主机
状态:核心
模块:核心

ServerAlias指令设置主机的备用名称,以与基于名称的虚拟主机一起使用。该 ServerAlias可包含通配符,如果合适的话。

<VirtualHost *:80>
  ServerName server.example.com
  ServerAlias server server2.example.com server2
  ServerAlias *.example.com
  UseCanonicalName Off
  # ...
</VirtualHost>

一组最匹配的基于名称的虚拟主机 <virtualhost>将按照它们在配置中出现的顺序进行处理。使用第一个匹配ServerNameServerAlias,通配符的优先级没有不同(服务器名和ServerAlias也不相同)。

<VirtualHost> 伪指令中名称的完整列表被视为(非通配符) ServerAlias

也可以看看

最佳

ServerName 指令

描述:服务器用来标识自己的主机名和端口
句法: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。

看到的说明 UseCanonicalNameUseCanonicalPhysicalPort指令,其用于确定自引用的URL(例如,通过是否设置 mod_dir模块)将是指指定的端口,或在客户端的请求给定的端口号。

如果未设置ServerName服务器可以解析为IP地址的名称,则会导致启动警告。httpd然后,将使用系统hostname命令使用它可以确定的任何主机名。这几乎永远不会是您真正想要的主机名。

httpd: Could not reliably determine the server's fully qualified domain name, using rocinante.local for ServerName

也可以看看

最佳

ServerPath 指令

描述:不兼容的浏览器访问的基于名称的虚拟主机的旧版URL路径名
句法:ServerPath URL-path
内容:虚拟主机
状态:核心
模块:核心

ServerPath指令设置主机的旧版URL路径名,以与基于名称的虚拟主机一起使用

也可以看看

最佳

ServerRoot 指令

描述:服务器安装的基本目录
句法:ServerRoot directory-path
默认:ServerRoot /usr/local/apache
内容:服务器配置
状态:核心
模块:核心

ServerRoot伪指令设置服务器所在的目录。通常,它将包含子目录conf/logs/。其他配置指令(例如IncludeLoadModule)中的相对路径被视为相对于该目录。

ServerRoot "/home/httpd"

ServerRoot可以使用的--prefix参数来 修改的默认位置configure,并且服务器的大多数第三方发行版的默认位置都不同于上面列出的默认位置。

也可以看看

最佳

ServerSignature 指令

描述:在服务器生成的文档上配置页脚
句法:ServerSignature On|Off|EMail
默认:ServerSignature Off
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:所有
状态:核心
模块:核心

ServerSignature指令允许在服务器生成的文档(错误消息,mod_proxyftp目录列表,mod_info输出等)下配置尾随行。之所以要启用此页脚行,是因为在代理服务器链中,用户通常无法分辨出哪个链接服务器实际上产生了返回的错误消息。

Off 设置是默认设置,它禁止显示页脚行。该On设置仅在服务器版本号和ServerName所服务虚拟主机的行之间添加一行,并且该EMail设置还额外创建了ServerAdmin对所引用文档的“ mailto:”引用。

所显示的服务器版本号的详细信息由ServerTokens指令控制。

也可以看看

最佳

ServerTokens 指令

描述:配置ServerHTTP响应头
句法: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 指令

描述:强制所有匹配文件由处理程序处理
句法: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作为目录或索引文件进行处理的正常行为。

也可以看看

最佳

SetInputFilter 指令

描述:设置将处理客户端请求和POST输入的过滤器
句法:SetInputFilter filter[;filter...]
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心

SetInputFilter指令设置一个或多个过滤器,当服务器接收到客户机请求和POST输入时,将处理这些请求。这是在其他地方定义的任何过滤器的补充,包括 AddInputFilter 指令。

如果指定了多个过滤器,则必须按分号将它们按处理内容的顺序分隔。

也可以看看

最佳

SetOutputFilter 指令

描述:设置将处理服务器响应的过滤器
句法:SetOutputFilter filter[;filter...]
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:核心
模块:核心

SetOutputFilter指令将被发送到客户端之前,将处理来自服务器的响应的过滤器。这是在其他地方定义的任何过滤器的补充,包括 AddOutputFilter 指令。

例如,以下配置将处理/www/data/服务器端包含目录中的所有文件。

<Directory "/www/data/">
  SetOutputFilter INCLUDES
</Directory>

如果指定了多个过滤器,则必须按分号将它们按处理内容的顺序分隔。

也可以看看

最佳

超时 指令

描述:服务器在失败请求之前等待某些事件的时间
句法:TimeOut seconds
默认:TimeOut 60
内容:服务器配置,虚拟主机
状态:核心
模块:核心

TimeOut指令定义了Apache httpd在各种情况下等待I / O的时间:

最佳

TraceEnable 指令

描述:确定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
内容:服务器配置
状态:核心
模块:核心

取消Define或将-D参数传递给的效果httpd

此伪指令可用于切换节的使用,<IfDefine>而无需更改 -D任何启动脚本中的参数。

尽管在虚拟主机上下文中支持此指令,但对其进行的更改对于任何后续的配置指令(包括任何封闭的虚拟主机)都是可见的。

也可以看看

最佳

UseCanonicalName 指令

描述:配置服务器如何确定自己的名称和端口
句法:UseCanonicalName On|Off|DNS
默认:UseCanonicalName Off
内容:服务器配置,虚拟主机,目录
状态:核心
模块:核心

在许多情况下,Apache httpd必须构造一个自我引用的 URL,即,引用回同一服务器的URL。对于 UseCanonicalName OnApache,httpd将使用ServerName 指令中指定的主机名和端口来构造服务器的规范名称。此名称在所有自引用URL中SERVER_NAME以及SERVER_PORTCGI 和中的值中使用 。

使用UseCanonicalName OffApache httpd时,将使用客户机提供的主机名和端口(如果提供了主机名和端口)来形成自我引用的URL(否则,它将使用规范名称,如上定义)。这些值与用于实现基于名称的虚拟主机的值相同,并且可用于 相同的客户端。CGI变量 SERVER_NAMESERVER_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
  1. 提供的端口 Servername
  2. 物理端口
  3. 默认端口
UseCanonicalName Off | DNS
  1. Host:标头解析端口
  2. 物理端口
  3. 提供的端口 Servername
  4. 默认端口

使用UseCanonicalPhysicalPort Off,从订购中删除物理端口。

也可以看看

最佳

<VirtualHost> 指令

描述:包含仅适用于特定主机名或IP地址的指令
句法:<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
内容:服务器配置
状态:核心
模块:核心

<VirtualHost>并且 </VirtualHost>用于封装一组仅适用于特定虚拟主机的指令。可以使用虚拟主机上下文中允许的任何指令。服务器在特定虚拟主机上收到对文档的请求时,将使用本<VirtualHost> 节中随附的配置指令。Addr可以是以下任意一种,可以选择后面跟一个冒号和一个端口号(或*):

<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和端口组合的默认虚拟主机。

安全

请参阅安全性提示 文档,以获取有关如果启动日志的用户以外的任何人都可写存储日志文件的目录的原因,为什么会损害安全性的详细信息。

也可以看看

可用语言: de  |  zh  |  es  |  fr  |  ja  |  TR 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。