本文出自 “王达博客” 博客,转载请与做者联系!html
做者已受权本博客转载浏览器
3.4.3
Apache Web服务器资源使用限制配置
“资源使用限制”就是要限制用户对网站特定资源(如目录、服务器硬件等)的访问。相关指令包括:LimitRequestBody、LimitRequestFields、LimitRequestFieldSize、LimitRequestLine、RLimitCPU、RLimitMEM、RLimitNPROC和ThreadStackSize。
LimitRequest*系列指令用来限制Apache在读取客户端请求的过程当中使用的资源数量。经过限制这些值,能够减轻某些拒绝服务(DOS)***;RLimit*系列指令限制被Apache子进程所派生的进程使用的资源数量,一般这些指令用来控制CGI脚本和SSI exec命令所使用的资源;ThreadStackSize指令在某些平台上用来控制堆栈大小。
1.LimitRequestBody
LimitRequestBody指令限制客户端发送的HTTP请求体的最大字节长度。其语法格式为:LimitRequestBody Bytes,Bytes在0(意味着无限制)到2 147 483 647(2GB)间限制了请求体所容许的字节数。默认值为“
0”
。
LimitRequestBody指令可让用户在其做用范围内(整个服务器、特定目录、特定文件、特定位置)设置一个容许客户端发送的HTTP请求体的最大字节长度的限制。若是客户端的请求超出了这个限制,服务器会回应一个错误,而不是为这个请求继续提供服务。一个普通请求的信息体在很大程度上取决于资源的天然属性和这个资源容许的方法。CGI脚本常常用消息体把表单的信息传递给服务器。使用PUT方法至少可以获得与服务器指望从这个资源获得的信息量差很少大小的值。
此指令给了服务器管理员更大的可控性,以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务***。好比,若是容许文件上传到某个位置,并且但愿能将上传文件的大小设置为100KB,可使用下面的指令:
LimitRequestBody 102400
2.LimitRequestFields
LimitRequestFields用来限制接受客户端请求中HTTP请求头域的数量。其语法格式为:LimitRequestFields Number,Number是一个0(意味着不限)到32 767之间的整数。默认值为“
100”
。默认值为编译时的常量DEFAULT_LIMIT_REQUEST_FIELDS(发布值为100)。
LimitRequestFields指令容许服务器管理员修改在一个HTTP请求中的请求头域的数量限制。服务器须要此值大于一个普通客户端请求中包含头域的数量。一个客户端请求头域的数量不多大于20,但根据客户端的不一样这个数字有很大的差异,常常取决于用户配置他们的浏览器扩展以支持更详细的内容协商。可选的HTTP扩展常用请求头域来实现。
这个指令给了服务器管理员更大的可控性,以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务***。若是正常使用的客户端获得了服务器的错误应答,指出其在请求中发送了过多的头域,你应该适当地增大此值。例如:
LimitRequestFields 50
3.LimitRequestFieldSize
LimitRequestFieldSize指令用来限制客户端发送的请求头的字节数。其语法格式为:LimitRequestFieldsize Bytes,Bytes指定了HTTP请求头容许的字节大小。默认值为“
8190”
。
LimitRequestFieldSize指令容许服务器管理员增长,或减小HTTP请求头域大小的限制。通常来讲,服务器须要此值足够大,以适应普通客户端的任何请求的头域大小。一个普通头域的大小对于不一样的客户端来讲是有很大差异的,通常与用户配置他们的浏览器以支持更多的内容协议密切相关。
这个指令给了服务器管理员更大的可控性,以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务***。例如:
LimitRequestFieldSize 4094
通常状况下,请不要改变这个设置,而是保持其默认设置。
4.LimitRequestLine
LimitRequestLine指令用来限制接收客户端发送的HTTP请求行的字节数。其语法格式为:LimitRequestLine Bytes,Bytes将设置HTTP请求行的字节数限制。默认值也为“
8190”
。
LimitRequestLine指令容许服务器管理员增长或减小客户端HTTP请求行容许大小的限制。由于请求行包括HTTP方法、URI、协议版本,因此LimitRequestLine指令会限制请求URI的长度。服务器会须要这个值足够大以装载它全部的资源名,包括可能在GET请求中所传递的查询部分的全部信息。
这个指令也给了服务器管理员更大的可控性,以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务***。例如:
LimitRequestLine 4094
通常状况下,不须要改变此设置的默认值。
5.RLimitCPU
RLimitCPU指令用来限制Apache子进程派生的进程占用CPU的最大秒数。CPU资源限制表示为每进程占用的秒数。其语法格式为:RLimitCPU seconds|max [seconds|max],默认值未定义,使用操做系统默认值。
第一个参数设置了全部进程的软资源限制,第二个参数设置了最大资源限制。两个参数都可设置为一个数值,或是“max”,以表示设置为操做系统容许的最大值。增大此资源限制最大值须要以root运行服务器或是在初始化启动语句中进行设置。
这个限制将做用于Apache子进程服务的请求所衍生出来的进程,而不是Apache子进程自己。这个范围包括CGI脚本和SSI执行命令,但不包括全部从Apache父进程衍生出来的进程。好比,管道日志。
6.RLimitMEM
RLimitMEM指令用来限制由Apache子进程派生的进程占用的最大内存字节数。内存资源限制表示为每进程占用的字节数。其语法格式为:RLimitMEM Bytes|max [Bytes|max],也没有定义默认值,使用操做系统默认值。
第一个参数设置了全部进程的软资源限制,第二个参数设置了最大资源限制。两个参数都可设置为一个数值,或是“max”,以表示设置为操做系统容许的最大值。增大此资源限制最大值须要以root运行服务器或是在初始化启动语句中进行设置。
这个限制将做用于Apache子进程服务的请求所衍生出来的进程,而不是Apache子进程自己。这个范围包括CGI脚本和SSI执行命令,但不包括全部从Apache父进程衍生出来的进程。好比,管道日志。
7.RLimitNPROC
RLimitNPROC指令用来限制由Apache子进程派生的进程所派生的进程数目。进程限制控制了每一个用户的进程数。其语法格式为:RLimitNPROC number|max [number|max],也没有定义默认值,使用操做系统默认值。
第一个参数设置了全部进程的软资源限制,第二个参数设置了最大资源限制。两个参数都可设置为一个数值,或是“max”,以表示设置为操做系统容许的最大值。增大此资源限制最大值须要以administrator帐户运行服务器或是在初始化启动语句中进行设置。
这个限制将做用于Apache子进程服务的请求所衍生出来的进程,而不是Apache子进程自己。这个范围包括CGI脚本和SSI执行命令,但不包括全部从Apache父进程衍生出来的进程。好比,管道日志。
|
若是CGI进程不是以Web服务器的uid启动的,那么这个指令将限制服务器本身可以建立的进程数目。此种状况将在error_log中以“cannot fork”进行记录。
|
8.ThreadStackSize
ThreadStackSize指令用来处理客户端链接的线程使用的栈尺寸(字节)。其语法格式为:ThreadStackSize size,在NetWare系统中默认值为65 536;其余系统中等于操做系统默认值。
ThreadStackSize指令设置了处理客户端链接(包括调用模块以协助处理)的线程容许使用的最大栈尺寸(字节)。在大多数状况下,操做系统默认的栈尺寸很合理,可是在某些状况下,须要调整这个值。如,在默认栈尺寸较小的平台上(好比HP-UX),Apache可能会在使用一些须要较大栈尺寸的第三方模块时崩溃。这样的问题能够经过将ThreadStackSize设置为一个较大的值来解决。这种调整应当仅仅在第三方模块提供者明确要求的状况下才须要,或者是经过诊断肯定是因为栈空间过小而致使崩溃。
而在某些平台上,若是默认的栈空间大于服务器运行所需空间,那么将ThreadStackSize值下降到小于操做系统默认值可让每一个进程中容许生成的最大线程数量增长。这种类型的调整应该仅在测试环境中使用,而且对全部服务器进程进行充分的测试,由于处理某些罕见的请求须要较大的栈空间。一个很小的服务器配置变化就有可能使得当前的ThreadStackSize设置变得不合适。服务器