Apache Web服务器资源使用限制配置

<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-GB" style="mso-ansi-language: en-gb">以下内容摘自笔者编著的<font color="#0000ff"><a href="http://www.dearbook.com.cn/book/129972"><font color="#0000ff">《网管员必读——网络应用》(第2版)</font></a>一书</font>:</span></chsdate>

<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-GB" style="mso-ansi-language: en-gb"></span></chsdate>

<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-GB" style="mso-ansi-language: en-gb">3.4.3</span></chsdate> Apache Web服务器资源使用限制配置

资源使用限制 就是要限制用户对网站特定资源 如目录、服务器硬件等 的访问。 相关指令包括: LimitRequestBody LimitRequestFields LimitRequestFieldSize LimitRequestLine RLimitCPU RLimitMEM RLimitNPROC ThreadStackSize

LimitRequest* 系列指令用来限制 Apache 在读取客户端请求的过程中使用的资源数量。通过限制这些值,可以减轻某些拒绝服务( DOS )攻击; RLimit* 系列指令限制被 Apache 子进程所派生的进程使用的资源数量,通常这些指令用来控制 CGI 脚本和 SSI exec 命令所使用的资源; ThreadStackSize 指令在某些平台上用来控制堆栈大小。

1LimitRequestBody

LimitRequestBody 指令限制客户端发送的 HTTP 请求体的最大字节长度。其语法格式为: LimitRequestBody Bytes Bytes 0 (意味着无限制)到 2 147 483 647 2GB )间限制了请求体所允许的字节数。默认值为“<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="”"><span lang="EN-US" style="mso-font-kerning: 0pt">0</span><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: " times="" new="">”</span></chmetcnv>

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

此指令给了服务器管理员更大的可控性,以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。比如,如果允许文件上传到某个位置,而且希望能将上传文件的大小设置为 100KB ,可以使用下面的指令:

LimitRequestBody 102400

2LimitRequestFields

LimitRequestFields 用来 限制接受客户端请求中 HTTP 请求头域的数量。其语法格式为: LimitRequestFields Number Number 是一个 0 (意味着不限)到 32 767 之间的整数。 默认值为“<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="100" unitname="”"><span lang="EN-US">100</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " times="" new="">”</span></chmetcnv> 默认值为编译时的常量 DEFAULT_LIMIT_REQUEST_FIELDS (发布值为 100 )。

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

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

LimitRequestFields 50

3LimitRequestFieldSize

LimitRequestFieldSize 指令用来 限制客户端发送的请求头的字节数。其语法格式为: LimitRequestFieldsize Bytes Bytes 指定了 HTTP 请求头允许的字节大小。默认值为“<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="8190" unitname="”"><span lang="EN-US">8190</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " times="" new="">”</span></chmetcnv>
LimitRequestFieldSize 指令允许服务器管理员增加,或减少 HTTP 请求头域大小的限制。一般来说,服务器需要此值足够大,以适应普通客户端的任何请求的头域大小。一个普通头域的大小对于不同的客户端来说是有很大差别的,一般与用户配置他们的浏览器以支持更多的内容协议密切相关。

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

LimitRequestFieldSize 4094

一般情况下,请不要改变这个设置,而是保持其默认设置。

4LimitRequestLine

LimitRequestLine 指令用来限制接收客户端发送的 HTTP 请求行的字节数。其语法格式为: LimitRequestLine Bytes Bytes 将设置 HTTP 请求行的字节数限制。默认值也为“<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="8190" unitname="”"><span lang="EN-US">8190</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " times="" new="">”</span></chmetcnv>

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

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

LimitRequestLine 4094

一般情况下,不需要改变此设置的默认值。

5RLimitCPU

RLimitCPU 指令用来 限制 Apache 子进程派生的进程占用 CPU 的最大秒数。 CPU 资源限制表示为每进程占用的秒数。 其语法格式为: RLimitCPU seconds|max [seconds|max] ,默认值未定义,使用操作系统默认值。

第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值,或是“ max ”,以表示设置为操作系统允许的最大值。增大此资源限制最大值需要以 root 运行服务器或是在初始化启动语句中进行设置。

这个限制将作用于 Apache 子进程服务的请求所衍生出来的进程,而不是 Apache 子进程本身。这个范围包括 CGI 脚本和 SSI 执行命令,但不包括所有从 Apache 父进程衍生出来的进程。比如,管道日志。

6RLimitMEM

RLimitMEM 指令用来 限制由 Apache 子进程派生的进程占用的最大内存字节数。 内存资源限制表示为每进程占用的字节数。 其语法格式为: RLimitMEM Bytes|max [Bytes|max] ,也没有定义默认值,使用操作系统默认值。
第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值,或是“ max ”,以表示设置为操作系统允许的最大值。增大此资源限制最大值需要以 root 运行服务器或是在初始化启动语句中进行设置。

这个限制将作用于 Apache 子进程服务的请求所衍生出来的进程,而不是 Apache 子进程本身。这个范围包括 CGI 脚本和 SSI 执行命令,但不包括所有从 Apache 父进程衍生出来的进程。比如,管道日志。

7RLimitNPROC

RLimitNPROC 指令用来 限制由 Apache 子进程派生的进程所派生的进程数目。 进程限制控制了每个用户的进程数。 其语法格式为: RLimitNPROC number|max [number|max] ,也没有定义默认值,使用操作系统默认值。
第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值,或是“ max ”,以表示设置为操作系统允许的最大值。增大此资源限制最大值需要以 administrator 账户 运行服务器或是在初始化启动语句中进行设置。

这个限制将作用于 Apache 子进程服务的请求所衍生出来的进程,而不是 Apache 子进程本身。这个范围包括 CGI 脚本和 SSI 执行命令,但不包括所有从 Apache 父进程衍生出来的进程。比如,管道日志。

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 42pt; HEIGHT: 31.5pt" type="#_x0000_t75"><imagedata o:title="注意" src="file:///D:/DOCUME~1/winda/LOCALS~1/Temp/msohtml1/01/clip_image001.jpg"></imagedata></shape>
如果 CGI 进程不是 Web 服务器的 uid 启动的,那么这个指令将限制服务器自己能够创建的进程数目。此种情况将在 error_log 中以“ cannot fork 进行记录。

8ThreadStackSize

ThreadStackSize 指令用来 处理客户端连接的线程使用的栈尺寸(字节)。其语法格式为: ThreadStackSize size ,在 NetWare 系统中默认值为 65 536 ;其他系统中等于操作系统默认值。
ThreadStackSize 指令设置了处理客户端连接(包括调用模块以协助处理)的线程允许使用的最大栈尺寸(字节 )。 在大多数情况下,操作系统默认的栈尺寸很合理,但是在某些情况下,需要调整这个值。如,在默认栈尺寸较小的平台上(比如 HP-UX ), Apache 可能会在使用一些需要较大栈尺寸的第三方模块时崩溃。这样的问题可以通过将 ThreadStackSize 设置为一个较大的值来解决。这种调整应当仅仅在第三方模块提供者明确要求的情况下才需要,或者是通过诊断确定是由于栈空间太小而导致崩溃。

而在某些平台上,如果默认的栈空间大于服务器运行所需空间,那么将 ThreadStackSize 值降低到小于操作系统默认值可以让每个进程中允许生成的最大线程数量增加。这种类型的调整应该仅在测试环境中使用,并且对所有服务器进程进行充分的测试,因为处理某些罕见的请求需要较大的栈空间。一个很小的服务器配置变化就有可能使得当前的 ThreadStackSize 设置变得不合适。

你可能感兴趣的:(apache)