快捷搜索:   nginx

apache核心指令解说(三)

<LimitExcept> 指令
说明 对除了指定方法以外的所有HTTP方法进行访问控制
语法 <LimitExcept method [method] ... > ... </LimitExcept>
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core

<LimitExcept>和</LimitExcept>用于封装一组访问控制指令,并将其作用于所有没有在参数中标出的HTTP方法。也就是说,与<Limit>相反,它用于控制标准的和非标准以及无法辨识的方法。

比如:

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

LimitInternalRecursion 指令
说明 指定内部重定向和嵌套子请求的最大数量
语法 LimitInternalRecursion number [number]
默认值 LimitInternalRecursion 10
作用域 server config, virtual host
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.0.47 及以后的版本中可用

例如,当Action指令内部重定向原始请求到CGI脚本时,内部重定向将会发生。子请求是Apache的一个用于找到如果一个URI 被请求时将会发生什么的机制。例如,mod_dir子请求来寻找那些根据DirectoryIndex指令应当被列出的文件。

LimitInternalRecursion可以防止服务器进入一个内部重定向或者子请求的死循环而崩溃。这样的死循环通常由错误的配置引起。

这个指令存储了两个不同的限制,这两个限制是基于每个单独的请求进行计算的。第一个number限制了内部重定向链的最大长度(一个接一个)。第二个number限制了子请求的最大嵌套层数。如果你只指定了一个number ,那么将会被同时应用于这两个限制。

示例
LimitInternalRecursion 5

LimitRequestBody 指令
说明 限制客户端发送的HTTP请求体的最大字节长度
语法 LimitRequestBody bytes
默认值 LimitRequestBody 0
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core

bytes在0(意味着无限制)到2147483647(2GB)间限制了请求体所允许的字节数。

LimitRequestBody可以让用户在其作用范围内(整个服务器、特定目录、特定文件、特定位置)设置一个允许客户端发送的HTTP请求体 的最大字节长度的限制。如果客户端的请求超出了这个限制,服务器会回应一个错误而不是伺服这个请求。一个普通请求的信息体在很大程度上取决于资源的自然属 性和这个资源允许的方法。CGI脚本经常用消息体把表单的信息传递给服务器。使用PUT方法至少会需要与服务器期望从这个资源得到的信息量差不多大小的 值。

此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。

比如,如果您允许文件上传到某个位置,而且希望能将上传文件的大小设置为100K,您可以使用下面的指令:

LimitRequestBody 102400

LimitRequestFields 指令
说明 限制接受客户端请求中HTTP请求头域的数量
语法 LimitRequestFields number
默认值 LimitRequestFields 100
作用域 server config
状态 核心(C)
模块 core

Number是一个0(意味着不限)到32767之间的整数。默认值为编译时的常量DEFAULT_LIMIT_REQUEST_FIELDS(发布值为100)。

LimitRequestFields指令允许服务器管理员修改在一个HTTP请求中的请求头域的数量限制。服务器需要此值大于一个普通客户端请求 中包含头域的数量。一个客户端请求头域的数量很少大于20,但根据客户端的不同这个数字有很大的差别,经常取决于用户配置他们的浏览器扩展以支持更详细的 内容协商。可选的HTTP扩展经常使用请求头域来实现。

这个指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。如果正常使用的客户端得到了服务器的错误应答,指出其在请求中发送了过多的头域,您应该适当的增大此值。

例如:

LimitRequestFields 50

LimitRequestFieldSize 指令
说明 限制客户端发送的请求头的字节数
语法 LimitRequestFieldsize bytes
默认值 LimitRequestFieldsize 8190
作用域 server config
状态 核心(C)
模块 core

bytes指定了HTTP请求头允许的字节大小。

LimitRequestFieldSize指令允许服务器管理员增加或减少HTTP请求头域大小的限制。一般来说,服务器需要此值足够大,以适应 普通客户端的任何请求的头域大小。一个普通头域的大小对于不同的客户端来说是有很大差别的,一般与用户配置他们的浏览器以支持更多的内容协议密切相关。 SPNEGO的认证头最大可能达到12392字节。

这个指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。

举例如下:

LimitRequestFieldSize 4094

一般情况下,请不要改变这个设置,而是保持其默认设置。
LimitRequestLine 指令
说明 限制接受客户端发送的HTTP请求行的字节数
语法 LimitRequestLine bytes
默认值 LimitRequestLine 8190
作用域 server config
状态 核心(C)
模块 core

bytes将设置HTTP请求行的字节数限制。

LimitRequestLine指令允许服务器管理员增加或减少客户端HTTP请求行允许大小的限制。因为请求行包括HTTP方法、URI、协议 版本,所以LimitRequestLine指令会限制请求URI的长度。服务器会需要这个值足够大以装载它所有的资源名,包括可能在GET请求中所传递 的查询部分的所有信息。

这个指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。

举例如下:

LimitRequestLine 4094

一般情况下,不需要改变此设置的默认值。
LimitXMLRequestBody 指令
说明 限制基于XML的请求体的大小
语法 LimitXMLRequestBody bytes
默认值 LimitXMLRequestBody 1000000
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core

