IBM HTTP Server 帮助:FastCGI 伪指令

FastCGI 伪指令

FastCgiAccessChecker

FastCgiAccessChecker 伪指令用于将 FastCGI 应用程序定义为每个目录的访问验证器。Apache 访问阶段先于用户认证,因此允许或(不允许)对所请求资源进行访问的决策基于随同此请求一起提交的 HTTP 报头。当具有访问验证决策的动态组件(如一天中的某一时刻,或域的帐户是否为最新)时,基于认证器的 FastCGI 是最有用的。

如果 FastCGI 应用程序文件名没有相应的静态或外部服务器定义,则它将作为动态的 FastCGI 应用程序启动。如果文件名不是以斜杠 (/) 开头,则假设它相对于 ServerRoot。

FastCgiAccessChecker 在 DirectortLocation 容器中使用。

<Directory htdocs/protected>
FastCgiAccessChecker fcgi-bin/access-checker
</Directory>

通常情况下,mod_fastcgi 发送几乎所有可用于 CGI/FastCGI 请求处理程序的标准环境变量。所 有由 FastCGI 访问检查器应用程序在成功响应中(状态:200)返回的报头都将作为环境变量发送给子 处理程序(CGI/FastCGI 调用)。所有未成功响应中返回的报头将发送到客户机上。通过使用 "-compat" 选项可以获得 FastCGI 规范所适应的行为。

mod_fastcgi 将环境变量 "FCGI_APACHE_ROLE" 设置为 "ACCESS_CHECKER",以表明执行哪个(Apache 特定的)认证器阶段。

不支持从 FastCGI 认证应用程序中定制失败响应。请查看 ErrorDocument 伪指令,以获得替代办法(FastCGI 应用程序可以为文档提供服务)。

FastCgiAccessCheckerAuthoritative

如果 FastCGI 应用程序认证允许访问失败,则明确将 FastCgiAuthenticatorAuthoritative 伪指令设置为 Off,以允许 将访问检查发送给较低级的模块(如在 Configuration 和 modules.c 文件中所定义的)。

缺省情况下,不发送控制,并且在“禁用的”回答中产生一个失败的访问检查。 请慎用禁用的缺省。

FastCgiAuthenticator

FastCgiAuthenticator 伪指令用于将 FastCGI 应用程序定义为每个目录的认证器。 认证器通过将所提供的用户名和口令与已知用户和口令的列表或数据库相匹配,以验证请求者的身份。 当用户数据库在现有的独立程序中被维护或驻留在除 Web 服务器以外的机器上时,基于认证器的 FastCGI 是最有用的。

如果 FastCGI 应用程序文件名没有相应的静态或外部服务器定义,则它将作为动态的 FastCGI 应用程序启动。如果文件名不是以斜杠 (/) 开头,则假设它相对于 ServerRoot

FastCgiAuthenticator 在 DirectoryLocation 容器中使用,并且必须包含 AuthType 和 AuthName 伪指令。仅支持“基本”用户认证类型。 为了能够正确工作,其必须带有 require 或 FastCgiAuthorizer 伪指令。

<Directory htdocs/protected>
AuthType Basic
AuthName ProtectedRealm
FastCgiAuthenticator fcgi-bin/authenticator
require valid-user
</目录>

通常情况下,mod_fastcgi 发送几乎所有可用于 CGI/FastCGI 请求处理程序的标准环境变量。 所有由 FastCGI 认证应用程序在成功响应中(状态:200)返回的报头将作为环境变量发送给子处理程序(CGI/FastCGI 调用)。 所有未成功响应中返回的报头将发送到客户机上。通过使用 "-compat" 选项可以获得 FastCGI 规范适应的行为。

Mod_fastcgi 将环境变量 "FCGI_APACHE_ROLE" 设置为 "AUTHENTICATOR_CHECKER",以表明执行哪个(Apache 特定的)认证器阶段。

不支持从 FastCGI 认证应用程序中定制失败响应。请查看 ErrorDocument 伪指令以获得替代办法(FastCGI 应用程序可以为文档提供服务)。

FastCgiAuthenticatorAuthoritative

