快捷搜索:   nginx

apache核心指令解说(四)

RLimitMEM 指令
说明 限制由Apache子进程派生的进程占用的最大内存字节数
语法 RLimitMEM bytes|max [bytes|max]
默认值 未定义,操作系统默认值
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core

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

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

内存资源限制表示为每进程占用的字节数。

RLimitNPROC 指令
说明 限制由Apache子进程派生的进程所派生的进程数目
语法 RLimitNPROC number|max [number|max]
默认值 未定义,使用操作系统默认值
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core

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

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

进程限制控制了每个用户的进程数。

注意
如果CGI进程不是以web服务器的uid启动的,那么这个指令将限制服务器自己能够创建的进程数目。此种情况将在error_log中以"cannot fork"进行记录。

Satisfy 指令
说明 主机级别的访问控制和用户认证之间的相互关系
语法 Satisfy Any|All
默认值 Satisfy All
作用域 directory, .htaccess
覆盖项 AuthConfig
状态 核心(C)
模块 core
兼容性 2.0.51及以后版本中受<Limit>和<LimitExcept>指令影响

同时使用Allow和Require时的访问策略。参数可以设置为 All 或 Any 。这个指令仅在某个特定区域的访问控制同时被用户名/密码和客户端主机地址进行限定的时候起作用。默认行为(All)采取客户端首先通过地址访问限制并且 输入有效的用户名和密码的方式。使用可选项 Any 将使客户端在通过主机限制或是输入一个有效的用户名和密码两种方式之一得到访问权限。这样,就可以通过密码来限制一个区域的访问,但允许某些特定地址的客 户端访问时不需要输入密码。

比如,如果您想让您局域网内的用户访问您的web网站时不受限制,但局域网外的用户需提供密码才能进行访问,您可以采取类似如下的配置:

Require valid-user
Allow from 192.168.1
Satisfy Any

从2.0.51版本开始,Satisfy指令可以被限定于由<Limit>和<LimitExcept>配置段指定的特定的方法。

ScriptInterpreterSource 指令
说明 定位CGI脚本解释器
语法 ScriptInterpreterSource Registry|Registry-Strict|Script
默认值 ScriptInterpreterSource Script
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 仅用于Win32;Registry-Strict选项仅在 Apache 2.0 及以后的版本中可用

这个指令控制Apache如何找到运行CGI脚本的解释器。默认为Script ,使用在脚本中以"#!"行指定的解释器。在Win32上这一行通常看上去像:

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

或者,如果perl的位置已经在PATH中指定,则可以简单的写成:

#!perl

设置为 ScriptInterpreterSource Registry 将使用脚本文件扩展名(比如.pl)作为搜索项对Windows注册表项HKEY_CLASSES_ROOT进行搜索。 这个命令由注册表子键Shell\ExecCGI\Command或Shell\Open\Command定义(如果前者不存在)。如果无法找到该注册表 项,Apache将采用默认值:Script 。

安全
将 ScriptInterpreterSource Registry 和使用了ScriptAlias的目录一起使用时需要非常小心,因为Apache会执行这个目录下的所有文件。Registry设置可能会导致对不可执行 文件的不期望的程序调用。例如,在大多数Windows上默认打开.htm文件的程序是IE,所以任何一个对脚本目录中.htm文件的请求将会在服务器后 台打开一个IE。这是一个让你的服务器在数分钟内崩溃的好办法。

Registry-Strict选项和Registry差不多,但是只使用Shell\ExecCGI\Command子键。ExecCGI键不是一个普通的键。它必须在注册表中手动配置,从而可以防止意外的程序调用。

ServerAdmin 指令
说明 服务器返回给客户端的错误信息中包含的管理员邮件地址
语法 ServerAdmin email-address|URL
作用域 server config, virtual host
状态 核心(C)
模块 core