限制基于XML的请求体大小的最大字节数,"0"将禁用这一检查。

比如:

LimitXMLRequestBody 0

<Location> 指令
说明 将封装的指令作用于匹配的URL
语法 <Location URL-path|URL> ... </Location>
作用域 server config, virtual host
状态 核心(C)
模块 core

<Location>提供了基于URL的访问控制。与<Directory>指令类似,它也会启用一个 以</Location>结尾的配置段。<Location>配置段的处理位于<Directory>, .htaccess, <Files>之后,并依照在配置文件中出现的顺序进行处理。

<Location>配置段完全独立于文件系统之外操作。这有几个重要的后果。最重要的是<Location>不能用于针对文件系统的访问控制。因为可能会有几个不同的URL指向文件系统中的同一个文件,所以这样的控制常常会被很容易的绕过。

何时使用<Location>?
使用<Location>来将指令应用于独立于文件系统之外的内容。文件系统之内的内容请使用<Directory>和<Files>指令。不过一个例外是<Location /> ,它可以方便的作用于所用URL。

对所有的原始(非代理)请求来说,匹配的URL应该是具有"/path/"形式的URL路径。不包括访问方法、主机名、端口或查询字符串等。对于代理的请求,匹配的URL必须为"scheme://servername/path"的形式,而且必须包括前缀。

URL可以用一个通配符字符串来进行通配符的处理。"?"匹配任何单个的字符,而"*"匹配所有字符序列。

也可以附加"~"字符来表示使用正则表达式。例如:

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

将匹配所有包含字符串"/extra/data"或"/special/data"的URL。在Apache1.3及其后续版本中,加入了一个新的 推荐使用的<LocationMatch>指令,其功能与<Location>的正则表达式版本相同。

<Location>的功能在与SetHandler指令联用时能发挥最大效能。比如启用状态请求,但仅对来自foo.com的用户起效,您可以这样使用:

<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>

请注意"/"(斜线)

斜线字符根据它在URL中出现的位置不同有着特殊的意义。大家可能都已经习惯在文件系统中,多个连续的斜线会被作为单一的斜线处理(例 如"/home///foo"与"/home/foo"相同)。但在URL里面,这样是行不通的。<LocationMatch>指令和正则 表达式版本的<Location>要求您明确使用多重斜线。比如:<LocationMatch ^/abc>将匹配请求"/abc"但不会匹配请求"//abc"。而非正则表达式版本的<Location>指令在用于代理请求时, 也有类似表现。但当非正则表达式版本的<Location>作用于非代理请求时,它会将多个毗邻的斜线认作单个斜线。比如,如果您指定 了<Location /abc/def>而请求是指向"/abc//def"的,那么它们就是匹配的。<LocationMatch> 指令

说明 将封装的指令作用于正则表达式匹配的URL
语法 <LocationMatch regex> ... </LocationMatch>
作用域 server config, virtual host
状态 核心(C)
模块 core

<LocationMatch>和<Location>指令相同,提供了基于URL的访问控制。但它使用正则表达式作为参数,而不是简单字符串。比如:

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

将匹配包含子串"/extra/data"或"/special/data"的URL。

LogLevel 指令
说明 控制错误日志的详细程度
语法 LogLevel level
默认值 LogLevel warn
作用域 server config, virtual host
状态 核心(C)
模块 core

LogLevel用于调整记录在错误日志中的信息的详细程度。(参见ErrorLog指令)。可以选择下列level,依照重要性降序排列:

Level 描述 例子
emerg 紧急(系统无法使用) "Child cannot open lock file. Exiting"
alert 必须立即采取措施 "getpwuid: couldn't determine user name from uid"
crit 致命情况 "socket: Failed to get a socket, exiting child"
error 错误情况 "Premature end of script headers"
warn 警告情况 "child process 1234 did not exit, sending another SIGHUP"
notice 一般重要情况 "httpd: caught SIGBUS, attempting to dump core in ..."
info 普通信息 "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..."
debug 调试信息 "Opening config file ..."

当指定了某个级别时,所有级别高于它的信息也会被同时记录。比如,指定 LogLevel info ,则所有notice和warn级别的信息也会被记录。

建议至少使用crit级别。

示例如下:

LogLevel notice

注意
当错误日志是一个单独分开的正式文件的时候,notice级别的消息总是会被记录下来,而不能被屏蔽。但是,当使用syslog来记录时就没有这个问题。

MaxKeepAliveRequests 指令
说明 一个持久链接中允许的最大请求数量
语法 MaxKeepAliveRequests number
默认值 MaxKeepAliveRequests 100
作用域 server config, virtual host
状态 核心(C)
模块 core

MaxKeepAliveRequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。

例如:

MaxKeepAliveRequests 500

NameVirtualHost 指令
说明 为一个基于域名的虚拟主机指定一个IP地址(和端口)
语法 NameVirtualHost addr[:port]
作用域 server config
状态 核心(C)
模块 core

如果您要配置基于域名的虚拟主机,NameVirtualHost指令就是您必须的指令之一。

尽管addr参数可以使用主机名,但建议您还是使用IP地址。比如:

NameVirtualHost 111.22.33.44

使用NameVirtualHost指令,您可以指定一个基于域名的虚拟主机将使用哪个IP地址来接受请求。在一个防火墙或是其它代理接受了请求并 把它转到服务器所在的另外一个IP地址上的情况下,您必须指定伺服请求的机器物理界面上的IP地址。如果您对于多个地址使用了多个基于域名的虚拟主机,您 应该为每个地址使用这个指令。

注意
"主服务器"和任何其它"_default_"服务器都不会伺服发送到NameVirtualHost IP地址的请求。(除非您指定了NameVirtualHost,但没有为这个地址指定任何VirtualHost)。

另外,您还可以为您使用的基于域名的虚拟主机指定一个端口号。比如:

NameVirtualHost 111.22.33.44:8080

IPv6地址必须封装在一对方括号内,如下例所示:

NameVirtualHost [2001:db8::a00:20ff:fea7:ccea]:8080

为了接受所有界面的请求,您可以使用"*":

NameVirtualHost *

<VirtualHost>指令的参数
请注意,<VirtualHost>指令的参数必须与NameVirtualHost指令的参数完全匹配。

NameVirtualHost 1.2.3.4
<VirtualHost 1.2.3.4>
# ...
</VirtualHost>

Options 指令
说明 配置在特定目录中可以使用哪些特性
语法 Options [+|-]option [[+|-]option] ...
默认值 Options All
作用域 server config, virtual host, directory, .htaccess
覆盖项 Options
状态 核心(C)
模块 core

Options指令控制了在特定目录中将使用哪些服务器特性。

option可以为None ,在这种情况下,将不启用任何额外特性。或设置为以下选项中的一个或多个:

All
除MultiViews之外的所有特性。这是默认设置。
ExecCGI
允许使用mod_cgi执行CGI脚本。
FollowSymLinks
服务器允许在此目录中使用符号连接。
注意:即使服务器会使用符号连接,但它不会改变用于匹配<Directory>段的路径名。

注意:如果此配置位于<Location>配置段中,则此设置会被忽略。

Includes
允许使用mod_include提供的服务器端包含。
IncludesNOEXEC
允许服务器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本。
Indexes
如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回由mod_autoindex生成的一个格式化后的目录列表。
MultiViews
允许使用mod_negotiation提供内容协商的"多重视图"(MultiViews)。
SymLinksIfOwnerMatch
服务器仅在符号连接与其目的目录或文件的拥有者具有相同的uid时才使用它。
注意
如果此配置出现在<Location>配置段中,此选项将被忽略。
一般来说,如果一个目录被多次设置了Options ,则最特殊的一个会被完全接受(其它的被忽略),而各个可选项的设定彼此并不融合(参见配置段的合并)。然而,如果所有作用于Options指令的可选项 前都加有"+"或"-"符号,此可选项将被合并。所有前面加有"+"号的可选项将强制覆盖当前的可选项设置,而所有前面有"-"号的可选项将强制从当前可 选项设置中去除。

比如,没有任何"+"或"-"符号:

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>

<Directory /web/docs/spec>
Options Includes
</Directory>

那么只有将Includes设置到/web/docs/spec目录上。然而如果第二个Options指令使用了"+"和"-"符号:

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>

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

那么就会有FollowSymLinks和Includes设置到/web/docs/spec目录上。

注意
使用 -IncludesNOEXEC 或 -Includes 时,不论前面如何设置,都会完全禁用服务器端包含。

没有其它设置时,默认设置为 All 。

Require 指令
说明 指定哪些认证用户允许访问该资源
语法 Require entity-name [entity-name] ...
作用域 directory, .htaccess
覆盖项 AuthConfig
状态 核心(C)
模块 core

这个指令指定哪些认证用户允许访问该资源。这些限制由授权支持模块实现。语法如下:

Require user userid [userid] ...
只有指定的用户可以访问此目录。
Require group group-name [group-name] ...
只有隶属于指定组的用户可以访问此目录。
Require valid-user
所有有效用户都可以访问此目录。
提供Require指令的授权支持模块有:mod_authz_user, mod_authz_groupfile, mod_authnz_ldap, mod_authz_dbm, mod_authz_owner 。

Require必须伴随AuthName和AuthType指令,以及诸如AuthUserFile和AuthGroupFile指令(用以定义用户和用户组)以确保其能够正确工作。例如:

AuthType Basic
AuthName "Restricted Resource"
AuthUserFile /web/users
AuthGroupFile /web/groups
Require group admin

使用这种方法提供的访问控制对所有方法都有效。这是一般情况下期望达到的效果。如果您仅希望对某个特定的方法加以限制,而不涉及其它方法时,您可以将Require语句放入<Limit>配置段中。

如果Require与Allow或Deny指令同时使用,那么这些指令之间的相互作用由Satisfy指令控制。

在子目录中删除访问控制
下面的例子展示了如何使用Satisfy指令在一个受保护的目录下的子目录中取消访问控制。使用这种方法必须十分小心,因为它取消了mod_authz_host实现的任何访问控制。

<Directory /path/to/protected/>

顶(0)
踩(0)

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

最新评论