如果 FastCGI 应用程序认证用户失败,则明确将 FastCgiAuthenticatorAuthoritative 伪指令设置为 Off,以将认证发送到较低级的模块(如在 Configurationmodules.c 文件中所定义的)。

此伪指令的公共用法是与包含一些(与管理相关的)用户的受保护 AuthUserFile 相关联。

缺省情况下,不发送控制,并且在“认证所需的”回答中产生一个未知用户。请慎用禁用的缺省。

FastCgiAuthorizer

FastCgiAuthorizer 伪指令用于将 FastCGI 应用程序定义为每个目录的认证器。 认证器确认是否允许所认证的用户访问请求的资源。当具有认证决策的动态组件(如一天的某一时刻,或用户是否支付他的帐单)时,基于认证器的 FastCGI 是最有用的。

如果 FastCGI 应用程序文件名没有相应的静态或外部服务器定义,则它将作为动态 FastCGI 应用程序启动。如果文件名不是以斜杠 (/) 开头,则假设它相对于 ServerRoot

FastCgiAuthorizerDirectoryLocation 容器内使用,并必须包含 AuthType 和 AuthName 伪指令。为了能够正确工作,它必须带有一条认证伪指令(如 FastCgiAuthenticator、AuthUserFile、AuthDBUserFile 或 AuthDBMUserFile)。

.

<Directory htdocs/protected>
AuthType Basic
AuthName ProtectedRealm
AuthDBMUserFile conf/authentication-database
FastCgiAuthorizer fcgi-bin/authorizer
</Directory>

通常情况下,mod_fastcgi 发送几乎所有可用于 CGI/FastCGI 请求处理程序的标准环境变量。所有由 FastCGI 认证应用程序在成功响应中(状态:200)返回的报头将作 为环境变量发送给子处理程序(CGI/FastCGI 调用)。所有未成功响应中返回的报头将发送到客户机上。通 过使用 "-compat" 可以获得 FastCGI 规范适应的行为。

Mod_fastcgi 将环境变量 "FCGI_APACHE_ROLE" 设置为 "AUTHORIZER",以表明执行哪个(Apache 特定的)认证器阶段。

不支持从 FastCGI 认证应用程序中定制失败响应。请查看 ErrorDocument 伪指令以获得替代办法(FastCGI 应用程序可以为文档提供服务)。

FastCgiAuthorizerAuthoritative

如果 FastCGI 应用程序认证用户失败,则明确将 FastCgiAuthenticatorAuthoritative 伪指令设置为 Off,以将认证发送到较低级的模块(如在 Configurationmodules.c 文件中所定义的)。

此伪指令的公共用法是与包含一些(与管理相关的)用户的受保护 AuthUserFile 相关联。

缺省情况下,不发送控制,并且在“认证所需的”回答中产生一个未知用户。请慎用禁用的缺省。

FastCgiConfig

FastCgiConfig 伪指令为所有动态 FastCGI 应用程序定义缺省参数。该伪指令不以任何方式影响静态 或外部应用程序。

动态应用程序在服务器初始化时不启动,但是在需求时将启动。 如果需求很大,则启动其它应用程序实例。 由于需求的减弱,终止应用程序实例。许多选项控制此进程。

选项可以是以下之一(区分大小写):

