• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Apache核心功能

    AcceptFilter 指令

    描述:配置协议的 Listener 套接字的优化
    句法:AcceptFilter protocol accept_filter
    Context:服务器配置
    状态:核心
    模块:核心

    该指令通过Protocol类型为 listen socket 启用特定于操作系统的优化。基本前提是内核在收到数据或缓冲整个 HTTP 请求之前不向服务器 process 发送 socket。目前仅支持FreeBSD 的 Accept Filters,Linux 更原始的TCP_DEFER_ACCEPT和 Windows 优化的 AcceptEx()。

    使用none作为参数将禁用该协议的任何接受过滤器。这对于需要服务器首先发送数据的协议很有用,例如ftp:nntp

    AcceptFilter nntp none
    

    对于 port 443,默认协议名称为https,对于所有其他端口,默认协议名称为http。要指定另一个协议与 listen port 一起使用,请将 protocol 参数添加到听指令。

    FreeBSD 的默认值是:

    AcceptFilter http httpready
    AcceptFilter https dataready
    

    httpready accept 过滤器在内核 level 上缓冲整个 HTTP 请求。收到整个请求后,内核会将其发送到服务器。有关更多详细信息,请参见accf_http(9)手册页。由于 HTTPS 请求是加密的,因此仅使用accf_data(9)过滤器。

    Linux 上的默认值是:

    AcceptFilter http data
    AcceptFilter https data
    

    Linux 的TCP_DEFER_ACCEPT不支持缓冲 http 请求。除none之外的任何 value 都将在 listener 上启用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 驱动程序)或垃圾邮件,病毒或间谍软件筛选器非常有用。

    数据 AcceptFilter(Windows)

    对于版本 2.4.23 和之前的版本,Windows data accept 过滤器一直等到数据已传输完毕,并且已从单个 AcceptEx()调用中检索到初始数据缓冲区和网络端点地址。此 implementation 受到拒绝服务攻击,并已被禁用。

    httpd 的当前版本默认为 Windows 上的connect过滤器,如果指定了data,则将回退到connect。鼓励先前版本的用户为其 AcceptFilter 添加connect的显式设置,如上所示。

    参见

    • 协议

    AcceptPathInfo 指令

    描述:资源接受尾随路径名信息
    句法:AcceptPathInfo On\|Off\|Default
    默认:AcceptPathInfo Default
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心

    此指令控制是否接受或拒绝包含跟随实际文件名(或现有目录中的 non-existent 文件)的尾随路径名信息的请求。尾部路径名信息可供PATH_INFO环境变量中的脚本使用。

    对于 example,假设位置/test/指向仅包含单个文件here.html的目录。然后对/test/here.html/more/test/nothere.html/more的请求都将/more收集为PATH_INFO

    AcceptPathInfo指令的三个可能的 arguments 是:

    • Off
      只有当 maps 到存在的文字路径时,才会接受请求。因此,在 true 文件名之后具有尾随路径名信息的请求(例如上述 example 中的/test/here.html/more)将_return 404 NOT FOUND 错误。
    • On
      如果前导路径 component maps 到存在的文件,则将接受请求。如果/test/here.html maps 到有效文件,则会接受上述 example /test/here.html/more。
    • Default
      具有尾随路径名信息的请求的处理由负责该请求的处理程序确定。普通 files 的核心处理程序默认拒绝 PATH_INFO 请求。提供脚本的处理程序(例如 cgi-script 和 isapi-handler)通常默认接受 PATH_INFO。

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

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

    AccessFileName 指令

    描述:分布式 configuration 文件的名称
    句法:AccessFileName filename[filename]...
    默认:AccessFileName .htaccess
    Context:server config,virtual host
    状态:核心
    模块:核心

    处理请求时,如果 distributed configuration files 为为该目录启用,则服务器会在文档路径的每个目录中的此名称列表中查找第一个现有的 configuration 文件。例如:

    AccessFileName .acl
    

    在返回文档/usr/local/web/index.html之前,服务器将读取指令的/.acl/usr/.acl/usr/local/.acl/usr/local/web/.acl,除非它们已被禁用:

    <Directory "/">
        AllowOverride None
    </Directory>
    

    参见

    • AllowOverride
    • Configuration Files
    • htaccess Files

    AddDefaultCharset 指令

    描述:响应 content-type 为text/plaintext/html时要添加的默认 charset 参数
    句法:AddDefaultCharset On\|Off\|charset
    默认:AddDefaultCharset Off
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心

    当且仅当响应的 content-type 是text/plaintext/html时,此指令指定要添加到响应的媒体类型 charset 参数(字符编码的 name)的默认 value。这应该通过META元素覆盖响应体中指定的任何字符集,尽管确切的行为通常取决于用户的 client configuration。设置AddDefaultCharset Off会禁用此功能。AddDefaultCharset On启用iso-8859-1的默认字符集。假定任何其他 value 是要使用的字符集,它应该是用于 Internet 媒体类型(MIME 类型)的IANA 注册了 charset 值之一。例如:

    AddDefaultCharset utf-8
    

    只有在知道它所适用的所有文本资源都采用该字符编码时才应使用AddDefaultCharset,并且单独标记其字符集太不方便了。其中一个例子是将 charset 参数添加到包含生成内容的资源,例如 legacy CGI 脚本,由于输出中包含 user-provided 数据,这些脚本可能容易受到 cross-site 脚本攻击。但请注意,更好的解决方案是修复(或删除)这些脚本,因为设置默认字符集不会保护已在其浏览器上启用“auto-detect 字符编码”feature 的用户。

    参见

    • AddCharset

    AllowEncodedSlashes 指令

    描述:确定是否允许传递 URL 中的编码路径分隔符
    句法:AllowEncodedSlashes On\|Off\|NoDecode
    默认:AllowEncodedSlashes Off
    Context:server config,virtual host
    状态:核心
    模块:核心
    兼容性:2.3.12 及更高版本中提供 NoDecode 选项。

    AllowEncodedSlashes指令允许在路径信息中使用包含编码路径分隔符的 URL(/用于/,另外%5C用于\用于一致系统)。

    使用默认的 value,Off,此类 URL 将被拒绝,并显示 404(未找到)错误。

    使用 value On,接受此类 URL,并像所有其他编码字符一样解码编码斜杠。

    使用 value NoDecode,可以接受此类 URL,但编码的斜杠不会被解码,而是保留在其编码的 state 中。

    当与PATH_INFO结合使用时,转动AllowEncodedSlashesOn非常有用。

    注意

    如果路径信息中需要编码斜杠,强烈建议使用NoDecode作为安全措施。允许对斜杠进行解码可能会允许不安全的_path。

    参见

    • 中的 AcceptPathInfo

    AllowOverride 指令

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

    当服务器找到.htaccess文件(由AccessFileName指定)时,它需要知道该文件中声明的哪些指令可以覆盖早期的 configuration 指令。

    仅适用于<Directory>部分

    AllowOverride仅在没有正则表达式的<Directory>节中有效,而不在<Location>,<DirectoryMatch>或<Files>节中有效。

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

    当该指令设置为All时,.htaccess files 中允许任何具有.htaccess Context的指令。

    directive-type 可以是以下指令分组之一。(请参阅覆盖 class 索引以获取每个 directive-type.)启用哪些指令的 up-to-date 列表

    • AuthConfig
      允许使用授权指令(AuthDBMGroupFile,AuthDBMUserFile,AuthGroupFile,AuthName,AuthType,AuthUserFile,Require,etc.)。
    • FileInfo
      允许使用控制文档类型的指令(ErrorDocument,ForceType,LanguagePriority,SetHandler,SetInputFilter,SetOutputFilter 和 mod_mime Add *和 Remove *指令),文档元数据(Header,RequestHeader,SetEnvIf,SetEnvIfNoCase,BrowserMatch,CookieExpires,CookieDomain,CookieStyle ,CookieTracking,CookieName),mod_rewrite 指令(RewriteEngine,RewriteOptions,RewriteBase,RewriteCond,RewriteRule),mod_alias 指令(Redirect,RedirectTemp,RedirectPermanent,RedirectMatch)和来自 mod_actions 的 Action。
    • 索引允许使用控制目录索引的指令(AddDescription,AddIcon,AddIconByEncoding,AddIconByType,DefaultIcon,DirectoryIndex,FancyIndexing,HeaderName,IndexIgnore,IndexOptions,ReadmeName,etc.)。
    • 限制
      允许使用控制 host 访问的指令(Allow,Deny 和 Order)。
    • 非致命=[235]
      允许使用 AllowOverride 选项将.htaccess 中的语法错误视为非致命错误。不会导致内部服务器错误,将忽略不允许或无法识别的指令并记录警告:Nonfatal=Override 将 AllowOverride 禁止的指令视为 nonfatal。 Nonfatal=Unknown 将未知指令视为非致命指令。这包括由不存在的模块实现的拼写错误和指令。 Nonfatal=All 将上述两种视为非致命性。请注意,有效指令中的语法错误仍会导致内部服务器错误。安全性非致命错误可能会对.htaccess 用户产生安全隐患。例如,如果 AllowOverride 禁止 AuthConfig,则将禁用用于限制对站点的访问的用户的 configuration。
    • 选项[238]
      允许使用控制特定目录 features(Options 和 XBitHack)的指令。可以给出等号,然后是 comma-separated 列表,没有空格,可以使用 Options 命令设置选项。隐式禁用选项即使可以使用此指令限制.htaccess files 中可能使用的选项列表,但是如同允许任何 Options 指令一样 long,可以使用 non-relative 语法禁用任何其他继承选项。换句话说,此机制不能强制保留特定选项,同时允许设置任何其他选项。 AllowOverride Options=Indexes,MultiViews

    例:

    AllowOverride AuthConfig Indexes
    

    在上面的 example 中,group AuthConfigIndexes中的所有指令都会导致内部服务器错误。

    出于安全性和性能原因,请勿在<Directory "/">块中将AllowOverride设置为None以外的任何内容。相反,找到(或创建)引用您实际计划放置.htaccess文件的目录的<Directory>块。

    参见

    • AccessFileName
    • AllowOverrideList
    • Configuration Files
    • htaccess Files
    • 覆盖.htaccess 的 Class 索引

    AllowOverrideList 指令

    描述:.htaccess files 中允许的单个指令
    句法:AllowOverrideList None\|directive[directive-type]...
    默认:AllowOverrideList None
    Context:目录
    状态:核心
    模块:核心

    当服务器找到.htaccess文件(由AccessFileName指定)时,它需要知道该文件中声明的哪些指令可以覆盖早期的 configuration 指令。

    仅适用于<Directory>部分

    AllowOverrideList仅在没有正则表达式的<Directory>节中有效,而不在<Location>,<DirectoryMatch>或<Files>节中有效。

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

    例:

    AllowOverride None
    AllowOverrideList Redirect RedirectMatch
    

    在上面的 example 中,只允许RedirectRedirectMatch指令。所有其他都将导致内部服务器错误。

    例:

    AllowOverride AuthConfig
    AllowOverrideList CookieTracking CookieName
    

    在上面的 example 中,AllowOverride授予AuthConfig指令分组的权限,AllowOverrideList仅授予来自FileInfo指令分组的两个指令的权限。所有其他都将导致内部服务器错误。

    参见

    • AccessFileName
    • AllowOverride
    • Configuration Files
    • htaccess Files

    CGIMapExtension 指令

    描述:用于查找 CGI 脚本的 interpreter 的技术
    句法:CGIMapExtension cgi-path .extension
    Context:目录,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:仅限 NetWare

    该指令用于控制 Apache httpd 如何找到用于 run CGI 脚本的 interpreter。对于 example,设置CGIMapExtension sys:\foo.nlm .foo将导致所有具有.foo扩展名的 CGI 脚本 files 传递给 FOO interpreter。

    CGIPassAuth 指令

    描述:允许将 HTTP 授权 headers 作为 CGI 变量传递给脚本
    句法:CGIPassAuth On\|Off
    默认:CGIPassAuth Off
    Context:目录,.htaccess
    覆盖:AuthConfig
    状态:核心
    模块:核心
    兼容性:可在 Apache HTTP Server 2.4.13 及更高版本中使用

    CGIPassAuth允许脚本访问 HTTP 授权_header,例如Authorization,这是实现 HTTP 基本身份验证的脚本所必需的。通常,这些 HTTP headers 在脚本中是隐藏的。这是为了禁止脚本在 web 服务器中启用 HTTP 基本身份验证时查看用于访问服务器的用户 ID 和密码。当允许脚本实现 HTTP 基本身份验证时,应使用此伪指令。

    可以使用此伪指令代替以前版本的 Apache HTTP Server 中提供的 compile-time 设置SECURITY_HOLE_PASS_AUTHORIZATION

    任何使用ap_add_common_vars()的模块都会遵守该设置,例如mod_cgi,mod_cgid,mod_proxy_fcgi,mod_proxy_scgi等。值得注意的是,它会影响通常意义上不处理请求但仍使用此 API 的模块;这方面的例子是mod_include和mod_ext_filter。 Third-party 不使用ap_add_common_vars()的模块也可以选择尊重该设置。

    CGIVar 指令

    描述:控制如何设置一些 CGI 变量
    句法:CGIVar variable rule
    Context:目录,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:可在 Apache HTTP Server 2.4.21 及更高版本中使用

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

    REQUEST_URI规则:

    • original-uri(默认)
      value 取自原始请求 line,不会反映更改请求资源的内部重定向或子请求。
    • current-urivalue 反映当前正在处理的资源,由于内部重定向或子请求,这可能与 client 的原始请求不同。

    ContentDigest 指令

    描述:允许生成Content-MD5 HTTP Response headers
    句法:ContentDigest On\|Off
    默认:ContentDigest Off
    Context:server config,virtual host,directory,.htaccess
    覆盖:选项
    状态:核心
    模块:核心

    该指令允许生成 RFC1864 和 RFC2616 中定义的Content-MD5 _ader。

    MD5 是用于计算 arbitrary-length 数据的“消息摘要”(有时称为“指纹”)的算法,具有高度置信度,即数据中的任何改变将反映在消息摘要中的改变中。

    Content-MD5标头提供 entity-body 的 end-to-end 消息完整性检查(MIC)。代理或 client 可以检查此标头以检测传输中 entity-body 的意外修改。 Example 标题:

    Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==

    请注意,这可能会导致服务器出现 performance 问题,因为每次请求都会计算消息摘要(值不会被缓存)。

    Content-MD5仅针对核心提供的文档发送,而不是由任何模块发送。例如,SSI 文档,CGI 脚本输出和字节范围响应没有此标头。

    DefaultRuntimeDir 指令

    描述:服务器 run-time files 的基本目录
    句法:DefaultRuntimeDir directory-path
    默认:DefaultRuntimeDir DEFAULT_REL_RUNTIMEDIR(logs/)
    Context:服务器配置
    状态:核心
    模块:核心
    兼容性:可在 Apache 2.4.2 及更高版本中使用

    DefaultRuntimeDir指令设置服务器将在其中创建各种 run-time files 的目录(共享 memory,locks,etc.)。如果设置为相对路径,则完整路径将相对于ServerRoot

    DefaultRuntimeDir scratch/
    

    可以通过更改 build time 中的DEFAULT_REL_RUNTIMEDIR#define 来修改DefaultRuntimeDir的默认位置。

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

    参见

    • 安全提示有关如何正确设置ServerRoot权限的信息

    DefaultType 指令

    描述:除非 value 不是none,否则此指令不会发出警告。在先前版本中,DefaultType 将指定要分配给响应内容的默认媒体类型,对于该响应内容,不能找到其他媒体类型 configuration。
    句法:DefaultType media-type\|none
    默认:DefaultType none
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:参数none在 Apache httpd 2.2.7 及更高版本中可用。 2.3.x 及更高版本的所有其他选项均为 DISABLED。

    该指令已被禁用。为了 configuration files 的向后兼容性,可以使用 value none指定它,这意味着没有默认的媒体类型。例如:

    DefaultType None
    

    DefaultType None仅在 httpd-2.2.7 及更高版本中可用。

    使用 mime.types configuration 文件和将 AddType通过文件 extensions 配置媒体类型分配,或使用ForceType 指令指令配置特定资源的媒体类型。否则,服务器将发送没有 Content-Type 标头字段的响应,并且收件人可能会尝试猜测媒体类型。

    定义指令

    描述:定义变量
    句法:Define parameter-name[parameter-value]
    Context:server config,virtual host,目录
    状态:核心
    模块:核心

    在其一个参数形式中,Define相当于将-D参数传递给httpd。它可用于切换<IfDefine>部分的使用,而无需在任何启动脚本中更改-D arguments。

    除此之外,如果给出第二个参数,则将配置变量设置为此 value。可以使用${VAR}语法在 configuration 中使用该变量。变量始终是全局定义的,不限于周围配置节的范围。

    <IfDefine TEST>
      Define servername test.example.com
    </IfDefine>
    <IfDefine !TEST>
      Define servername www.example.com
      Define SSL
    </IfDefine>
    
    DocumentRoot "/var/www/${servername}/htdocs"
    

    变量名可能不包含冒号“:”字符,以避免与RewriteMap 指令的语法冲突。

    虚拟主要范围和陷阱

    虽然虚拟 host context 支持此指令,但它所做的更改对任何后续的 configuration 指令都是可见的,超出任何封闭的虚拟 host。

    参见

    • UNDEFINE
    • IfDefine

    <Directory>指令

    描述:附上仅适用于指定的 file-system 目录,sub-directories 及其内容的 group 指令组。
    句法:<Directory directory-path>...</Directory>
    Context:server config,virtual host
    状态:核心
    模块:核心

    <Directory></Directory>用于包含一组指令,这些指令仅适用于指定目录,该目录的 sub-directories 以及相应目录中的 files。可以使用目录 context 中允许的任何指令。 Directory-path 是目录的完整路径,或使用 Unix shell-style 匹配的 wild-card string。在 wild-card string 中,?匹配任何单个字符,*匹配任何 sequences 字符。您也可以使用[]字符范围。 None of the wildcards match a /' character, so<Directory "/*/public_html ">will not match/home/user/public_html , but<Directory "16* 17">`将 match。例:

    <Directory "/usr/local/httpd/htdocs">
      Options Indexes FollowSymLinks
    </Directory>
    

    如果您愿意,可以引用目录_path,但是,如果路径包含空格,则必须引用它。这是因为空格会指示参数的结束。

    小心 directory-path arguments:他们必须完全匹配 Apache httpd 用来访问 files 的文件系统路径。应用于特定<Directory>的指令不适用于通过不同路径从同一目录访问的 files,例如通过不同的符号链接。

    也可以使用常用表达,添加~字符。例如:

    <Directory ~ "^/www/[0-9]{3}">
    
    </Directory>
    

    将 match 中的 match 目录包含三个 numbers。

    如果多个(non-regular 表达式)<Directory>部分匹配包含文档的目录(或其中一个 parents),则指令首先应用于最短 match 的 order 中,并穿插来自.htaccess files 的指令。对于 example,with

    <Directory "/">
      AllowOverride None
    </Directory>
    
    <Directory "/home">
      AllowOverride FileInfo
    </Directory>
    

    为了访问文档/home/web/dir/doc.html,步骤是:

    • 应用指令AllowOverride None(禁用.htaccess files)。
    • 应用指令AllowOverride FileInfo(对于目录/home)。
    • 在该 order 中的/home/.htaccess/home/web/.htaccess/home/web/dir/.htaccess中应用任何FileInfo指令。

    在应用所有正常部分之后才考虑正则表达式。然后,所有正则表达式都在它们出现在 configuration 文件中的 order 中进行测试。对于 example,with

    <Directory ~ "abc$">
      # ... directives here ...
    </Directory>
    

    在应用了所有正常的<Directory>.htaccessfiles 之后,才会考虑正则表达式部分。然后正则表达式将在/home/abc/public_html/abc上 match 并且将应用相应的<Directory>

    请注意,<Directory "/">的默认访问权限是允许所有访问。这意味着 Apache httpd 将提供从 URL 映射的任何文件。建议您使用等块进行更改

    <Directory "/">
      Require all denied
    </Directory>
    

    然后覆盖您想要访问的目录。有关更多详细信息,请参阅安全提示页面.

    目录部分出现在httpd.conf文件中。<Directory>指令不能嵌套,也不能出现在<Limit>或<LimitExcept>部分。

    参见

    • How <Directory>,<Location> and <Files> sections work用于解释在收到请求时如何组合这些不同的部分

    <DirectoryMatch>指令

    描述:包含适用于匹配正则表达式的 file-system 目录内容的指令。
    句法:<DirectoryMatch regex>...</DirectoryMatch>
    Context:server config,virtual host
    状态:核心
    模块:核心

    <DirectoryMatch></DirectoryMatch>用于包含一组指令,这些指令仅适用于指定目录(和 files),与<Directory>相同。但是,它需要正则表达式作为参数。例如:

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

    匹配/www/(或其任何子目录)中由三个 numbers 组成的目录。

    兼容性

    在 2.3.9 之前,此指令隐式应用于 sub-directories(如<Directory>)并且无法匹配 line 符号的末尾($)。在 2.3.9 及更高版本中,只有 match 表达式的目录受所附指令的影响。

    落后斜线

    此指令适用于可能以或不以尾部斜杠结尾的目录请求,因此锚定到 line 末尾的表达式($)必须小心写入)。

    从 2.4.8 开始,捕获命名组和反向引用并将其写入环境,并使用前缀为“MATCH_”的相应 name 和大写。这允许在表达式和mod_rewrite之类的模块中引用 paths 的元素。为了防止混淆,忽略了编号(未命名)的反向引用。请改用命名组。

    <DirectoryMatch "^/var/www/combined/(?<sitename>[^/]+)">
        Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
    </DirectoryMatch>
    

    参见

    • <Directory>用于描述正则表达式如何与普通<Directory> s 混合
    • How <Directory>,<Location> and <Files> sections work用于解释在收到请求时如何组合这些不同的部分

    DocumentRoot 指令

    描述:形成从 web 可见的主文档树的目录
    句法:DocumentRoot directory-path
    默认:DocumentRoot "/usr/local/apache/htdocs"
    Context:server config,virtual host
    状态:核心
    模块:核心

    该指令设置httpd将从中提供 files 的目录。除非与别号之类的指令匹配,否则服务器会将请求的 URL 附加到文档根目录,以生成文档的路径。例:

    DocumentRoot "/usr/web"
    

    然后访问http://my.example.com/index.html指的是/usr/web/index.html。如果 directory-path 不是绝对的,则假定它相对于ServerRoot。

    应指定DocumentRoot而不使用尾部斜杠。

    参见

    • 将 URL 映射到文件系统位置

    <Else>指令

    描述:包含仅在运行时请求不满足前一个<If>或<ElseIf>节的条件时才适用的指令
    句法:<Else>...</Else>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心
    兼容性:嵌套条件在 2.4.26 及更高版本中进行评估

    当且仅当未应用同一范围内的最新<If><ElseIf>部分时,<Else>才应用所附的指令。对于 example:In

    <If "-z req('Host')">
      # ...
    </If>
    <Else>
      # ...
    </Else>
    

    <If>将 match HTTP/1.0 请求没有 Host:标头,而<Else>将使用 Host:标头 match 请求。

    参见

    • <If>
    • <ElseIf>
    • How <Directory>,<Location>,<Files> sections work用于解释在收到请求时如何组合这些不同的部分。最后应用<If><ElseIf><Else>

    <ElseIf>指令

    描述:包含仅在运行时请求满足条件且不满足前一个<If>或<ElseIf>节的条件时才适用的指令
    句法:<ElseIf expression>...</ElseIf>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心
    兼容性:嵌套条件在 2.4.26 及更高版本中进行评估

    当且仅当给定条件的计算结果为 true 且未应用同一范围内的最新<If><ElseIf>部分时,<ElseIf>才应用所附的指令。对于 example:In

    <If "-R '10.1.0.0/16'">
      #...
    </If>
    <ElseIf "-R '10.0.0.0/8'">
      #...
    </ElseIf>
    <Else>
      #...
    </Else>
    

    如果请求的 remote 地址属于子网 10.0.0.0/8 但不属于子网 10.1.0.0/16,将匹配。

    参见

    • Apache HTTP Server 中的表达式,完整参考和更多示例。
    • <If>
    • <Else>
    • How <Directory>,<Location>,<Files> sections work用于解释在收到请求时如何组合这些不同的部分。最后应用<If><ElseIf><Else>

    EnableMMAP 指令

    描述:在交货期间使用 memory-mapping 读取 files
    句法:EnableMMAP On\|Off
    默认:EnableMMAP On
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心

    如果需要在传递期间读取文件内容,则此指令控制httpd是否可以使用 memory-mapping。默认情况下,当处理请求需要访问文件中的数据时- 例如,如果 OS 支持它,则在使用mod_include - Apache httpd memory-maps 文件传递 server-parsed 文件时。

    这个 memory-mapping 有时会带来绩效改善。但在某些环境中,最好禁用 memory-mapping 以防止出现操作问题:

    • 在某些多处理器系统上,memory-mapping 可以降低httpd的 performance。
    • 在httpd有 memory-mapped 时删除或截断文件会导致httpd因分段错误而崩溃。

    对于易受这些问题影响的服务器配置,您应通过指定以下内容来禁用 memory-mapping 已传递的 files:

    EnableMMAP Off
    

    对于 NFS 挂载 files,可以通过指定以下内容为违规 files 显式禁用此 feature:

    <Directory "/path-to-nfs-files">
      EnableMMAP Off
    </Directory>
    

    EnableSendfile 指令

    描述:使用内核 sendfile 支持将 files 传递给 client
    句法:EnableSendfile On\|Off
    默认:EnableSendfile Off
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:version 2.3.9 中的默认值已更改为 Off。

    该指令控制httpd是否可以使用内核的 sendfile 支持将文件内容传输到 client。默认情况下,当处理请求时不需要访问文件中的数据时- 例如,在传递静态文件时- Apache httpd 使用 sendfile 来传递文件内容,而不管 OS 是否支持该文件。

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

    • 某些平台可能已经破坏了 build 系统未检测到的 sendfile 支持,特别是如果二进制文件是在另一个盒子上构建并移动到这样一台具有损坏的 sendfile 支持的机器上的话。
    • 在 Linux 上,当使用 IPv6 时,使用 sendfile 会触发 TCP-checksum 在某些网卡上卸载错误。
    • 在 Linux on Itanium 上,sendfile可能无法处理大小超过 2GB 的 files。
    • 使用 network-mounted DocumentRoot(e.g.,NFS,SMB,CIFS,FUSE),内核可能无法通过其自己的缓存提供网络文件。

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

    EnableSendfile On
    

    对于网络安装的 files,可以通过指定以下内容为违规 files 显式禁用此 feature:

    <Directory "/path-to-nfs-files">
      EnableSendfile Off
    </Directory>
    

    请注意mod_cache_disk不支持EnableSendfile的 per-directory 和.htaccess configuration。该模块仅考虑EnableSendfile的 global 定义。

    错误指令

    描述:使用自定义错误消息中止 configuration 解析
    句法:Error message
    Context:server config,virtual host,directory,.htaccess
    状态:核心
    模块:核心
    兼容性:2.3.9 及以后

    如果在 configuration 中可以检测到错误,则此指令可用于生成自定义错误消息,并停止 configuration 解析。典型用途是报告 configuration 中缺少的所需模块。

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

    描述:如果出现错误,服务器将返回 client
    句法:ErrorDocument error-code document
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心

    在问题或错误的 event 中,Apache httpd 可以配置为执行以下四种操作之一:

    • 输出一个简单的硬编码错误消息
    • 输出自定义消息
    • 内部重定向到本地 URL-path 来处理 problem/error
    • 重定向到外部 URL 以处理 problem/error

    第一个选项是默认选项,而选项 2-4 是使用ErrorDocument指令配置的,后面跟着 HTTP 响应 code 和 URL 或消息。 Apache httpd 有时会提供有关 problem/error 的其他信息。

    从 2.4.13 开始,可以在指令内使用表达式语法来生成动态 strings 和 URL。

    URL 可以以斜杠开头(/)表示本地 web-paths(相对于DocumentRoot),或者是 client 可以解析的完整 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}}
    

    此外,特殊的 value default可用于指定 Apache httpd 的简单硬编码消息。虽然在正常情况下不需要,但default将恢复 Apache httpd 的简单硬编码消息,以获取否则将继承现有ErrorDocument的配置。

    ErrorDocument 404 /cgi-bin/bad_urls.pl
    
    <Directory "/web/docs">
      ErrorDocument 404 default
    </Directory>
    

    请注意,当您指定ErrorDocument指向 remote URL(即任何方法,如前面有http的方法)时,Apache HTTP Server 会向 client 发送重定向,告诉它在哪里找到该文档,即使文档最终位于同一台服务器上。这有几个含义,最重要的是 client 不会收到原始错误状态 code,而是会收到重定向状态 code。这反过来可能会混淆 web 漫游器和其他 clients,它们尝试使用状态 code 确定 URL 是否有效。此外,如果在ErrorDocument 401中使用 remote URL,则 client 将不知道提示用户输入密码,因为它不会收到 401 状态 code。因此,如果您使用 ErrorDocument 401 指令,那么它必须引用本地文档.

    默认情况下,Microsoft Internet Explorer(MSIE)会在“太小”时忽略 server-generated 错误消息,并替换其自己的“友好”错误消息。大小阈值取决于错误类型,但通常,如果您使错误文档大于 512 字节,则 MSIE 将显示 server-generated 错误而不是屏蔽它。 Microsoft 知识库文章Q294807中提供了更多信息。

    尽管可以覆盖大多数错误消息,但在某些情况下,无论ErrorDocument的设置如何,都会使用内部消息。特别是,如果检测到格式错误的请求,将立即停止正常的请求处理并返回内部错误消息。这是防止由不良请求引起的安全问题所必需的。

    如果您使用的是 mod_proxy,则可能希望启用ProxyErrorOverride,以便您可以代表 Origin 服务器提供自定义错误消息。如果您未启用 ProxyErrorOverride,Apache httpd 将不会为代理内容生成自定义错误文档。

    参见

    • 可自定义响应的文档

    ErrorLog 指令

    描述:服务器将 log 错误的位置
    句法:ErrorLog file-path\|syslog[:[facility][:tag]]
    默认:ErrorLog logs/error_log(Unix)ErrorLog logs/error.log(Windows and OS/2)
    Context:server config,virtual host
    状态:核心
    模块:核心

    ErrorLog指令设置服务器将 log 遇到的任何错误的文件的 name。如果 file-path 不是绝对的,则假定它相对于ServerRoot。

    ErrorLog "/var/log/httpd/error_log"
    

    如果 file-path 以管道符“|”开头,则假定它是一个生成处理错误 log 的命令。

    ErrorLog "|/usr/local/bin/httpd_errors"
    

    有关详细信息,请参阅管道日志上的注释。

    如果系统支持,则使用syslog而不是文件名可以通过 syslogd(8 启用 logging。缺省情况是使用 syslog 工具local7,但您可以使用syslog:facility语法覆盖它,其中 facility 可以是 syslog(1 中通常记录的名称之一。该工具实际上是 global,如果在单个虚拟主机中更改,则指定的最终工具会影响整个服务器。相同的规则适用于 syslog 标记,在大多数情况下,默认情况下使用 Apache 二进制 name,httpd。您也可以使用syslog::tag语法覆盖它。

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

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

    安全性:如果存储 log files 的目录可由除启动服务器的用户以外的任何人写入,请参阅安全提示文档以获取有关安全性可能受到危害的原因的详细信息。

    注意

    在 non-Unix 平台上输入文件路径时,应注意确保仅使用正斜杠,即使平台可能允许使用反斜杠。通常,在 configuration files 中始终使用正斜杠是一个很好的 idea。

    参见

    • LogLevel
    • Apache HTTP Server Log Files

    ErrorLogFormat 指令

    描述:error log 条目的格式规范
    句法:ErrorLogFormat[connection\|request] format
    Context:server config,virtual host
    状态:核心
    模块:核心

    除了实际的 log 消息之外,ErrorLogFormat还允许指定 error log 中记录的补充信息。

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

    connectionrequest指定为第一个参数允许指定其他格式,从而在分别为特定连接或请求记录第一条消息时导致记录其他信息。此附加信息仅每 connection/request 记录一次。如果在不导致任何 log 消息的情况下处理连接或请求,则不会记录其他信息。

    可能会发生某些格式的 string 项不会产生输出。例如,仅当 log 消息与请求相关联时,才会出现 Referer 标头,并且_log 消息在 time 时已经从 client 读取 Referer 标头时发生。如果未生成输出,则默认行为是删除从前一个空格字符到下一个空格字符的所有内容。这意味着 log line 被隐式划分为 non-whitespace 到空白转换的字段。如果格式 string item 不生成输出,则省略整个字段。例如,如果 log 格式[%t][%l][%a]%M中的 remote 地址%a不可用,则不会记录周围的括号。可以使用反斜杠转义空格字符,以防止它们分隔字段。组合'%'(百分比空间)是 zero-width 字段分隔符,不会产生任何输出。

    通过将修饰符添加到 string item 格式可以更改上述行为。如果相应的 item 不产生任何输出,则-(减号)修饰符会导致记录减号。在 once-per-connection/request 格式中,也可以使用+(加号)修饰符。如果带有加号修饰符的 item 不产生任何输出,则省略整个 line。

    数字作为修饰符可用于将 log 严重性 level 分配给 item 格式。仅当 log 消息的严重性不高于指定的 log severity level 时,才会记录 item。该数字的范围可以从 1(警报)到 4(警告)和 7(调试)到 15(跟踪 8)。

    例如,如果您将修饰符添加到%{Referer}i标记(记录Referer请求标头),将会发生这种情况。

    修改后的令牌含义
    %-{Referer}i如果未设置Referer,则记录-
    %+{Referer}i如果未设置Referer,则忽略整个 line。
    %4{Referer}i仅当 log 消息严重性高于 4 时才记录Referer

    某些格式的 string 项接受大括号中的其他参数。

    格式化 String描述
    %%百分号
    %aClient IP 地址和请求的 port
    %{c}a底层对等 IP 地址和连接的 port(参见mod_remoteip模块)
    %A本地 IP-address 和 port
    %{name}e请求环境变量 name
    %EAPR/OS 错误状态 code 和 string
    %Flog 调用的源文件 name 和 line 编号
    %{name}i请求标头 name
    %k此连接上的 keep-alive 请求数
    %lLoglevel 的消息
    %LLog 请求的 ID
    %{c}LLog 连接的 ID
    %{C}LLog 如果在连接范围中使用连接的 ID,否则为空
    %m模块的名称 logging 消息
    %M实际的 log 消息
    %{name}n请求备注 name
    %P当前 process 的进程 ID
    %T当前线程的线程 ID
    %{g}T当前线程的系统唯一线程 ID(与 e.g.top显示的 ID 相同;目前仅限 Linux)
    %t当前 time
    %{u}t当前 time 包括 micro-seconds
    %{cu}t紧凑的 ISO 8601 格式的当前 time,包括 micro-seconds
    %v当前服务器的规范服务器名称。
    %V根据UseCanonicalName设置提供请求的服务器的服务器 name。
    \(反斜杠空间)Non-field 划界空间
    %(百分比空间)字段分隔符(无输出)

    log ID 格式%L为连接或请求生成唯一 ID。这可用于关联哪些 log lines 属于同一连接或请求,哪个请求发生在哪个连接上。 mod_log_config格式 string 也可用于mod_log_config,以允许将访问 log 条目与错误 log lines 相关联。如果加载了mod_unique_id,则其唯一 ID 将用作请求的 log 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"
    

    参见

    • 错误日志
    • LogLevel
    • Apache HTTP Server Log Files

    ExtendedStatus 指令

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

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

    此设置适用于整个服务器,无法在 virtualhost-by-virtualhost 基础上启用或禁用。扩展状态信息的收集可能会降低服务器的速度。另请注意,在正常重新启动期间无法更改此设置。

    请注意,loading mod_status会将默认行为更改为 ExtendedStatus On,而其他第三方模块可能会执行相同操作。这些模块依赖于收集有关所有工作者的 state 的详细信息。默认值由以 version 2.3.6 开头更改。之前的默认值始终为 Off。

    FileETag 指令

    描述:用于为静态 files 创建 ETag HTTP 响应头的文件属性
    句法:FileETag component ...
    默认:FileETag MTime Size
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:在 2.3.14 和更早版本中,默认值为“INode MTime Size”。

    当文档基于静态文件时,FileETag指令配置用于创建ETag(实体标记)响应头字段的文件属性。(ETag value 用于缓存 management 以保存网络 bandwidth.)FileETag指令允许您选择应使用哪些- 如果有的话。识别的关键字是:

    • ****的 inode
      文件的 i-node 编号将包含在计算中
    • **** Mtime 时光网
      将包含上次修改文件的 date 和 time
    • 尺寸
      将包含文件中的字节数
    • 所有
      将使用所有可用字段。这相当于:FileETag INode MTime Size
    • 没有
      如果文档是 file-based,则响应中不会包含 ETag 字段

    INodeMTimeSize关键字可以使用+-作为前缀,这允许对从更宽范围继承的默认设置进行更改。任何没有此类前缀的关键字都会立即显示并完全取消继承的设置。

    如果目录的 configuration 包含FileETag INode MTime Size,并且子目录包含FileETag -INode,则该子目录的设置(将由未覆盖它的任何 sub-subdirectories 继承)将等同于FileETag MTime Size

    警告

    不要更改启用了 WebDAV 的目录或位置的默认值,并使用mod_dav_fs作为存储提供程序。 mod_dav_fs使用MTime Size作为条件请求的ETag比较的固定格式。如果ETag格式通过FileETag更改,则这些条件请求将 break。

    服务器端包含

    由于响应实体可以在不更改具有嵌入式 SSI 指令的静态文件的 INode,MTime 或 Size 的情况下进行更改,因此不会为mod_include解析的响应生成 ETag。

    <Files>指令

    描述:包含适用于匹配文件名的指令
    句法:<Files filename>...</Files>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    <Files>指令通过 filename 限制所附指令的范围。它与<Directory>和<Location>指令相当。它应该与</Files>指令匹配。本节中给出的指令将应用于任何具有与指定文件名匹配的 basename(last component of filename)的 object。在<Directory>部分和.htaccess files 被读取之后但在<Location>部分之前,<Files>部分在它们出现在 configuration 文件中的 order 中处理。请注意,<Files>可以嵌套在<Directory>部分内,以限制它们适用的文件系统部分。

    filename 参数应包含文件名或 wild-card string,其中?匹配任何单个字符,*匹配任何字符序列。

    <Files "cat">
        # 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>
    

    将匹配大多数 common 互联网图形格式。但是,<FilesMatch>是首选。

    请注意,与<Directory>和<Location>部分不同,<Files>部分可以在.htaccess files 中使用。这允许用户在 file-by-file level 控制对自己 files 的访问。

    参见

    • How <Directory>,<Location> and <Files> sections work用于解释在收到请求时如何组合这些不同的部分

    <FilesMatch>指令

    描述:包含适用于 regular-expression 匹配文件名的指令
    句法:<FilesMatch regex>...</FilesMatch>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    <FilesMatch>指令按文件名限制所附指令的范围,就像<Files>指令一样。但是,它接受正则表达式。例如:

    <FilesMatch ".+\.(gif|jpe?g|png)$">
        # ...
    </FilesMatch>
    

    将匹配大多数 common 互联网图形格式。

    正则表达式开头的.+确保 example 的名为.png.gif的 files 不匹配。

    从 2.4.8 开始,捕获命名组和反向引用并将其写入环境,并使用前缀为“MATCH_”的相应 name 和大写。这允许 files 的元素从表达式和mod_rewrite之类的模块中引用。为了防止混淆,忽略了编号(未命名)的反向引用。请改用命名组。

    <FilesMatch "^(?<sitename>[^/]+)">
        Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
    </FilesMatch>
    

    参见

    • How <Directory>,<Location> and <Files> sections work用于解释在收到请求时如何组合这些不同的部分

    ForceType 指令

    描述:强制所有匹配的 files 与 HTTP Content-Type 标头字段中的指定媒体类型一起提供
    句法:ForceType media-type\|None
    Context:目录,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心

    当放入.htaccess文件或<Directory>,或<Location>或<Files>部分时,此指令强制所有匹配的 files 与 media-type 给出的 content type 标识一起提供。例如,如果你有一个目录满了 GIF files,但又不想用.gif标记它们,你可能想要使用:

    ForceType image/gif
    

    请注意,此指令会覆盖 mime.types 中定义的其他间接媒体类型关联或将 AddType。

    您还可以使用None的 value 覆盖更多常规ForceType设置:

    # force all files to be image/gif:
    <Location "/images">
      ForceType image/gif
    </Location>
    
    # but normal mime-type associations here:
    <Location "/images/mixed">
      ForceType None
    </Location>
    

    该指令主要覆盖为文件系统提供的静态 files 生成的内容类型。对于静态 files 以外的资源,响应的 generator 通常指定 Content-Type,此指令无效。

    注意

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

    GprofDir 指令

    描述:将 gmon.out 分析数据写入的目录。
    句法:GprofDir /tmp/gprof/\|/tmp/gprof/%
    Context:server config,virtual host
    状态:核心
    模块:核心

    使用 gprof profiling 支持编译服务器时,GprofDir会在 process 退出时将gmon.out files 写入指定的目录。如果参数 ends 带有百分号('%'),则为每个 process id 创建子目录。

    该指令目前仅适用于预派生 MPM。

    HostnameLookups 指令

    描述:在 client IP 地址上启用 DNS 查找
    句法:HostnameLookups On\|Off\|Double
    默认:HostnameLookups Off
    Context:server config,virtual host,目录
    状态:核心
    模块:核心

    该指令启用 DNS 查找,以便可以记录 host 名称(并传递给REMOTE_HOST中的 CGIs/SSIs)。 value Double指的是进行 double-reverse DNS 查找。也就是说,在执行反向查找之后,然后对该结果执行正向查找。正向查找中的至少一个 IP 地址必须匹配原始地址。(在“tcpwrappers”术语中,这称为PARANOID.)

    无论设置如何,当mod_authz_host用于控制主机名访问时,将执行 double 反向查找。这对于安全性是必要的。请注意,除非您设置HostnameLookups Double,否则此 double-reverse 的结果通常不可用。例如,如果仅HostnameLookups On和对受主机名限制保护的 object 的请求,无论 double-reverse 是否失败,CGI 仍将在REMOTE_HOST中传递 single-reverse 结果。

    默认值为Off in order,以保存那些不需要完成反向查找的网站的网络流量。对最终用户来说也更好,因为他们不必承受查找所需的额外延迟。重载网站应该保留此指令Off,因为 DNS 查找可能需要相当数量的 time。默认情况下编译为安装目录的bin子目录的实用程序分析(logresolve)可用于从已记录的 IP 地址脱机查找 host 名称。

    最后,如果您有hostname-based 需要指令,则无论HostnameLookups的设置如何,都将执行主机名查找。

    HttpProtocolOptions 指令

    描述:修改 HTTP 请求消息的限制
    句法:HttpProtocolOptions[Strict\|Unsafe][RegisteredMethods\|LenientMethods][Allow0.9\|Require1.0]
    默认:HttpProtocolOptions Strict LenientMethods Allow0.9
    Context:server config,virtual host
    状态:核心
    模块:核心
    兼容性:2.2.32 或 2.4.24 以及之后

    此指令更改应用于 HTTP 请求 Line(RFC7230§3.1.1)和 HTTP 请求标头字段(RFC7230§3.2)的规则,这些规则现在默认应用或使用Strict选项。由于 legacy 模块,applications 或 custom user-agents 必须弃用,因此添加了Unsafe选项以恢复 legacy 行为。

    这些规则在请求处理之前应用,因此必须在 global 或默认(第一个)匹配的虚拟 host 部分配置,通过 IP/port 接口(而不是 name)进行配置。

    该指令从以下选项列表中接受三个参数,将默认值应用于未指定的参数:

    • 严格|不安全
      在引入此指令之前,Apache HTTP Server 请求消息解析器可以容忍多种不符合协议的输入形式。 RFC7230§9.4 请求拆分和§__2 响应走私只引出接受 non-conformant 请求消息的两个潜在风险,而 RFC7230§3.5“消息解析稳健性”识别接受模糊空白和请求消息格式化的风险。在引入该指令时,规范的所有语法规则都在默认的 Strict 操作模式下强制执行,并且 3.5 部分建议的严格空白被强制执行且无法放宽。强烈警告不安全用户的安全风险不要切换不安全操作模式,尤其是在 outward-facing,可公开访问的服务器部署上。如果故障监视或其他自定义服务使用者在内部网上运行时需要接口,则用户应仅在配置为其内部专用网络服务的特定虚拟 host 上切换“不安全”选项。导致带有严格模式的 HTTP 400 的请求示例#缺少 CRLF GET/HTTP/1.0\n\n 命令 line 工具和 CRLF 有些工具需要强制使用 CRLF,否则 httpd 将 return 返回 HTTP 400 响应,如上所述案件。例如,OpenSSL sclient 需要-crlf 参数才能正常工作。在查看 HTTP 请求时,DumpIOInput 指令可以帮助识别缺少 CRLF 等问题。
    • RegisteredMethods | LenientMethods
      RFC7231§4.1“请求方法”“概述”要求在请求 line 中遇到不支持的方法时,源服务器应使用 HTTP 501 状态 code 进行响应。当使用 LenientMethods 选项时已经发生这种情况,但是管理员可能希望切换 RegisteredMethods 选项并使用 RegisterHttpMethod 指令注册任何 non-standard 方法,特别是如果已切换 Unsafe 选项。正向代理兼容性不应为正向代理主机切换 RegisteredMethods 选项,因为代理服务器不知道源服务器支持的方法。使用 LenientMethods 模式导致 HTTP 501 的请求示例#Unknown HTTP 方法 WOW/HTTP/1.0\r\n\r\n#小写 HTTP 方法 get/HTTP/1.0\r\n\r\n
    • Allow0.9 | Require1.0
      RFC2616§19.6“与先前版本的兼容性”鼓励 HTTP 服务器支持 legacy HTTP/0.9 请求。 RFC 7230 取代了“支持 HTTP/0.9 请求的期望已被删除”,并在 RFC 7230 附录 A 中提供了额外的 comments。Require1.0 选项允许用户删除对默认 Allow0.9 选项行为的支持。使用 Require1.0 模式导致 HTTP 400 的请求示例#不支持 HTTP version GET /\r\n\r\n

    查看记录到错误日志的消息(使用LogLevel debug level 配置)可以帮助识别此类错误请求及其来源。用户应特别注意 access log 中 400 个响应,以查看意外拒绝的无效请求。

    <If>指令

    描述:包含仅在运行时请求满足条件时才适用的指令
    句法:<If expression>...</If>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心
    兼容性:嵌套条件在 2.4.26 及更高版本中进行评估

    <If>指令在运行时计算表达式,并且当且仅当表达式求值为 true 时才应用所附的指令。例如:

    <If "-z req('Host')">
    

    将 match HTTP/1.0 请求没有 Host:标头。表达式可能包含用于 string 比较的各种 shell-like operators(==!=<,...),integer 比较(-eq-ne,...)等)(-n-z-f,...)。也可以使用正则表达式,

    <If "%{QUERY_STRING} =~ /(delete|commit)=.*?elem/">
    

    shell-like pattern 匹配和许多其他操作。这些操作可以在请求 headers(req),环境变量(env)和大量其他 properties 上完成。完整文档可在Apache HTTP Server 中的表达式中找到。

    只有支持目录 context的指令才能在此 configuration 部分中使用。

    某些变量(例如CONTENT_TYPE和其他响应_header)在已经评估了<If>条件后设置,因此无法在此指令中使用。

    参见

    • Apache HTTP Server 中的表达式,完整参考和更多示例。
    • <ElseIf>
    • <Else>
    • How <Directory>,<Location>,<Files> sections work用于解释在收到请求时如何组合这些不同的部分。最后应用<If><ElseIf><Else>

    <IfDefine>指令

    描述:包含仅在启动时测试为 true 时才会处理的指令
    句法:<IfDefine[!]parameter-name>...</IfDefine>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    <IfDefine test>...</IfDefine>部分用于标记有条件的指令。仅当测试为 true 时,才会处理<IfDefine>部分中的指令。如果 test 为 false,则忽略开始和结束标记之间的所有内容。

    <IfDefine> section 指令中的测试可以是以下两种形式之一:

    • parameter-name
    • ! parameter-name

    在前一种情况下,只有在定义了名为 parameter-name 的参数时,才会处理开始和结束标记之间的指令。第二种格式反转测试,并且只有在 parameter-name 未**定义时才处理指令。

    parameter-name 参数是httpd命令 line 上给定的定义,在服务器启动的 time 时通过-Dparameter或限定指令。

    <IfDefine>部分是 nest-able,可用于实现简单的 multiple-parameter 测试。例:

    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>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心
    兼容性:可在 2.4.34 及更高版本中使用。

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

    <IfDirective>部分中的测试可以是以下两种形式之一:

    • directive-name
    • ! directive-name

    在前一种情况下,只有在处理的 time 处有给定 name 的指令时,才会处理开始和结束标记之间的指令。第二种格式反转测试,只有在 directive-name ****不可用时才处理指令。

    只有在需要有一个适用于多个版本的httpd的 configuration 文件时,才应使用此部分,无论特定指令是否可用。在正常操作中,指令不需要放在<IfDirective>部分中。

    参见

    • <IfSection>

    <IfFile>指令

    描述:包含仅在启动时存在文件时才会处理的指令
    句法:<IfFile[!]filename>...</IfFile>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心
    兼容性:可在 2.4.34 及更高版本中使用。

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

    <IfFile> section 指令中的文件名可以采用与<IfDefine>部分中的测试变量 i.e 相同的形式。如果!字符直接放在文件名之前,则可以取消测试。

    如果提供了相对文件名,则检查为ServerRoot relative。如果此指令发生在ServerRoot之前,则将相对于 compiled-in 服务器根或通过-d参数在命令 line 上传入的服务器根检查路径。

    <IfModule>指令

    描述:包含以特定模块的存在与否为条件处理的指令
    句法:<IfModule[!]module-file\|module-identifier>...</IfModule>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心
    兼容性:模块标识符在 version 2.1 及更高版本中可用。

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

    <IfModule> section 指令中的测试可以是以下两种形式之一:

    • !模块

    在前一种情况下,只有在 Apache httpd 中包含名为 module 的模块时才会处理开始和结束标记之间的指令- 无论是编译还是使用LoadModule动态加载。第二种格式反转测试,并且只在不包含**的模块时才处理指令。

    模块参数可以是模块的模块标识符,也可以是模块的文件 name。例如,rewrite_module是标识符,mod_rewrite.c是文件 name。如果模块由多个源 files 组成,请使用包含 string STANDARD20_MODULE_STUFF的文件的 name。

    <IfModule>部分是 nest-able,可用于实现简单的 multiple-module 测试。

    只有在需要有一个 configuration 文件无论特定模块是否可用时,才应使用此部分。在正常操作中,指令不需要放在<IfModule>部分中。

    <IfSection>指令

    描述:包含根据是否存在特定 section 指令而处理的指令
    句法:<IfSection[!]section-name>...</IfSection>
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心
    兼容性:可在 2.4.34 及更高版本中使用。

    <IfSection test>...</IfSection>部分用于标记以特定 section 指令的存在为条件的指令。 section 指令是任何指令,例如<VirtualHost>,它包含其他指令,并且具有带有前导“<”的指令 name。

    仅当测试为 true 时,才会处理<IfSection>部分中的指令。如果 test 为 false,则忽略开始和结束标记之间的所有内容。

    必须在没有前导“<" or closing ">”的情况下指定 section-name。<IfSection>部分中的测试可以是以下两种形式之一:

    • section-name
    • ! section-name

    在前一种情况下,只有在处理的 time 处有给定 name 的 section 指令时,才会处理开始和结束标记之间的指令。第二种格式反转测试,只有当 section-name 不是**可用的 section 指令时才处理指令。

    例如:

    <IfSection VirtualHost>
       ...
    </IfSection>
    

    只有在需要有一个适用于多个httpd版本的 configuration 文件时,才应使用此部分,无论特定的 section 指令是否可用。在正常操作中,指令不需要放在<IfSection>部分中。

    参见

    • <IfDirective>

    包含指令

    描述:包括服务器 configuration files 中的其他 configuration files
    句法:Include file-path\|directory-path\|wildcard
    Context:server config,virtual host,目录
    状态:核心
    模块:核心
    兼容性:目录通配符匹配在 2.3.6 及更高版本中可用

    该指令允许在服务器 configuration files 中包含其他 configuration files。

    Shell-style(fnmatch())通配符可以在路径的文件名或目录部分中使用,以按字母顺序 order 一次包含多个 files。另外,如果Include指向目录而不是文件,Apache httpd 将读取该目录和所有子目录中的所有 files。但是,建议不要包括整个目录,因为很容易意外地将临时 files 保留在可能导致httpd失败的目录中。相反,我们建议您使用下面显示的通配符语法,以包含_matiles match 特定 pattern,例如*.conf,用于 example。

    如果通配符表达式不匹配任何文件,则包括指令将失败并显示错误**。如果应忽略 non-matching 通配符,则可以使用IncludeOptional指令。

    指定的文件路径可以是绝对路径,也可以是相对于ServerRoot目录的路径。

    例子:

    Include /usr/local/apache2/conf/ssl.conf
    Include /usr/local/apache2/conf/vhosts/*.conf
    

    或者,提供相对于ServerRoot目录的_path:

    Include conf/ssl.conf
    Include conf/vhosts/*.conf
    

    通配符可以包含在路径的目录或文件部分中。如果 conf/vhosts 中没有包含至少一个*.conf 文件的子目录,则此 example 将失败:

    Include conf/vhosts/*/*.conf
    

    或者,如果缺少 files 或目录,将忽略以下命令:

    IncludeOptional conf/vhosts/*/*.conf
    

    参见

    • IncludeOptional
    • apachectl

    IncludeOptional Directive

    描述:包括服务器 configuration files 中的其他 configuration files
    句法:IncludeOptional file-path\|directory-path\|wildcard
    Context:server config,virtual host,目录
    状态:核心
    模块:核心
    兼容性:可在 2.3.6 及更高版本中使用。没有通配符的不存在的文件 paths 在 2.4.30 之后不会导致语法错误

    该指令允许在服务器 configuration files 中包含其他 configuration files。它与包括指令的工作方式相同,但如果使用通配符并且它们不匹配任何文件或目录,或者文件系统上不存在文件路径,它将被静默忽略(而不是导致错误)。

    参见

    • 包括
    • apachectl

    KeepAlive 指令

    描述:启用 HTTP 持久连接
    句法:KeepAlive On\|Off
    默认:KeepAlive On
    Context:server config,virtual host
    状态:核心
    模块:核心

    HTTP/1.0 的 Keep-Alive 扩展和 HTTP/1.1 的持久连接 feature 提供 long-lived HTTP 会话,允许通过同一 TCP 连接发送多个请求。在某些情况下,已经证明这可以使具有许多图像的 HTML 文档的延迟时间加速几乎 50%。要启用 Keep-Alive 连接,请设置KeepAlive On

    对于 HTTP/1.0 clients,仅当 client 明确请求 Keep-Alive 连接时才会使用 Keep-Alive 连接。此外,只有在事先知道内容的长度时,才能使用 HTTP/1.0 client 的 Keep-Alive 连接。这意味着动态内容(如 CGI 输出,SSI 页面和 server-generated 目录列表)通常不会使用 Keep-Alive 连接到 HTTP/1.0 clients。对于 HTTP/1.1 clients,除非另行指定,否则持久连接是默认连接。如果 client 请求它,则将在 order 中使用 chunked 编码来通过持久连接发送未知长度的内容。

    当 client 使用 Keep-Alive 连接时,无论使用该连接发送了多少请求,它都将被计为MaxConnectionsPerChild指令的单个“请求”。

    参见

    • MaxKeepAliveRequests

    KeepAliveTimeout 指令

    描述:服务器等待持久连接上的后续请求的 time 的数量
    句法:KeepAliveTimeout num[ms]
    默认:KeepAliveTimeout 5
    Context:server config,virtual host
    状态:核心
    模块:核心

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

    KeepAliveTimeout设置为高 value 可能会导致负载很重的服务器出现 performance 问题。超时越高,服务器进程将继续占用等待与 idle clients 的连接。

    如果为 name-based 虚拟 host 设置了KeepAliveTimeout****,则将使用与本地 IP 和 port 最匹配的第一个定义的虚拟 host 的 value。

    <Limit>指令

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

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

    <Limit>指令的目的是限制访问控制对指定 HTTP 方法的影响。对于所有其他方法,<Limit>括号中包含的访问限制将不起作用。以下 example 仅将访问控制应用于方法POSTPUTDELETE,使所有其他方法不受保护:

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

    列出的方法名称可以是以下中的一个或多个:GETPOSTPUTDELETECONNECTOPTIONSPATCHPROPFINDPROPPATCHMKCOLCOPYMOVELOCKUNLOCK。**方法 name 是 case-sensitive.**如果使用GET,它也将限制HEAD请求。TRACE方法不能被限制(参见TraceEnable)。

    在限制访问时,应始终优先使用部分优先于<Limit>部分,因为<LimitExcept>部分提供针对任意方法的保护。
    <Limit>和<LimitExcept>指令可以嵌套。在这种情况下,<Limit>或<LimitExcept>指令的每个连续 level 必须进一步限制应用访问控制的方法集。

    当使用<Limit><LimitExcept>指令与要求指令时,请注意第一个要求成功授权请求,无论是否存在其他要求指令。
    例如,给定以下 configuration,所有用户将被授权POST请求,并且在所有情况下都将忽略Require group editors指令:

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

    <LimitExcept>指令

    描述:将访问控制限制为除指定的 HTTP 方法之外的所有 HTTP 方法
    句法:<LimitExcept method[method]...>...</LimitExcept>
    Context:目录,.htaccess
    覆盖:AuthConfig,限制
    状态:核心
    模块:核心

    <LimitExcept></LimitExcept>用于包含一组访问控制指令,然后将其应用于 arguments 中未列出的任何 HTTP 访问方法**。 i.e。,它与<Limit>部分相反,可用于控制标准和 nonstandard/unrecognized 方法。有关详细信息,请参阅<Limit>的文档。

    例如:

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

    LimitInternalRecursion 指令

    描述:确定内部重定向和嵌套子请求的最大数量
    句法:LimitInternalRecursion number[number]
    默认:LimitInternalRecursion 10
    Context:server config,virtual host
    状态:核心
    模块:核心

    例如,当使用行动指令时会发生内部重定向,该指令在内部将原始请求重定向到 CGI 脚本。子请求是 Apache httpd 的机制,用于找出如果请求某些 URI 会发生什么。对于 example,mod_dir使用子请求来查找DirectoryIndex指令中列出的 files。

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

    指令存储两个不同的限制,这些限制在 per-request 基础上进行评估。第一个数字是可能相互跟随的内部重定向的最大数量。第二个数字决定了子请求的嵌套深度。如果仅指定一个数字,则会将其分配给两个限制。

    LimitInternalRecursion 5
    

    LimitRequestBody 指令

    描述:限制从 client 发送的 HTTP 请求正文的总大小
    句法:LimitRequestBody bytes
    默认:LimitRequestBody 0
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

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

    LimitRequestBody指令允许用户在给定指令的 context(server,per-directory,per-file 或 per-location)中设置 HTTP 请求消息体的允许大小限制。如果 client 请求超出该限制,服务器将_return 错误响应而不是为请求提供服务。正常请求消息体的大小将根据资源的性质和该资源上允许的方法而有很大差异。 CGI 脚本通常使用消息正文来检索表单信息。方法的实现将要求 value 至少与服务器希望为该资源接受的任何表示一样大。

    该指令使服务器管理员可以更好地控制异常客户端请求行为,这可能有助于避免某些形式的 denial-of-service 攻击。

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

    LimitRequestBody 102400
    

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

    LimitRequestFields 指令

    描述:限制将从 client 接受的 HTTP 请求标头字段的数量
    句法:LimitRequestFields number
    默认:LimitRequestFields 100
    Context:server config,virtual host
    状态:核心
    模块:核心

    Number 是从 0(意味着无限制)到 32767 的 integer。默认 value 由 compile-time 常量DEFAULT_LIMIT_REQUEST_FIELDS(100 分布式)定义。

    LimitRequestFields指令允许服务器管理员修改 HTTP 请求中允许的请求头字段数限制。服务器需要此 value 大于普通客户端请求可能包含的字段数。 client 使用的请求标头字段的数量很少超过 20,但这可能因不同的 client implementations 而异,通常取决于用户将浏览器配置为支持详细内容 negotiation 的程度。可选的 HTTP extensions 通常使用请求标头字段表示。

    该指令使服务器管理员可以更好地控制异常客户端请求行为,这可能有助于避免某些形式的 denial-of-service 攻击。如果普通的 clients 看到来自服务器的错误响应,指示请求中发送的字段太多,则应增加 value。

    例如:

    LimitRequestFields 50
    

    警告

    使用 name-based 虚拟主机时,此指令的 value 取自本地 IP 和 port 组合的默认(first-listed)虚拟 host。

    LimitRequestFieldSize 指令

    描述:限制 client 允许的 HTTP 请求标头的大小
    句法:LimitRequestFieldSize bytes
    默认:LimitRequestFieldSize 8190
    Context:server config,virtual host
    状态:核心
    模块:核心

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

    LimitRequestFieldSize指令允许服务器管理员设置 HTTP 请求标头字段的允许大小限制。服务器需要此 value 足够大以容纳普通 client 请求中的任何一个头字段。普通请求标头字段的大小在不同的 client implementations 之间会有很大差异,通常取决于用户将其浏览器配置为支持详细内容 negotiation 的程度。 SPNEGO 身份验证 headers 最多可达 12392 个字节。

    该指令使服务器管理员可以更好地控制异常客户端请求行为,这可能有助于避免某些形式的 denial-of-service 攻击。

    例如:

    LimitRequestFieldSize 4094
    

    在正常情况下,不应更改 value 的默认值。

    警告

    使用 name-based 虚拟主机时,此指令的 value 取自与当前 IP 地址和 port 组合最匹配的默认(first-listed)虚拟 host。

    LimitRequestLine 指令

    描述:限制将从 client 接受的 HTTP 请求 line 的大小
    句法:LimitRequestLine bytes
    默认:LimitRequestLine 8190
    Context:server config,virtual host
    状态:核心
    模块:核心

    该指令设置了 HTTP request-line 上允许的字节数。

    LimitRequestLine指令允许服务器管理员设置 client 的 HTTP request-line 的允许大小限制。由于 request-line 由 HTTP 方法,URI 和协议 version 组成,因此LimitRequestLine指令对服务器上的请求允许的 request-URI 的长度施加限制。服务器需要此 value 足够大以容纳其任何资源名称,包括可能在GET请求的查询部分中传递的任何信息。

    该指令使服务器管理员可以更好地控制异常客户端请求行为,这可能有助于避免某些形式的 denial-of-service 攻击。

    例如:

    LimitRequestLine 4094
    

    在正常情况下,不应更改 value 的默认值。

    警告

    使用 name-based 虚拟主机时,此指令的 value 取自与当前 IP 地址和 port 组合最匹配的默认(first-listed)虚拟 host。

    LimitXMLRequestBody 指令

    描述:限制 XML-based 请求正文的大小
    句法:LimitXMLRequestBody bytes
    默认:LimitXMLRequestBody 1000000
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    限制(以字节为单位)XML-based 请求正文的最大大小。的值将禁用任何检查。

    例:

    LimitXMLRequestBody 0
    

    <Location>指令

    描述:仅将附带的指令应用于匹配的 URL
    句法:<Location URL-path\|URL>...</Location>
    Context:server config,virtual host
    状态:核心
    模块:核心

    <Location>指令通过 URL 限制所附指令的范围。它类似于<Directory>指令,并启动一个以</Location>指令终止的子部分。在部分和.htaccess files 被读取之后,以及<Files>部分之后,<Location>部分将在它们出现在 configuration 文件中的 order 中处理。

    <Location>部分完全在文件系统之外运行。这有几个后果。最重要的是,不应使用<Location>指令来控制对文件系统位置的访问。由于几个不同的 URL 可以映射到相同的文件系统位置,因此可以绕过这样的访问控制。

    如果 URL 的路径 component 满足以下任何条件,则所附的指令将应用于请求:

    • 指定的位置与 URL 的路径 component 完全匹配。
    • 指定的位置(以正斜杠结尾)是 URL 的路径 component 的前缀(被视为 context 根)。
    • 添加了斜杠的指定位置是 URL 的路径 component 的前缀(也被视为 context 根)。

    在下面的 example 中,没有使用尾部斜杠,对/private1,/private1/和/private1/file.txt 的请求将应用所附的指令,但/private1other 不会。

    <Location "/private1">
        #  ...
    </Location>
    

    在下面的 example 中,使用了尾部斜杠,对/private2/和/private2/file.txt 的请求将应用所附的指令,但/private2 和/private2other 不会。

    <Location "/private2/">
        # ...
    </Location>
    

    何时使用<Location>

    使用<Location>将指令应用于文件系统之外的内容。对于存在于文件系统中的内容,请使用<Directory>和<Files>。 exception 是<Location "/">,这是将 configuration 应用于整个服务器的简单方法。

    对于所有原始(non-proxy)请求,要匹配的 URL 是/path/形式的 URL-path。不能包含 scheme,hostname,port 或 query string。对于代理请求,要匹配的 URL 的格式为scheme://servername/path,您必须包含前缀。

    URL 可以使用通配符。在 wild-card string 中,?匹配任何单个字符,*匹配任何 sequences 字符。通配符都不匹配 URL-path 中的/。

    也可以使用常用表达,添加~字符。例如:

    <Location ~ "/(extra|special)/data">
        #...
    </Location>
    

    将匹配包含子字符串/extra/data/special/data的 URL。指令<LocationMatch>的行为与<Location>的正则表达式 version 完全相同,并且是首选,原因很简单,~在很多字体中很难与-区分开来。

    与SetHandler指令结合使用时,<Location>功能特别有用。例如,要启用状态请求但仅允许来自example.com的浏览器,您可以使用:

    <Location "/status">
      SetHandler server-status
      Require host example.com
    </Location>
    

    关于/(斜杠)的注意事项

    斜杠字符具有特殊含义,具体取决于它出现在 URL 中的位置。人们可能习惯于在多个相邻斜杠经常折叠为单个斜杠的文件系统中的行为(i.e.,/home///foo/home/foo相同)。在 URL-space 中,这不一定是 true。<LocationMatch>指令和<Location>的正则表达式 version 要求您明确指定多个斜杠,如果这是您的意图。

    对于 example,<LocationMatch "^/abc">将匹配请求 URL /abc但不匹配请求 URL //abc。当用于代理请求时,(non-regex)<Location>指令的行为类似。但是当(non-regex)<Location>用于 non-proxy 请求时,它将使用单个斜杠隐式匹配多个斜杠。例如,如果您指定<Location "/abc/def">并且请求是/abc//def那么它将 match。

    参见

    • How <Directory>,<Location> and <Files> sections work用于解释在收到请求时如何组合这些不同的部分。
    • LocationMatch

    <LocationMatch>指令

    描述:仅将附带的指令应用于 regular-expression 匹配的 URL
    句法:<LocationMatch regex>...</LocationMatch>
    Context:server config,virtual host
    状态:核心
    模块:核心

    <LocationMatch>指令通过 URL 限制所附指令的范围,其方式与<Location>相同。但是,它需要正则表达式作为参数而不是简单的 string。例如:

    <LocationMatch "/(extra|special)/data">
        # ...
    </LocationMatch>
    

    将匹配包含子字符串/extra/data/special/data的 URL。

    如果意图是 URL 以/extra/data开头,而不仅仅是包含/extra/data,则使用^为正则表达式加前缀以要求它。

    <LocationMatch "^/(extra|special)/data">
    

    从 2.4.8 开始,捕获命名组和反向引用并将其写入环境,并使用前缀为“MATCH_”的相应 name 和大写。这允许从表达式和mod_rewrite之类的模块中引用 URL 元素。为了防止混淆,忽略了编号(未命名)的反向引用。请改用命名组。

    <LocationMatch "^/combined/(?<sitename>[^/]+)">
        Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
    </LocationMatch>
    

    关于/(斜杠)的注意事项

    斜杠字符具有特殊含义,具体取决于它出现在 URL 中的位置。人们可能习惯于在多个相邻斜杠经常折叠为单个斜杠的文件系统中的行为(i.e.,/home///foo/home/foo相同)。在 URL-space 中,这不一定是 true。<LocationMatch>指令和<Location>的正则表达式 version 要求您明确指定多个斜杠,如果这是您的意图。

    对于 example,<LocationMatch "^/abc">将匹配请求 URL /abc但不匹配请求 URL //abc。当用于代理请求时,(non-regex)<Location>指令的行为类似。但是当(non-regex)<Location>用于 non-proxy 请求时,它将使用单个斜杠隐式匹配多个斜杠。例如,如果您指定<Location "/abc/def">并且请求是/abc//def那么它将 match。

    参见

    • How <Directory>,<Location> and <Files> sections work用于解释在收到请求时如何组合这些不同的部分

    LogLevel 指令

    描述:控制 ErrorLog 的详细程度
    句法:LogLevel[module:]level[module:level]...
    默认:LogLevel warn
    Context:server config,virtual host,目录
    状态:核心
    模块:核心
    兼容性:_A和 per-directory configuration 在 Apache HTTP Server 2.3.6 及更高版本中可用

    LogLevel调整错误日志中记录的消息的详细程度(请参阅错误日志指令)。以下级别可用,按重要性递减:

    水平描述
    emerg紧急情况- 系统无法使用。“孩子无法打开锁定文件。退出”
    alert必须立即采取行动。“getpwuid:无法从 uid 确定用户 name”
    crit关键条件。“socket:无法获得 socket,退出的孩子”
    error错误条件。“脚本过早结束 headers”
    warn警告条件。“child process 1234 没有退出,发送另一个 SIGHUP”
    notice正常但重要的情况。“httpd:抓住了 SIGBUS,试图将核心转移到...”
    info信息化。“服务器似乎很忙,(你可能需要增加 StartServers,或 Min/MaxSpareServers)......”
    debugDebug-level 消息“打开配置文件......”
    trace1跟踪消息“代理:FTP:控制连接完成”
    trace2跟踪消息“proxy:CONNECT:将 CONNECT 请求发送到 remote 代理”
    trace3跟踪消息“openssl:握手:开始”
    trace4跟踪消息“从缓冲的 SSL 旅读取,模式 0,17 字节”
    trace5跟踪消息“map lookup FAILED:map=rewritemap key=keyname”
    trace6跟踪消息“缓存查找 FAILED,强制新的 map 查找”
    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|”

    指定特定的 level 时,也会报告来自所有其他更高重要级别的消息。 E.g。,当指定LogLevel info时,也会发布 log 级别为noticewarn的消息。

    建议使用至少crit的 level。

    例如:

    LogLevel notice
    

    注意

    当 logging 到常规文件时,level notice的消息无法被抑制,因此总是被记录。但是,当使用syslog完成 logging 时,这不适用。

    指定没有模块 name 的 level 会将所有模块的 level 重置为该 level。使用模块 name 指定 level 将仅为该模块设置 level。可以使用模块源文件 name,模块标识符或模块标识符,并将尾部_module省略为模块规范。这意味着以下三个规范是等效的:

    LogLevel info ssl:warn
    LogLevel info mod_ssl.c:warn
    LogLevel info ssl_module:warn
    

    也可以更改每个目录的 level:

    LogLevel info
    <Directory "/usr/local/apache/htdocs/app">
      LogLevel debug
    </Directory>
    

    每个目录 loglevel configuration 仅影响在解析请求之后记录的消息以及与请求关联的消息。 Log 与连接或服务器关联的消息不受影响。

    参见

    • 错误日志
    • ErrorLogFormat
    • Apache HTTP Server Log Files

    MaxKeepAliveRequests 指令

    描述:持久连接上允许的请求数
    句法:MaxKeepAliveRequests number
    默认:MaxKeepAliveRequests 100
    Context:server config,virtual host
    状态:核心
    模块:核心

    当活着打开时,MaxKeepAliveRequests指令限制每个连接允许的请求数。如果设置为0,则允许无限制的请求。我们建议将此设置保持为高值以获得最大的服务器性能。

    例如:

    MaxKeepAliveRequests 500
    

    MaxRangeOverlaps 指令

    描述:返回完整资源之前允许的重叠范围数(例如:100-200,150-300)
    句法:MaxRangeOverlaps default \| unlimited \| none \| number-of-ranges
    默认:MaxRangeOverlaps 20
    Context:server config,virtual host,目录
    状态:核心
    模块:核心
    兼容性:可在 Apache HTTP Server 2.3.15 及更高版本中使用

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

    • 默认
      将重叠范围的数量限制为 compile-time 默认值 20。
    • 没有
      不允许重叠的 Range headers。
    • 无限
      服务器不限制它愿意满足的重叠范围的数量。
    • number-of-ranges
      一个正数,表示服务器愿意满足的最大重叠范围数。

    MaxRangeReversals 指令

    描述:返回完整资源之前允许的范围反转次数(例如:100-200,50-70)
    句法:MaxRangeReversals default \| unlimited \| none \| number-of-ranges
    默认:MaxRangeReversals 20
    Context:server config,virtual host,目录
    状态:核心
    模块:核心
    兼容性:可在 Apache HTTP Server 2.3.15 及更高版本中使用

    MaxRangeReversals指令限制服务器愿意_return 到 client 的 HTTP 范围反转的数量。如果请求的反转范围超出允许范围,则返回完整的资源。

    • 默认
      将范围反转的数量限制为 compile-time 默认值 20。
    • 没有
      没有范围反转允许使用标题。
    • 无限
      服务器不限制它愿意满足的范围反转次数。
    • number-of-ranges
      一个正数,表示服务器愿意满足的最大范围反转次数。

    MaxRanges 指令

    描述:返回完整资源之前允许的范围数
    句法:MaxRanges default \| unlimited \| none \| number-of-ranges
    默认:MaxRanges 200
    Context:server config,virtual host,目录
    状态:核心
    模块:核心
    兼容性:可在 Apache HTTP Server 2.3.15 及更高版本中使用

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

    • 默认
      将范围数限制为 compile-time 默认值 200。
    • 没有
      Range headers 被忽略。
    • 无限
      服务器不限制它愿意满足的范围数。
    • number-of-ranges
      一个正数,表示服务器愿意满足的最大范围数。

    MergeSlashes 指令

    描述:控制服务器是否合并 URL 中的连续斜杠。
    句法:MergeSlashes ON\|OFF
    默认:MergeSlashes ON
    Context:server config,virtual host
    状态:核心
    模块:核心
    兼容性:在 2.4.39 中添加

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

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

    MergeTrailers 指令

    描述:确定是否将预告片合并到 headers 中
    句法:MergeTrailers[on\|off]
    默认:MergeTrailers off
    Context:server config,virtual host
    状态:核心
    模块:核心
    兼容性:2.4.11 及以后

    该指令控制是否将 HTTP 预告片复制到 HTTP headers 的内部表示中。这种合并发生在请求主体已被完全消耗时,_大多数头处理之后将有机会检查或修改请求 headers。

    提供此选项是为了与 2.4.11 之前的版本兼容,其中预告片始终合并。

    Mutex 指令

    描述:为所有或指定的互斥锁配置 mutex 机制和锁定文件目录
    句法:Mutex mechanism[default\|mutex-name]...[OmitPID]
    默认:Mutex default
    Context:服务器配置
    状态:核心
    模块:核心
    兼容性:可在 Apache HTTP Server 2.3.4 及更高版本中使用

    Mutex指令设置 httpd 和模块用于序列化对资源的访问的机制以及可选的锁定文件位置。指定default作为第二个参数来更改所有互斥锁的设置;指定 mutex name(请参阅下面的 table)作为第二个参数,仅覆盖该 mutex 的默认值。

    Mutex指令通常用于以下特殊情况:

    • 当APR选择的默认机制出现功能或 performance 问题时,更改 mutex 机制
    • 当默认目录不支持锁定时,更改 file-based 互斥锁使用的目录

    支持的模块

    该指令仅配置使用ap_mutex_register() API 向核心服务器注册的互斥锁。与 httpd 捆绑在一起的所有模块都支持Mutex指令,但 third-party 模块可能不支持。如果支持该指令,请查阅 third-party 模块的文档,该文档必须指明 mutex name(s)。

    以下 mutex 机制可用:

    • default | yes
      这将选择由APR确定的默认锁定 implementation。使用-V选项 running httpd可以显示默认锁定 implementation。
    • none | no
      这有效地禁用了 mutex,并且仅当模块指示它是有效选择时才允许 mutex。有关更多信息,请参阅模块文档。
    • posixsem
      这是基于 Posix 信号量的 mutex 变体。

    警告

    如果 process 中的某个线程持有 mutex 段错误,则不会恢复信号量所有权,从而导致 web 服务器挂起。

    • sysvsem
      这是基于 SystemV IPC 信号量的 mutex 变体。

    警告

    如果在删除信号量之前进程崩溃,则可能“泄漏”SysV 信号量。

    安全

    信号量 API 允许任何 CGI 的拒绝服务攻击在与 web 服务器相同的 uid 下运行(i.e.,所有 CGI,除非你使用类似suEXEC或cgiwrapper的东西)。

    • sem
      这将选择“最佳”可用信号量 implementation,在该 order 中选择 Posix 和 SystemV IPC 信号量。
    • pthread
      这是基于 cross-process Posix 线程互斥锁的 mutex 变体。

    警告

    在大多数系统上,如果子 process 在持有使用此 implementation 的 mutex 时异常终止,则服务器将死锁并停止响应请求。发生这种情况时,服务器将需要手动重新启动才能恢复。

    Solaris 和 Linux 是值得注意的 exceptions,因为它们提供了一种机制,通常允许在子 process 在持有 mutex 时异常终止后恢复 mutex。

    如果您的系统符合 POSIX 标准或者它实现了pthread_mutexattr_setrobust_np() function,您可以安全地使用pthread选项。

    • fcntl:/path/to/mutex
      这是一个 mutex 变体,其中物理(lock-)file 和fcntl() function 用作 mutex。

    警告

    当在 multi-threaded,multi-process 环境中使用基于此机制的多个互斥锁时,如果fcntl()不是 thread-aware,则可以报告死锁错误(EDEADLK)以进行有效的 mutex 操作,例如在 Solaris 上。

    • flock:/path/to/mutex
      这与带有 exception 的fcntl:/path/to/mutex方法类似,flock() function 用于提供文件锁定。
    • file:/path/to/mutex
      这将选择“最佳”可用文件锁定 implementation,在该 order 中选择fcntlflock

    大多数机制仅在选定的平台上可用,其中底层平台和APR支持它。所有平台上都没有的机制是 posixsem,sysvsem,sem,pthread,fcntl,flock 和 file。

    使用 file-based 机制 fcntl 和 flock,路径(如果提供)是将创建锁定文件的目录。默认目录是相对于ServerRoot的 httpd 的 run-time 文件目录。始终对/path/to/mutex使用本地磁盘文件系统,而永远不要将目录驻留在 NFS-或 AFS-filesystem 上。该文件的基本名称是 mutex 类型,模块提供的可选实例 string,除非指定OmitPID关键字,否则将附加 httpd parent process 的 process id 以使文件 name 唯一,避免多个时发生冲突 httpd 实例共享一个锁文件目录。例如,如果 mutex name 为mpm-accept且锁定文件目录为/var/httpd/locks,则具有 parent process id 12345 的 httpd 实例的锁定文件 name 将为/var/httpd/locks/mpm-accept.12345

    安全

    最好避免将 mutex files 放在 world-writable 目录中,例如/var/tmp,因为有人可能会创建拒绝服务攻击,并通过创建一个与服务器尝试创建的 name 相同的 name 来阻止服务器启动。

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

    Mutex nameModule(s)受保护的资源
    mpm-accept预派生和工人 MPM传入连接,以避免雷鸣般的群体问题;有关更多信息,请参阅性能调整文档
    authdigest-clientmod_auth_digest共享 memory 中的 client 列表
    authdigest-opaquemod_auth_digest共享 memory 中的计数器
    ldap-cachemodldapLDAP 结果缓存
    rewrite-mapmod_rewrite与外部映射程序通信,以避免多个请求混合 I/O
    ssl-cachemod_sslSSL session 缓存
    ssl-staplingmod_sslOCSP 装订响应缓存
    watchdog-callbackmod_watchdog特定 client 模块的回调函数

    OmitPID关键字禁止从锁定文件 name 添加 httpd parent process id。

    在下面的示例中,MPM accept mutex 的 mutex 机制将从 compiled-in default 更改为fcntl,并在目录/var/httpd/locks中创建关联的锁定文件。所有其他互斥锁的 mutex 机制将从 compiled-in 默认更改为sysvsem

    Mutex sysvsem default
    Mutex fcntl:/var/httpd/locks mpm-accept
    

    NameVirtualHost 指令

    描述:DEPRECATED:为 name-virtual hosting 指定 IP 地址
    句法:NameVirtualHost addr[:port]
    Context:服务器配置
    状态:核心
    模块:核心

    在 2.3.11 之前,需要NameVirtualHost来指示服务器特定 IP 地址和 port 组合可用作 name-based 虚拟 host。在 2.3.11 及更高版本中,任何 time 在多个虚拟主机中使用 IP 地址和 port 组合时,将自动为该地址启用 name-based 虚拟主机。

    该指令目前无效。

    参见

    • 虚拟主机文档

    选项指令

    描述:配置特定目录中可用的 features
    句法:Options[+\|-]option[[+\|-]option]...
    默认:Options FollowSymlinks
    Context:server config,virtual host,directory,.htaccess
    覆盖:选项
    状态:核心
    模块:核心
    兼容性:2.3.11 中的默认值从 All 更改为 FollowSymlinks

    Options指令控制特定目录中可用的服务器 features。

    选项可以设置为None,在这种情况下,none of extra features 被启用,或者以下一个或多个:

    • All
      除 MultiViews 以外的所有选项。
    • ExecCGI
      允许使用 mod_cgi 执行 CGI 脚本。
    • FollowSymLinks
      服务器将遵循此目录中的符号链接。这是默认设置。即使服务器遵循符号链接,它也不会更改用于匹配<Directory>部分的路径名。 FollowSymLinks 和 SymLinksIfOwnerMatch 选项仅适用于<Directory>节或.htaccess files。省略此选项不应被视为安全限制,因为符号链接测试受竞争条件限制,使其可以绕过。
    • Includes
      允许 mod_include 包含 mod_include 提供的内容。
    • IncludesNOEXEC
      允许 Server-side 包含,但禁用#exec cmd 和#exec cgi。仍然可以从 ScriptAliased 目录中#include 虚拟 CGI 脚本。
    • Indexes
      如果请求 maps 到目录的 URL 并且该目录中没有 DirectoryIndex(e.g.,index.html),则 mod_autoindex 将_return 目录的格式化列表。
    • MultiViews
      使用 mod_negotiation 允许内容协商“MultiViews”。注意如果将此选项设置为<Directory>以外的任何位置,则会忽略此选项,因为 mod_negotiation 需要实际资源来进行比较和评估。
    • SymLinksIfOwnerMatch
      服务器将仅遵循目标文件或目录所拥有的符号链接,其链接与用户 ID 相同。注意 FollowSymLinks 和 SymLinksIfOwnerMatch 选项仅适用于<Directory>部分或.htaccess files。此选项不应被视为安全限制,因为符号链接测试受竞争条件限制,使其可以绕过。

    通常,如果多个Options可以应用于目录,则使用最具体的一个而忽略其他目录;选项未合并。(参见如何合并部分.)但是,如果Options指令上的所有选项都以+-符号开头,则选项将合并。任何以+开头的选项都会添加到当前有效的选项中,任何前面带有-的选项都是从当前有效的选项中删除。

    注意

    Options+-混合使用没有的语法是无效的语法,并且在服务器启动期间通过语法检查中止将被拒绝。

    对于 example,没有任何+-符号:

    <Directory "/web/docs">
      Options Indexes FollowSymLinks
    </Directory>
    
    <Directory "/web/docs/spec">
      Options Includes
    </Directory>
    

    然后只为/web/docs/spec目录设置Includes。但是,如果第二个Options指令使用+-符号:

    <Directory "/web/docs">
      Options Indexes FollowSymLinks
    </Directory>
    
    <Directory "/web/docs/spec">
      Options +Includes -Indexes
    </Directory>
    

    然后为/web/docs/spec目录设置选项FollowSymLinksIncludes

    注意

    无论先前的设置如何,使用-IncludesNOEXEC-Includes禁用 server-side 都包括完全。

    缺少任何其他设置时的默认值为FollowSymlinks

    协议指令

    描述:监听 socket 的协议
    句法:Protocol protocol
    Context:server config,virtual host
    状态:核心
    模块:核心
    兼容性:可在 Apache 2.1.5 及更高版本中使用。在 Windows 上,来自 Apache 2.3.3 和更高版本。

    该指令指定用于特定侦听 socket 的协议。该协议用于确定哪个模块应处理请求并使用AcceptFilter指令应用协议特定的优化。

    如果您在 non-standard 端口上运行,则只需设置协议;否则,对于 port 80 假定http,对 port 443 假定https

    例如,如果您在 non-standard port 上运行https,请明确指定协议:

    Protocol https
    

    您还可以使用听指令指定协议。

    参见

    • AcceptFilter

    协议指令

    描述:可用于 server/virtual host 的协议
    句法:Protocols protocol ...
    默认:Protocols http/1.1
    Context:server config,virtual host
    状态:核心
    模块:核心
    兼容性:仅适用于 Apache 2.4.17 及更高版本。

    该指令指定 server/virtual host 支持的协议列表。该列表确定了 client 可以为此 server/host 协商的允许协议。

    如果要扩展 server/host 的可用协议,则需要设置协议。默认情况下,仅允许 http/1.1 协议(包括与 1.0 和 0.9 clients 的兼容性)。

    例如,如果要为具有 TLS 的服务器支持 HTTP/2,请指定:

    Protocols h2 http/1.1
    

    有效协议是http/1.1用于 http 和 https 连接,h2用于 https 连接,h2c用于 http 连接。模块可以启用更多协议。

    指定 unavailable/disabled 的协议是安全的。这样的协议名称将被忽略。

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

    参见

    • ProtocolsHonorOrder

    ProtocolsHonorOrder 指令

    描述:确定协议的 order 是否在 negotiation 期间确定优先级
    句法:ProtocolsHonorOrder On\|Off
    默认:ProtocolsHonorOrder On
    Context:server config,virtual host
    状态:核心
    模块:核心
    兼容性:仅适用于 Apache 2.4.17 及更高版本。

    该指令指定服务器是否应该遵守Protocols指令 lists 协议的 order。

    如果配置为 Off,则 client 提供的 list order 协议优先于 server configuration 中的 order。

    ProtocolsHonorOrder设置为on(默认值)时,client ordering 无关紧要,只有服务器设置中的 ordering 会影响协议 negotiation 的结果。

    参见

    • 协议

    QualifyRedirectURL 指令

    描述:控制 REDIRECT_URL 环境变量是否完全限定
    句法:QualifyRedirectURL ON\|OFF
    默认:QualifyRedirectURL OFF
    Context:server config,virtual host,目录
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:2.4.18 及更高版本支持指令。 2.4.17 的行为就像配置了'QualifyRedirectURL ON'一样。

    该指令控制服务器是否确保 REDIRECT_URL 环境变量是完全限定的。默认情况下,变量包含 client 请求的逐字 URL,例如“/index.html”。使用[QualifyRedirectURL ON](#qualifyredirecturl on)时,相同的请求将产生 value,例如“http://www.example.com/index.html”。

    即使没有设置此指令,当针对完全限定的 URL 发出请求时,REDIRECT_URL 仍将完全限定。

    RegexDefaultOptions 指令

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

    该指令为之后使用的任何正则表达式添加了一些默认行为。

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

    选项可以是:

    • ICASE
      使用 case-insensitive match。
    • EXTENDED
      Perl 的/x flag,忽略(pattern 中的 unescaped-)spaces 和 comments。
    • DOTALL
      Perl 的/s flag,'.'匹配换行符。
    • DOLLAR_ENDONLY
      '$'仅在主题 string 结尾处匹配。
    # 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 指令

    描述:注册 non-standard HTTP 方法
    句法:RegisterHttpMethod method[method[...]]
    Context:服务器配置
    状态:核心
    模块:核心
    兼容性:可在 Apache HTTP Server 2.4.24 及更高版本中使用

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

    参见

    • HTTPProtocolOptions
    • AllowMethods

    RLimitCPU 指令

    描述:限制 Apache httpd 子进程启动的进程的 CPU 消耗
    句法:RLimitCPU seconds\|max[seconds\|max]
    默认:Unset; uses operating system defaults
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    采用 1 或 2 个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。这两个参数都可以是数字,或者max表示服务器应该将限制设置为操作系统 configuration 允许的最大值。提高最大资源限制要求服务器 running 为root或处于初始启动阶段。

    这适用于从 Apache httpd 子服务请求而不是 Apache httpd 子项本身分叉的进程。这包括 CGI 脚本和 SSI exec 命令,但不包括从 Apache httpd parent 派生的任何进程,例如管道日志。

    CPU 资源限制以每个 process 的秒数表示。

    参见

    • RLimitMEM
    • RLimitNPROC

    RLimitMEM 指令

    描述:限制 Apache httpd 子进程启动的进程的 memory 消耗
    句法:RLimitMEM bytes\|max[bytes\|max]
    默认:Unset; uses operating system defaults
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    采用 1 或 2 个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。这两个参数都可以是数字,或者max表示服务器应该将限制设置为操作系统 configuration 允许的最大值。提高最大资源限制要求服务器 running 为root或处于初始启动阶段。

    这适用于从 Apache httpd 子服务请求而不是 Apache httpd 子项本身分叉的进程。这包括 CGI 脚本和 SSI exec 命令,但不包括从 Apache httpd parent 派生的任何进程,例如管道日志。

    Memory 资源限制以每个 process 的字节数表示。

    参见

    • RLimitCPU
    • RLimitNPROC

    RLimitNPROC 指令

    描述:限制 Apache httpd 子进程启动的进程可以启动的进程数
    句法:RLimitNPROC number\|max[number\|max]
    默认:Unset; uses operating system defaults
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    采用 1 或 2 个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。这两个参数都可以是数字,或者max表示服务器应该将限制设置为操作系统 configuration 允许的最大值。提高最大资源限制要求服务器 running 为root或处于初始启动阶段。

    这适用于从 Apache httpd 子服务请求而不是 Apache httpd 子项本身分叉的进程。这包括 CGI 脚本和 SSI exec 命令,但不包括从 Apache httpd parent 派生的任何进程,例如管道日志。

    Process limits 控制每个用户的进程数。

    注意

    如果 CGI 进程不是_运行在 web 服务器用户标识以外的用户 ID 下,则该指令将限制服务器本身可以创建的进程数。这种情况的证据将通过不能在error_log中分叉消息来表示。

    参见

    • RLimitMEM
    • RLimitCPU

    ScriptInterpreterSource 指令

    描述:用于查找 CGI 脚本的 interpreter 的技术
    句法:ScriptInterpreterSource Registry\|Registry-Strict\|Script
    默认:ScriptInterpreterSource Script
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:仅限 Win32。

    该指令用于控制 Apache httpd 如何找到用于 run CGI 脚本的 interpreter。默认设置为Script。这会导致 Apache httpd 使用脚本中 shebang line(第一个 line,以#!开头)指向的 interpreter。在 Win32 系统上,此 line 通常如下所示:

    #!C:/Perl/bin/perl.exe
    

    或者,如果perlPATH中,只需:

    #!perl
    

    设置ScriptInterpreterSource Registry将导致使用脚本文件扩展名(e.g.,.pl)作为搜索 key 搜索 Windows 注册表树HKEY_CLASSES_ROOT。由注册表子项Shell\ExecCGI\Command定义的命令,或者如果不存在,由子项Shell\Open\Command定义的命令用于打开脚本文件。如果找不到注册表项,Apache httpd 将回退到Script选项的行为。

    安全

    ScriptInterpreterSource Registry与ScriptAlias 指令'目录一起使用时要小心,因为 Apache httpd 将尝试执行此目录中的每个**文件。Registry设置可能会导致 files 上不需要的程序 calls 通常不会执行。例如,大多数 Windows 系统上.htm files 上的默认打开命令将执行 Microsoft Internet Explorer,因此脚本目录中存在的.htm文件的任何 HTTP 请求都将在服务器的后台启动浏览器。这是在一分钟左右内崩溃系统的好方法。

    Apache HTTP Server 2.0 中的新选项Registry-StrictRegistry完全相同,但仅使用子键Shell\ExecCGI\CommandExecCGI key 不是 common。它必须在 windows 注册表中手动配置,因此可以防止系统上出现意外的程序 calls。

    SeeRequestTail 指令

    描述:假设请求本身大于 63 个字符,确定 mod_status 是显示请求的前 63 个字符还是最后 63 个字符。
    句法:SeeRequestTail On\|Off
    默认:SeeRequestTail Off
    Context:服务器配置
    状态:核心
    模块:核心
    兼容性:可在 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 指令

    描述:服务器在发送给 client 的错误消息中包含的电子邮件地址
    句法:ServerAdmin email-address\|URL
    Context:server config,virtual host
    状态:核心
    模块:核心

    ServerAdmin设置服务器在其返回给 client 的任何错误消息中包含的联系地址。如果httpd无法将提供的参数识别为 URL,则假定它是 email-address 并在超链接目标中以mailto:为前缀。但是,建议实际使用电子邮件地址,因为有很多 CGI 脚本可以做出这种假设。如果要使用 URL,则应指向您控制的其他服务器。否则,如果出现错误,用户可能无法与您联系。

    可能值得为此设置专用地址 e.g.

    ServerAdmin www-admin@foo.example.com
    

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

    ServerAlias 指令

    描述:匹配 name-virtual 主机请求时使用的 host 的备用名称
    句法:ServerAlias hostname[hostname]...
    Context:虚拟 host
    状态:核心
    模块:核心

    ServerAlias指令设置 host 的备用名称,以便与name-based 虚拟主机一起使用。如果合适,ServerAlias可以包括通配符。

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

    组的 Name-based 虚拟主机在它们出现在 configuration 中的 order 中处理。使用第一个匹配的服务器名称或ServerAlias,对于通配符没有不同的优先级(ServerName 与 ServerAlias 也没有)。

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

    参见

    • UseCanonicalName
    • Apache HTTP Server Virtual Host 文档

    ServerName 指令

    描述:服务器用于标识自身的主机名和 port
    句法:ServerName[scheme://]domain-name\|ip-address[:port]
    Context:server config,virtual host
    状态:核心
    模块:核心

    ServerName指令设置服务器用来标识自身的请求 scheme,hostname 和 port。

    当使用name-based 虚拟主机时,使用ServerName(可能与ServerAlias一起)来唯一标识虚拟 host。

    此外,当UseCanonicalName设置为 non-default value 时,creating self-referential 重定向 URL 时使用此方法。

    例如,如果托管 web 服务器的计算机的 name 是simple.example.com,但是计算机也具有 DNS 别名www.example.com并且您希望如此标识 web 服务器,则应使用以下指令:

    ServerName www.example.com
    

    ServerName指令可能出现在服务器定义的任何位置。但是,每个外观都会覆盖先前的外观(在该服务器内)。

    如果未指定ServerName,则服务器首先向操作系统询问系统主机名,然后尝试推断 client 可见主机名,如果失败,则对系统上存在的 IP 地址执行反向查找。

    如果ServerName中未指定 port,则服务器将使用传入请求中的 port。为获得最佳可靠性和可预测性,应使用ServerName指令指定显式主机名和 port。

    如果您使用的是name-based 虚拟主机,则<VirtualHost>部分中的ServerName指定请求的Host:标头中必须出现的主机名才能匹配此虚拟 host。

    有时,服务器在处理 SSL 的设备后面运行,例如反向代理,负载平衡器或 SSL 卸载设备。在这种情况下,请在ServerName指令中指定 clients 连接的https:// scheme 和 port 编号,以确保服务器生成正确的 self-referential URL。

    有关设置的详细信息,请参阅UseCanonicalName和UseCanonicalPhysicalPort指令的说明,这些设置确定 self-referential URL(mod_dir。,mod_dir模块)是否将引用指定的 port 或 client 请求中给出的 port 编号。

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

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

    参见

    • 有关 DNS 和 Apache HTTP Server 的问题
    • Apache HTTP Server 虚拟 host 文档
    • UseCanonicalName
    • UseCanonicalPhysicalPort
    • ServerAlias

    ServerPath 指令

    描述:Legacy 由不兼容的浏览器访问的 name-based 虚拟 host 的 URL 路径名
    句法:ServerPath URL-path
    Context:虚拟 host
    状态:核心
    模块:核心

    ServerPath指令设置 host 的 legacy URL 路径名,以便与name-based 虚拟主机一起使用。

    参见

    • Apache HTTP Server Virtual Host 文档

    ServerRoot 指令

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

    ServerRoot指令设置服务器所在的目录。通常它将包含子目录conf/logs/。其他 configuration 指令中的相对_path(例如包括或LoadModule,对于 example)被视为相对于此目录。

    ServerRoot "/home/httpd"
    

    ServerRoot的默认位置可以通过--prefix参数使用配置来修改,并且服务器的大多数 third-party 发行版具有与上面列出的默认位置不同的默认位置。

    参见

    • httpd 的-d 选项
    • 安全提示有关如何正确设置ServerRoot权限的信息

    ServerSignature 指令

    描述:在 server-generated 文档上配置页脚
    句法:ServerSignature On\|Off\|EMail
    默认:ServerSignature Off
    Context:server config,virtual host,directory,.htaccess
    覆盖:所有
    状态:核心
    模块:核心

    ServerSignature指令允许 server-generated 文档下的尾部页脚 line 的 configuration 配置(错误消息,mod_proxy ftp 目录列表,mod_info输出,...)。你想要启用这样的页脚 line 的原因是在一个代理链中,用户通常无法分辨哪个链接服务器实际产生了返回的错误消息。

    Off设置(默认设置)会抑制页脚 line(因此与 Apache-1.2 及以下的行为兼容)。On设置只是在服务 version number 和服务器名称服务虚拟 host 中添加 line,EMail设置另外创建一个“mailto:”reference 到引用文档的ServerAdmin。

    在 version 2.0.44 之后,所提供的服务器 version number 的细节由ServerTokens指令控制。

    参见

    • ServerTokens

    ServerTokens 指令

    描述:配置Server HTTP 响应头
    句法:ServerTokens Major\|Minor\|Min[imal]\|Prod[uctOnly]\|OS\|Full
    默认:ServerTokens Full
    Context:服务器配置
    状态:核心
    模块:核心

    该指令控制发送回 clients 的Server响应头字段是否包含服务器的通用 OS-type 的描述以及有关 compiled-in 模块的信息。

    • ServerTokens Full(或未指定)
      服务器发送(e.g.):服务器:Apache/2.4.2(Unix)PHP/4.2.2 MyMod/1.2
    • ServerTokens Prod[uctOnly]
      服务器发送(e.g.):服务器:Apache
    • ServerTokens Major
      服务器发送(e.g.):服务器:Apache/2
    • ServerTokens Minor
      服务器发送(e.g.):服务器:Apache/2.4
    • ServerTokens Min[imal]
      服务器发送(e.g.):服务器:Apache/2.4.2
    • ServerTokens OS
      服务器发送(e.g.):服务器:Apache/2.4.2(Unix)

    此设置适用于整个服务器,无法在 virtualhost-by-virtualhost 基础上启用或禁用。

    在 version 2.0.44 之后,该指令还控制ServerSignature指令提供的信息。

    建议不要将ServerTokens设置为小于minimal,因为这会使调试互操作问题变得更加困难。另请注意,禁用 Server:标头不会使您的服务器更安全。“通过默默无闻的安全”的理念是一种神话,并导致一种虚假的安全感。

    参见

    • ServerSignature

    SetHandler 指令

    描述:强制所有匹配的 files 由处理程序处理
    句法:SetHandler handler-name\|none\|expression
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心
    兼容性:表达式参数 2.4.19 和更高版本

    当放入.htaccess文件或<Directory>或<Location>部分时,该指令强制所有匹配的 files 通过 handler-name 给出的处理器进行解析。例如,如果您有一个目录,您希望将其完全解析为 imagemap rule files,无论扩展名如何,您可以将以下内容放入该目录中的.htaccess文件中:

    SetHandler imap-file
    

    另一个例子:如果您希望每当调用http://servername/status的 URL 时服务器都显示状态报告,您可以将以下内容放入httpd.conf

    <Location "/status">
      SetHandler server-status
    </Location>
    

    您还可以使用此伪指令为具有特定文件扩展名的 files 配置特定处理程序。例如:

    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    

    String-valued 表达式可用于 reference per-request 变量,包括对命名正则表达式的反向引用:

    <LocationMatch ^/app/(?<sub>[^/]+)/>
         SetHandler "proxy:unix:/var/run/app_%{env:MATCH_sub}.sock|fcgi://localhost:8080"
    </LocationMatch>
    

    您可以使用 value None覆盖先前定义的SetHandler指令。

    注意

    因为SetHandler会覆盖默认处理程序,所以正常行为(例如处理以斜杠结尾的 URL(/)作为目录或索引 files)将被抑制。

    参见

    • AddHandler

    SetInputFilter 指令

    描述:设置将处理 client 请求和 POST 输入的过滤器
    句法:SetInputFilter filter[;filter...]
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心

    SetInputFilter指令设置过滤器或过滤器,当服务器接收到它们时,它们将处理 client 请求和 POST 输入。这是对其他地方定义的任何过滤器的补充,包括AddInputFilter指令。

    如果指定了多个过滤器,则它们必须在 order 中用分号分隔,它们应在其中处理内容。

    参见

    • 过滤器文件

    SetOutputFilter 指令

    描述:设置将处理来自服务器的响应的过滤器
    句法:SetOutputFilter filter[;filter...]
    Context:server config,virtual host,directory,.htaccess
    覆盖:FileInfo
    状态:核心
    模块:核心

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

    例如,以下 configuration 将 process目录中的所有 files 为 server-side includes。

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

    如果指定了多个过滤器,则它们必须在 order 中用分号分隔,它们应在其中处理内容。

    参见

    • 过滤器文件

    TimeOut 指令

    描述:服务器在请求失败之前等待某些 events 的 time 的数量
    句法:TimeOut seconds
    默认:TimeOut 60
    Context:server config,virtual host
    状态:核心
    模块:核心

    TimeOut指令定义 time Apache httpd 在各种情况下等待 I/O 的长度:

    • 从 client 读取数据时,如果读取缓冲区为空,则等待 TCP 数据包到达的 time 的长度。

    对于新连接的初始数据,此指令在任何已配置的AcceptFilter已将新连接传递到服务器之后才会生效。

    • 将数据写入 client 时,如果发送缓冲区已满,则等待确认数据包的 time 长度。
    • 在mod_cgi和mod_cgid中,等待 CGI 脚本的任何单独输出块的 time 长度。
    • 在mod_ext_filter中,等待从过滤 process 输出的 time 的长度。
    • 在mod_proxy中,如果未配置ProxyTimeout,则为默认超时 value。

    TraceEnable 指令

    描述:确定TRACE请求的行为
    句法:TraceEnable[on\|off\|extended]
    默认:TraceEnable on
    Context:server config,virtual host
    状态:核心
    模块:核心

    该指令覆盖核心服务器和mod_proxy的TRACE行为。默认的TraceEnable on允许每个 RFC 2616 的TRACE个请求,这些请求不允许任何请求主体伴随请求。TraceEnable off导致核心服务器和mod_proxy

    最后,仅出于测试和诊断目的,可以使用 non-compliant TraceEnable extended指令允许请求主体。核心(作为原始服务器)将请求体限制为 64Kb(如果使用Transfer-Encoding: chunked,则为块_header 加上 8Kb)。核心将通过响应体反映完整的 headers 和所有 chunk headers。作为代理服务器,请求正文不限于 64Kb。

    注意

    尽管声称相反,启用TRACE方法不会暴露 Apache httpd 中的任何安全漏洞。TRACE方法由 HTTP/1.1 规范定义,implementations 应支持它。

    UnDefine 指令

    描述:取消定义变量的存在
    句法:UnDefine parameter-name
    Context:服务器配置
    状态:核心
    模块:核心

    撤消限定或将-D参数传递给httpd的效果。

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

    虽然虚拟 host context 支持此指令,但它所做的更改对任何后续的 configuration 指令都是可见的,超出任何封闭的虚拟 host。

    参见

    • 限定
    • IfDefine

    UseCanonicalName 指令

    描述:配置服务器如何确定自己的 name 和 port
    句法:UseCanonicalName On\|Off\|DNS
    默认:UseCanonicalName Off
    Context:server config,virtual host,目录
    状态:核心
    模块:核心

    在许多情况下 Apache httpd 必须构造一个 self-referential URL -即引用回同一服务器的 URL。使用UseCanonicalName On Apache httpd 将使用服务器名称指令中指定的 hostname 和 port 来构造服务器的规范 name。此 name 用于所有 self-referential URL,以及 CGI 中SERVER_NAMESERVER_PORT的值。

    使用UseCanonicalName Off Apache httpd 将使用 client 提供的主机名和 port 形成 self-referential URL(如果有的话)(否则它将使用规范的 name,如上所定义)。这些值与用于实现name-based 虚拟主机的值相同,并且可以使用相同的 clients。 CGI 变量SERVER_NAMESERVER_PORT也将从 client 提供的值构造。

    这可能有用的示例是在 Intranet 服务器上,您可以使用短名称(例如www)将用户连接到计算机。您会注意到,如果用户键入一个短名称和一个 URL,这是一个目录,例如http://www/splat,没有尾部斜杠,那么 Apache httpd 会将它们重定向到http://www.example.com/splat/。如果启用了身份验证,则会导致用户必须进行两次身份验证(一次为www,另一次为www.example.com- 请参阅有关此主题的常见问题解答以获取更多信)。但如果UseCanonicalName设置为Off,则 Apache httpd 将重定向到http://www/splat/

    还有第三个选项UseCanonicalName DNS,它用于大量 IP-based 虚拟主机,以支持不提供Host:标头的古代客户端。使用此选项,Apache httpd 对 client 在 order 中连接的服务器 IP 地址执行反向 DNS 查找,以计算 self-referential URL。

    警告

    如果 CGI 对SERVER_NAME的值进行假设,则可能会被此选项破坏。 client 基本上可以自由地提供他们想要的任何 value 作为主机名。但是如果 CGI 只使用SERVER_NAME来构造 self-referential URL,那么应该没问题。

    参见

    • UseCanonicalPhysicalPort
    • 服务器名称

    UseCanonicalPhysicalPort 指令

    描述:配置服务器如何确定自己的 port
    句法:UseCanonicalPhysicalPort On\|Off
    默认:UseCanonicalPhysicalPort Off
    Context:server config,virtual host,目录
    状态:核心
    模块:核心

    在许多情况下 Apache httpd 必须构造一个 self-referential URL -即引用回同一服务器的 URL。使用UseCanonicalPhysicalPort On时,Apache httpd 将在为服务器构造规范 port 以遵守UseCanonicalName指令时,将此请求使用的实际物理 port 号提供为潜在的 port。使用UseCanonicalPhysicalPort Off时,Apache httpd 将不会使用实际的物理 port 编号,而是依赖所有已配置的信息来构造有效的 port 编号。

    注意

    使用 physical port 时查找的 ordering 如下:

    • UseCanonicalName On
      Port 在 Servername Physical port Default port 中提供
    • UseCanonicalName Off | DNS
      来自 Host 的解析 port:标题物理 port Port 在 Servername 默认 port 中提供

    使用UseCanonicalPhysicalPort Off时,物理端口将从 ordering 中删除。

    参见

    • UseCanonicalName
    • 服务器名称

    <VirtualHost>指令

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

    <VirtualHost></VirtualHost>用于包含仅适用于特定虚拟 host 的 group 指令组。可以使用虚拟 host context 中允许的任何指令。当服务器收到特定虚拟 host 上的文档请求时,它使用<VirtualHost>部分中包含的 configuration 指令。 Addr 可以是以下任何一个,可选地后跟冒号和 port 号(或*):

    • 虚拟 host 的 IP 地址;
    • 虚拟 host 的 IP 地址的完全限定域 name(不推荐);
    • 字符*,充当通配符并匹配任何 IP 地址。
    • string _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 地址,否则无法确定可选的 port 编号。 IPv6 example 如下所示:

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

    每个 Virtual Host 必须对应于服务器的不同 IP 地址,不同的 port 编号或不同的 host name,在前一种情况下,服务器计算机必须配置为接受多个地址的 IP 数据包。(如果机器没有多个网络接口,则可以使用ifconfig alias命令完成此操作- 如果您的 OS 支持它)。

    注意

    使用<VirtualHost>不会**影响 Apache httpd 侦听的地址。您可能需要确保 Apache httpd 正在使用听侦听正确的地址。

    应在每个<VirtualHost>块中指定服务器名称。如果不存在,将继承“主”服务器 configuration 中的服务器名称。

    收到请求后,服务器首先根据本地 IP 地址和 port 组合将其映射到最佳匹配<VirtualHost>。 Non-wildcards 具有更高的优先级。如果根本没有基于 IP 和 port 的 match,则使用“主”服务器 configuration。

    如果多个虚拟主机包含最匹配的 IP 地址和 port,则服务器会根据请求的主机名从这些虚拟主机中选择最佳 match。如果未找到匹配的 name-based virtual host,则将使用与 IP 地址匹配的第一个列出的虚拟 host。因此,给定 IP 地址和 port 组合的第一个列出的虚拟 host 是该 IP 和 port 组合的默认虚拟 host。

    安全

    如果存储 log files 的目录可由除启动服务器的用户以外的任何人写入,请参阅安全提示文档以获取有关安全性可能受到危害的原因的详细信息。

    参见

    • Apache HTTP Server Virtual Host 文档
    • 有关 DNS 和 Apache HTTP Server 的问题
    • 设置 Apache HTTP Server 使用的地址和端口
    • How <Directory>,<Location> and <Files> sections work用于解释在收到请求时如何组合这些不同的部分

    下篇:mpm_common