ServerAdmin设置了在所有返回给客户端的错误信息中包含的管理员邮件地址。如果httpd不能将提供的参数识别为URL,它就会假定它是 一个email-address ,并在超连接中用在mailto:后面。推荐使用一个Email地址,因为许多CGI脚本是这样认为的。如果你确实想使用URL,一定要保证指向一个你能 够控制的服务器,否则用户将无法确保一定可以和你取得联系。

为这个目的专门设置一个邮箱是值得的,比如:

ServerAdmin

因为用户一般不会注意到他们在讨论服务器的问题!

ServerAlias 指令
说明 匹配一个基于域名的虚拟主机的别名
语法 ServerAlias hostname [hostname] ...
作用域 virtual host
状态 核心(C)
模块 core

ServerAlias指令设定主机的别名,用于基于域名的虚拟主机。

<VirtualHost *>
ServerName server.domain.com
ServerAlias server server2.domain.com server2
# ...
</VirtualHost>

ServerName 指令
说明 服务器用于辨识自己的主机名和端口号
语法 ServerName [scheme://]fully-qualified-domain-name[:port]
作用域 server config, virtual host
状态 核心(C)
模块 core
兼容性 在2.0版中,这个指令代替了1.3版的Port指令的功能;scheme仅在2.2.3及之后的版本中可用。

ServerName指令设置了服务器用于辨识自己的主机名和端口号。这主要用于创建重定向URL。比如,一个放置web服务器的主机名为simple.example.com ,但同时有一个DNS别名 。而您希望web服务器更显著一点,您可以使用如下的指令:

ServerName

当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。如果在ServerName中没有指定端口号,服务器会使用接受请求的那个端口。为了加强可靠性和可预测性,您应该使用ServerName显式的指定一个主机名和端口号。

如果使用的是基于域名的虚拟主机,在<VirtualHost>段中的ServerName将是为了匹配这个虚拟主机,在"Host:"请求头中必须出现的主机名。

可选的'scheme://'前缀仅在2.2.3以后的版本中可用,用于在代理之后或离线设备上也能正确的检测规范化的服务器URL。

参见UseCanonicalName和UseCanonicalPhysicalPort指令以获得关于自引用URL(比如使用mod_dir模块)是需要指定一个特定端口,还是使用客户端请求的端口号的更详细的信息。

ServerPath 指令
说明 为兼容性不好的浏览器访问基于域名的虚拟主机保留的URL路径名
语法 ServerPath URL-path
作用域 virtual host
状态 核心(C)
模块 core

ServerPath指令为主机设置了保守的(legacy)URL路径名,用于和基于域名的虚拟主机配合使用。

ServerRoot 指令
说明 安装服务器的基础目录
语法 ServerRoot directory-path
默认值 ServerRoot /usr/local/apache
作用域 server config
状态 核心(C)
模块 core

ServerRoot指令设置了服务器所在的目录。一般来说它将包含conf/和logs/子目录。其它配置文件的相对路径即基于此目录 (比如Include或LoadModule)。

示例
ServerRoot /home/httpd

ServerSignature 指令
说明 配置服务器生成页面的页脚
语法 ServerSignature On|Off|EMail
默认值 ServerSignature Off
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心(C)
模块 core

ServerSignature指令允许您配置服务器端生成文档的页脚(错误信息、mod_proxy的ftp目录列表、mod_info的输 出)。您启用这个页脚的原因主要在于处于一个代理服务器链中的时候,用户基本无法辨识出究竟是链中的哪个服务器真正产生了返回的错误信息。

默认的 Off 设置没有错误行(这样便与Apache1.2及更旧版本兼容)。采用 On 会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而 EMail 设置会如文档中说明的那样额外创建一个指向ServerAdmin的"mailto:"部分。

对于2.0.44以后的版本,显示的详细服务器版本号将由ServerTokens指令控制。

ServerTokens 指令
说明 配置"Server:"应答头
语法 ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
默认值 ServerTokens Full
作用域 server config
状态 核心(C)
模块 core

这个指令控制了服务器回应给客户端的"Server:"应答头是否包含关于服务器操作系统类型和编译进的模块描述信息。

ServerTokens Prod[uctOnly]
服务器会发送(比如): Server: Apache
ServerTokens Major
服务器会发送(比如): Server: Apache/2
ServerTokens Minor
服务器会发送(比如): Server: Apache/2.0
ServerTokens Min[imal]
服务器会发送(比如): Server: Apache/2.0.41
ServerTokens OS
服务器会发送(比如): Server: Apache/2.0.41 (Unix)
ServerTokens Full (或未指定)
服务器会发送(比如): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
此设置将作用于整个服务器,而且不能用在虚拟主机的配置段中。

2.0.44版本以后,这个指令还控制着ServerSignature指令的显示内容。

SetHandler 指令
说明 强制所有匹配的文件被一个指定的处理器处理
语法 SetHandler handler-name|None
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 在Apache2.0中移入核心

当这个指令放入.htaccess或<Directory>或<Location>配置段中时,这个指令将强制所有匹配的 文件通过handler-name指定的处理器处理。比如:如果想不管某个目录中的文件具有什么扩展名,都将它作为图像映射规则文件来解析,您可以将下例 放入那个目录的.htaccess中:

SetHandler imap-file

再来一个例子:如果您想当被请求时,服务器显示一个状态报告,您可以将下面的语句放入httpd.conf里面:

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

你可以通过使用 None 来改写一个早先定义的SetHandler指令。

SetInputFilter 指令
说明 设置处理客户端请求和POST输入时使用的过滤器
语法 SetInputFilter filter[;filter...]
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core

SetInputFilter指令为服务器接受并处理客户端请求和POST输入设置了过滤器。这是在其它地方(包括AddInputFilter指令)设置的过滤器以外附加的过滤器。

如果设置了多于一个过滤器,它们必须按照处理内容的顺序用分号(;)分隔。

SetOutputFilter 指令
说明 设置用于处理服务器输出应答的过滤器
语法 SetOutputFilter filter[;filter...]
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core

SetOutputFilter指令设置了用于在服务器应答发送到客户端之前使用的过滤器。这是在其它地方(包括AddOutputFilter指令)设置的过滤器以外附加的过滤器。

例如:下述配置将会把/www/data/目录下的所有文件作为SSI文件来处理。

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

如果设置了多于一个过滤器,它们必须按照处理内容的顺序用分号(;)分隔。

TimeOut 指令
说明 服务器在断定请求失败前等待的秒数
语法 TimeOut seconds
默认值 TimeOut 300
作用域 server config
状态 核心(C)
模块 core

TimeOut指令用于设置Apache等待以下三种事件的时间长度:

接受一个GET请求耗费的总时间。
POST或PUT请求时,接受两个TCP包之间的时间。
应答时TCP包传输中两个ACK包之间的时间。
我们计划在发展里程中,逐步把它们分别变得更易配置。计时器在1.2版本之前的默认值为1200,而现在已经设置为300了,但对于绝大多数情况来说仍是足够的。没有把它默认值设的更小的原因在于代码里还有点问题:有时发送一个包之后,计时器没有复位。

TraceEnable 指令
说明 确定如何处理TRACE请求
语法 TraceEnable [on|off|extended]
默认值 TraceEnable on
作用域 server config
状态 核心(C)
模块 core
兼容性 仅在 Apache 1.3.34, 2.0.55 及以后的版本中可用

这个指令同时决定了核心和mod_proxy模块如何处理TRACE请求。默认(TraceEnable on)允许处理RFC2616定义的禁止附带任何请求体的TRACE请求。TraceEnable off 则使核心和mod_proxy模块向客户端返回一个"405"(禁止的方法)错误。

最后,为了测试和诊断,可以设置"TraceEnable extended"以允许附带请求体。核心(原始服务器)将会将请求体大小限制为64k以下(如果使用了 Transfer-Encoding: chunked 头,可以再为HTTP头增加8k)。核心会同时限制应答头和应答体;代理服务器则没有对请求体加以64k的限制。

UseCanonicalName 指令
说明 配置服务器如何确定它自己的域名
语法 UseCanonicalName On|Off|DNS
默认值 UseCanonicalName Off
作用域 server config, virtual host, directory
状态 核心(C)
模块 core

在很多情况下,Apache必须构造一个自引用URL(即一个指回相同服务器的URL)。使用 UseCanonicalName On 会将ServerName这个域名用于所有自引用URL、SERVER_NAME、CGI中的SERVER_PORT 。

设置为 UseCanonicalName Off 时,如果客户端提供了主机名和端口(否则将如上所述使用标准域名),Apache将会使用这些信息来构建自引用URL。这些值与用于实现基于域名的虚拟主 机的值相同,并且对于同样的客户端可用。CGI变量SERVER_NAME和SERVER_PORT也会由客户端提供的值来构建。

用这样的方式成功解决问题的例子如下:在一个局域网内,您想让连接主机的用户使用诸如www这样的短域名进行访问。您会注意到,如果用户键入了类似这 样的短域名和目录的URL,并且没有最后的斜线,Apache会将他们重定向到htp://www.domain.com/splat/。如果您在这个目 录上启用了身份验证,这会导致用户必须进行两次验证:一次针对www而另外一次针对ww.domain。com。但如果UseCanonicalName 设为 Off ,Apache就会重定向到。

第三个可选项是 UseCanonicalName DNS ,用于为大量基于IP的虚拟主机支持那些古董级的不提供"Host:"头的浏览器使用。使用这个选项时,Apache将对客户端连入的服务器的IP地址进行反向DNS查询,以构建自引用URL。

警告
如果CGI对SERVER_NAME的值作出了假定,它们会被此选项破坏。客户端对于给出它们想要的主机名这样的行动是完全不受限制的。但如果CGI仅使用SERVER_NAME来构建自引用的URL,它们会工作的很好。

UseCanonicalPhysicalPort 指令
说明 配置服务器如何确定自己的端口
语法 UseCanonicalPhysicalPort On|Off
默认值 UseCanonicalPhysicalPort Off
作用域 server config, virtual host, directory
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.2.0 及以后的版本中可用

在很多情况下,Apache必须构造一个自引用URL(即一个指回相同服务器的URL)。在 UseCanonicalPhysicalPort On 的时候,Apache将有可能在构造服务器的规范端口时为了符合UseCanonicalName指令而使用实际的物理端口号(physical port)。在 UseCanonicalPhysicalPort Off 的时候,Apache将不会使用实际的物理端口号,而是依赖所有已经配置的信息来构造一个合法的端口号。

注意
决定使用物理端口号的次序如下:

UseCanonicalName On

Servername指定的端口号
物理端口号
默认端口号
UseCanonicalName Off | DNS
"Host:"请求头提供的端口号
物理端口号
Servername指定的端口号
默认端口号
在 UseCanonicalPhysicalPort Off 的情况下,物理端口号将会从上述顺序中剔除。

<VirtualHost> 指令
说明 包含仅作用于指定主机名或IP地址的指令
语法 <VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
作用域 server config
状态 核心(C)
模块 core

<VirtualHost>和</VirtualHost>用于封装一组仅作用于特定虚拟主机的指令。任何在虚拟主机配置 中可以使用的指令也同样可以在这里使用。当服务器接受了一个特定虚拟主机的文档请求时,它会使用封装在<VirtualHost>配置段中的 指令。Addr可以是:

虚拟主机的IP地址
虚拟主机IP地址对应的完整域名
字符"*",仅与"NameVirtualHost *"配合使用以匹配所有的IP地址
字符串"_default_",与基于IP的虚拟主机联用以捕获所有没有匹配的IP地址
示例
<VirtualHost 10.1.2.3>
ServerAdmin
DocumentRoot /www/docs/host.foo.com
ServerName host.foo.com
ErrorLog logs/host.foo.com-error_log
TransferLog logs/host.foo.com-access_log
</VirtualHost>

IPv6的地址必须放入方括号中指定,否则作为可选项的端口号将无法确定。一个IPv6的示例如下:

顶(0)
踩(0)

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

最新评论