appConnTimeout n (0 seconds)
等待到 FastCGI 应用程序的连接完成的秒数,或者 0 表明应该使用分块的 connect()。如果超时到期,则产生 SERVER_ERROR。对于非 0 值,这是在 select() 中用于写入由非分块的 connect() 所返回文件描述符所需的时间。非分块 的 connect() 在许多平台上都存在问题。另见 -idle-timeout,它会产生相似的结果,但是以更简便的方式表示。
idle-timeout n (30 seconds)
在异常终止请求和(在 error LogLevel 上)记录事件前,允许 FastCGI 应用程序处于不活动状态的秒数。只有当暂挂 FastCGI 应用程序的连接时,才应用不活动定时器。如果请 求进入应用程序的请求队列,但是应用程序在此期间没有应答(通过写或刷新)时,将异常终止请求。如果与应用程序的通信已完成,但是与客户机的通信还未完成(响应被缓冲)时,将不应用超时。
autoUpdate none
此选项使 mod_fastcgi 在处理每个请求前,检查磁盘上应用程序的存放时间。如果应用程序是最新的,则通 知进程管理器,并终止所有正在运行的应用程序的实例。一般情况下,最好将此类型的功能内置到应用程序中( 例如,每 100 个请求后,它会检查在磁盘上是否有更新的版本,如果有就退出)。 当此选项与 -restart 选项一起使用时,可能会存在未完成的问题(错误)。
gainValue n (0.5)
0 至 1 间的浮点值作为一个指数,用于计算当前所运行动态 FastCGI 应用程序按指数规律减少的连接数负荷因子。由 (1 - gainValue) 调节旧值,所以与当前值(由 gainValue 调节)相比较时,该值越小,它的权值就越重。
initial-env name[=value] none
当应用程序的实例产生时,在初始环境中发送名称-值对。要从 Apache 环境发送变量,不要提供 "="(如果变量实际上不在环境中,则它的定义不带任何值)。要定义不带任何值的变量,提供不带任何值的 "="。此选项可以重复使用。
init-start-delay n (1 second)
此应用程序各实例产生之间的最小秒数。此延迟减少了服务器初始化时系统发出的需求。
killInterval n (300 seconds)
killInterval 确定了在进程管理器内实现动态应用程序实例杀死策略的频率。较低的数导致高活跃策略,较高的数导致低活跃策略。
listen-queue-depth n (100)
此应用程序的所有实例共享的 listen() 队列(也可认为是备用)深度。较深的侦听队列允许服务器处理瞬时装入波动,而无需拒绝请求;它不会增加吞吐量。添加其它应用程序实例可能增加吞吐量/性能,其取决于应用程序和主机。
maxClassProcesses n (10)
允许为任何一个 FastCGI 应用程序运行的最大动态 FastCGI 应用程序实例数。
maxProcesses n (50)
在同一时刻允许运行的最大动态 FastCGI 应用程序实例总计数。
minProcesses n (5)
在同一时刻允许运行,且无须由进程管理器终止的最大动态 FastCGI 应用程序总计数。
multiThreshhold n (50)
0 至 100 间的整数用于确定是否应该终止任意一个 FastCGI 应用程序实例。如果应用程序当前运行的不止一个实例 ,此属性将用于确定是否终止其中一个。如果仅保留一个实例,则使用 singleThreshhold 作为代替。
pass-header header none
发送请求环境中的 HTTP 请求报头名。此选项使得报头内容成为可用,通常此报头内容(例如 Authorization)对于 CGI 环境是不可用的。
priority n (0)
分配给应用程序实例的进程优先级(使用 setpriority())。
processSlack n (5 seconds)
如果当前运行的所有动态 FastCGI 应用程序的和数超出了 maxProcesses - processSlack,则进程管理器会调用杀死策略。这将在达到 maxProcesses 前,通过杀死一些最不活跃的应用程序实例,以提高高负荷下的性能。
restart none
此选项使进程管理器在发生故障时重新启动动态应用程序(与静态应用程序相似)。
restart-delay n (5 seconds)
产生此应用程序失败实例之间的最小秒数。此延迟避免了中断应用程序占用太多的系统资源。
singleThreshhold n (0)
0 至 100 间的整数用于确定是否可以终止 FastCGI 应用程序的最后一个实例。如果进程管理器所计算的应用程序 负载因子低于所指定的阈值,则终止最后一个进程。 为了使您的可执行程序在很长一段时间内以 "idle" 方式运行,您应该指定较接近 1 的值,然而,如果内存或 CPU 时间是主要因素,则较接近 100 的值是更适用的。0 值将不会终止应用程序的最后一个实例;这是个缺省值 ,建议您不要更改它(特别是如果设置了 -appConnTimeout)。 
startDelay n (3 seconds)
当尝试连接到动态 FastCGI 应用程序时,Web 服务器等待的时间秒数。如果间隔到期,则会通知进程管 理器,希望它启动应用程序的另一个实例。startDelay 必须小于 appConnTimeout 才有效。
updateInterval n  (300 seconds)
updateInterval 确定了执行统计分析,以确定动态 FastCGI 应用程序结果的频率。

FastCgiExternalServer

appConnTimeout n (0 seconds)
等待到 FastCGI 应用程序的连接完成的秒数,或者 0 表明应该使用分块的 connect()。如果超时到期,则产生 SERVER_ERROR。对于非 0 值,这是在 select() 中用于写入由非分块的 connect() 所返回文件描述符所需的时间。非分块 的 connect() 在许多平台上都存在问题。另见 -idle-timeout,它会产生相似的结果,但是以更简便的方式表示。
idle-timeout n (30 seconds)
在异常终止请求和(在 error LogLevel 上)记录事件前,允许 FastCGI 应用程序处于不活动状态的秒数。只有当暂挂 FastCGI 应用程序的连接时,才应用不活动定时器。如果请 求进入应用程序的请求队列,但是应用程序在此期间没有应答(通过写或刷新)时,将异常终止请求。如果与应用程序的通信已完成,但是与客户机的通信还未完成(响应被缓冲)时,将不应用超时。
flush none
将从应用程序接收到的数据强制写入客户机。缺省情况下为 mod_fastcgi 缓冲区数据,以便尽可能快速的释放应用程序。
host hostname:port none
应用程序用于和 Web 服务器进行通信的主机名或 IP 地址及 TCP 端口号 (1-65535)。-socket-host 选项是互斥的。
Pass-header header none
发送请求环境中的 HTTP 请求报头名。此选项使得报头内容成为可用,通常此报头内容(例如 Authorization)对于 CGI 环境是不可用的。
socket filename none
UNIX:应用程序用于和 Web 服务器进行通信的 UNIX 域套接字的文件名。 此文件名相对于 FastCgiIpcDir-socket-port 选项是互斥的。
Windows NT:应用程序用于和 web 服务器进行通信的已命名管道名。 此名称相对于 FastCgiIpcDir-socket-port 选项是互斥的。

FastCgiIpcDir

UNIX:FastCgiIpcDir 伪指令指定了目录,此目录存储(和查找,在外部 FastCGI 应用程序的情况下)用于应用程序和 web 服务器间通信的 UNIX 套接字文件。 如果目录不是以斜杠 (/) 开头,则假设它相对于 ServerRoot。如果目录不存 在,将根据相应的许可权尝试创建它。 不要指定不在本地文件系统中的目录。如果您使用缺省目录(或另一个在 /tmp 内的目录),则假如您的系统定期从 /tmp 删除文件,mod_fastcgi 将中断。

Windows NT:FastCgiIpcDir 伪指令指定了名称,此名称作为应用程序和服务器间通信的已命名 管道的根名。 名称必须以 \\.\pipe\ 管道名形式表示,管道名部分可以包含除反斜杠之外的任何字符。

FastCgiIpcDir 伪指令必须优先于任何 FastCgiServerFastCgiExternalServer 伪指令(它使用 UNIX 套接字)。 该目录对于 web 服务器必须可读、可写和可执行(可查询),否则对于任何人都无法访问它。

FastCgiServer

FastCgiServer 伪指令定义了文件名作为静态的 FastCGI 应用程序。如果文件名不是以斜 杠 (/) 开头,则假设它相对于 ServerRoot。

缺省情况下,进程管理器将使用下面指定的(圆括号中)缺省配置启动应用程序的一个实例。 如果由于某些原因使静态的应用程序实例死亡,则 mod_fastcgi 将产生另一个实例以替换它,并记录此事件(在警告 LogLevel 中)。

选项可以是以下之一(区分大小写):

appConnTimeoutn (0 seconds)
等待到 FastCGI 应用程序的连接完成的秒数,或者 0 表明应该使用分块的 connect()。如果超时到期,则产生 SERVER_ERROR。对于非 0 值,这是在 select() 中用于写入由非分块的 connect() 所返回文件描述符所需的时间。非分块 的 connect() 在许多平台上都存在问题。另见 -idle-timeout,它会产生相似的结果,但是以更简便的方式表示。
idle-timeout n (30 seconds)
在异常终止请求和(在 error LogLevel 上)记录事件前,允许 FastCGI 应用程序处于不活动状态的秒数。只有当暂挂 FastCGI 应用程序的连接时,才应用不活动定时器。如果请 求进入应用程序的请求队列,但是应用程序在此期间没有应答(通过写或刷新)时,将异常终止请求。如果与应用程序的通信已完成,但是与客户机的通信还未完成(响应被缓冲)时,将不应用超时。
initial-env name[=value] none] none
将名称-值对发送到 FastCGI 应用程序的初始环境中。要从 Apache 环境发送变 量,不要提供 "="(如果变量实际上不在环境中,则他的定义不带任何值)。要定义不带任何值的变量,提 供不带任何值的 "="。该选项可以重复使用。
init-start-delay n(1 second)
此应用程序各实例产生之间的最小秒数。此延迟减少了服务器初始化时系统发出的需求。
Flush none
将从应用程序接收到的数据强制写入客户机。缺省情况下为 mod_fastcgi 缓冲区数据,以便尽可能快速的释放应用程序。
Listen-queue-depth n (100)
此应用程序的所有实例共享的 listen() 队列(也可认为是备用)深度。较深的侦听队列允许服务器处理瞬时装入波动,而无需拒绝请求;它不会增加吞吐量。添加其它应用程序实例可能增加吞吐量/性能,其取决于应用程序和主机。
Pass-header header none
发送请求环境中的 HTTP 请求报头名。此选项使得报头内容成为可用,通常此报头内容(例如 Authorization)对于 CGI 环境是不可用的。
processes n (1)
服务器初始化时产生的应用程序实例数。
Priority n (0)
分配给应用程序实例的进程优先级(使用 setpriority())。
port n none
应用程序用于和 Web 服务器进行通信的 TCP 端口号 (1-65535)。此选项允许从网络上的其 它机器访问应用程序(和本机访问一样)。-socket-port 选项是互斥的。
Restart-delay n (5 seconds)
产生此应用程序失败实例之间的最小秒数。此延迟避免了中断应用程序占用太多的系统资源。
Socket filename (gen'd)
UNIX:应用程序用于和 web 服务器进行通信的 UNIX 域套接字的文件名。此模块在 FastCgiIpcDir 指定的目录中创建套接字。此选项允许其它应用程序(例如 cgi-fcgi)在同一机器上或通过外部 FastCGI 应用程序定义 (FastCgiExternalServer) 访问此应用程 序。如果既没有 -socket,也没有 -port 选项, 则模块将生成 UNIX 域套接字文件名。-socket-port 选项是互斥的。
Windows NT:应用程序用于和 web 服务器进行通信的已命名管道名。此模块创建了由 FastCgiIpcDir 指定的已命名管道根目录的已命名管道。 此选项允许其它应用程序(例如 cgi-fcgi)在同一机器上或通过外部 FastCGI 应用程序定义 (FastCgiExternalServer) 访问此应用程序。如果既没有 -socket,也没有 -port 选项,则模块将生成 UNIX 域套接字文件名。 -socket-port 选项是互斥的。

 

FastCgiSuexec

FastCgiSuexec 伪指令用于启用对 suexec-wrapper 的支持。 FastCgiSuexec 需要在 Apache(用于 CGI)中启用的 suexec。 要与 Apache 使用相同的 suexec-wrapper,将 FastCgiSuexec 设置为 On。要使 用不同的 suexec-wrapper,指定 suexec-wrapper 的文件名。如果文件名不是以斜杠 (/) 开头, 则假设它相对于 ServerRoot

当启用 FastCgiSuexec 时,静态或外部 FastCGI 应用程序定义的位置很重要。它们 从定义它们的虚拟服务器中的 UserGroup 伪指令继承了它们的用户和组。 UserGroup 伪指令应该先于 FastCGI 应用程序定义。注意,这不 会将 FastCGI 应用程序限制到定义它们的虚拟服务器,允许应用程序对任何来自于具有相同用户和组的虚拟服务器的请求提供服务。如果接收到 FastCGI 应用程序的请求,而此请求没有与正确的用户和组相匹配的现有定义,则将使用正确 的用户和组启动应用程序的动态实例。 这将导致与不同的用户/组运行的相同应用程序的多个复本。如果存在问题,从其它虚拟服务器中排除到 此应用程序的导航,或使用相同的用户和组来配置虚拟服务器。

请参阅 Apache 文档以获得关于 suexec 的更多信息(确保您已完全理解安全性蕴含式)。

相关信息