FastCGI 伪指令

FastCgiAccessChecker

FastCgiAccessChecker 伪指令用于将 FastCGI 应用程序定义为每个目录的访问验证器。Apache 访问阶段在用户认证之前,并且是否允许对所请求资源进行访问的决策取决于随此请求提交的 HTTP 头。当访问验证决策存在动态组件(如一天中的时间,或者域计数是否最新)时,基于 FastCGI 的授权程序十分有用。 如果 FastCGI 应用程序文件名不具备相应的静态或外部服务器定义,则此应用程序将作为动态 FastCGI 应用程序启动。如果文件名不是以斜杠 (/) 开头,则假设此文件名相对于 ServerRoot。 FastCgiAccessChecker 是在 DirectoryLocation 容器中使用的。 <Directory htdocs/protected> FastCgiAccessChecker fcgi-bin/access-checker Mod_fastcgi 几乎发送所有标准环境变量,这些环境变量通常可用于 CGI/FastCGI 请求处理程序。所有由 FastCGI access-checker 应用程序以成功响应(状态:200)返回的头都将作为环境变量传递给子进程(CGI/FastCGI 调用)。所有以不成功响应返回的头将传递给客户机。遵从 FastCGI 规范的行为可通过使用 “-compat” 选项获得。 Mod_fastcgi 将环境变量 “FCGI_APACHE_ROLE” 设置成 “ACCESS_CHECKER”,以表明所执行的(Apache 特定的)授权程序阶段。 不支持从 FastCGI 授权应用程序中定制故障响应。请参阅 ErrorDocument 伪指令以了解替代办法(可处理此文档的 FastCGI 应用程序)。 FastCgiAccessCheckerAuthoritative

如果 FastCGI 应用程序允许访问失败,则将 FastCgiAccessCheckerAuthoritative 伪指令明确设置成 Off,将使访问检查可传递给较低级的模块(如 Configuration 和 module.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 调用)。所有以不成功响应返回的头将传递给客户机。遵从 FastCGI 规范的行为可通过使用 “-compat” 选项获得。 Mod_fastcgi 将环境变量 “FCGI_APACHE_ROLE” 设置成 “AUTHENTICATOR”,以表明要执行哪个(Apache 特定的)授权程序阶段。 不支持从 FastCGI 授权应用程序中定制故障响应。请参阅 ErrorDocument 伪指令以获得替代办法(可处理此文档的 FastCGI 应用程序)。 FastCgiAuthenticatorAuthoritative

如果 FastCGI 应用程序认证用户失败,则将 FastCgiAuthenticatorAuthoritative 伪指令明确设置成 Off 将使认证能传递给较低级的模块(如 Configuration 和 modules.c 文件中定义的)。 此伪指令的常见用法是与受良好保护的 AuthUserFile 结合使用,此 AuthUserFile 中包含一些(与管理相关的)用户。 缺省情况下,不传递控制,且未知用户将导致产生一个“需要授权”回答。在禁用缺省前,建议您仔细考虑。 FastCgiAuthorizer

FastCgiAuthorizer 伪指令用于将 FastCGI 应用程序定义为每个目录的授权程序。授权程序将验证是否允许经认证的用户访问请求的资源。当授权决策中存在动态组件(如一天中的时间,或者用户是否已支付其帐单)时,基于 FastCGI 的授权程序十分有用。 如果 FastCGI 应用程序文件名不具备相应的静态或外部服务器定义,则此应用程序将作为动态 FastCGI 应用程序启动。如果文件名不是以斜杠 (/) 开头的,则假设此文件名相对于 ServerRoot。 FastCgiAuthorizer 是在 DirectoryLocation 容器内使用的,且必须包含 AuthType 和 AuthName 伪指令。此伪指令需要一条认证伪指令,如 FastCgiAuthenticator、AuthUserFile、AuthDBUserFile 或 AuthDBMUserFile 才能正常运作。 .<Directory htdocs/protected> AuthType Basic AuthName ProtectedRealm AuthDBMUserFile conf/authentication-database FastCgiAuthorizer fcgi-bin/authorizer Mod_fastcgi 几乎发送所有标准环境变量,这些环境变量通常可用于 CGI/FastCGI 请求处理程序。所有由 FastCGI 认证应用程序以成功响应(状态:200)返回的头都将作为环境变量传递给子进程(CGI/FastCGI 调用)。所有以不成功响应返回的头将传递给客户机。遵从 FastCGI 规范的行为是通过使用 “-compat” 选项获得的。 Mod_fastcgi 将环境变量 “FCGI_APACHE_ROLE” 设置成 “AUTHORIZER”,以表明要执行哪个(Apache 特定的)授权程序阶段。 不支持从 FastCGI 授权应用程序中定制故障响应。请参阅 ErrorDocument 伪指令以获得替代办法(可处理此文档的 FastCGI 应用程序)。 FastCgiAuthorizerAuthoritative

如果 FastCGI 应用程序认证用户失败,则将 FastCgiAuthenticatorAuthoritative 伪指令明确设置成 Off 将使认证能传递给较低级的模块(如 Configuration 和 modules.c 文件中定义的)。 此伪指令的常见用法是与受良好保护的 AuthUserFile 结合使用,此 AuthUserFile 中包含一些(与管理相关的)用户。 缺省情况下,不传递控制,且未知用户将导致产生一个“需要授权”回答。在禁用缺省前,建议您仔细考虑。 FastCgiConfig

FastCgiConfig 伪指令定义了所有动态 FastCGI 应用程序的缺省参数。此伪指令不会影响静态或外部应用程序。 动态应用程序是根据需求而启动的。如果需求很大,则将启动其它应用程序实例。当需求减弱时,将杀死应用程序实例。有许多选项可控制此进程。 选项可以包含下列任意一项(不区分大小写): appConnTimeout n (0 秒) 等待与 FastCGI 应用程序的连接完成的秒数,或者 0 表明使用阻塞 connect()。如果超时到期,则将导致 SERVER_ERROR。对于非零值,这表示 select() 中用于写入由非阻塞 connect() 返回的文件描述符的时间量。在许多平台上,非阻塞 connect() 很容易产生问题。另见 -idle-timeout;此选项将产生类似的结果,但其方式更为简便。 idle-timeout n (30 秒) 在请求异常终止并且事件记录(错误日志级别)之前,允许 FastCGI 保持不活动的秒数。只有当与 FastCGI 应用程序的连接暂挂时,此不活动定时器才适用。如果请求进入应用程序的请求队列,而此应用程序在此期间没有响应(通过写和刷新),则此请求将异常终止。如果与应用程序的通信已完成,而与客户机的通信尚未完成(响应被高速缓存),则此超时不适用。 autoUpdate 无 此选项使得 mod_fastcgi 在处理每个请求之前,检查磁盘上应用程序的寿命。如果此应用程序的版本更加新,则通知进程管理器,并杀死所有正在运行的此应用程序的实例。最好将这一类型的功能内置到应用程序中(例如,每隔 100 个请求检查磁盘上是否有更新的版本,如果有就退出)。当此选项与 -restart 一起使用时,可能存在一个明显的问题(错误)。 gainValue n (0.5) 一个 0 至 1 间的浮点值,它在当前运行的动态 FastCGI 应用程序的指数衰减连接次数负载因子计算中用作指数。旧值通过 (1 - gainValue) 进行调节的,所以当与当前值(通过 gainValue 调节)比较时,该值越小,其权值就越重。 initial-env 名称[=值] 无 当应用程序的实例产生时,在初始环境中传递的“名称-值”对。要传递来自 Apache 环境的变量,请不要提供 “=”(如果变量实际不在此环境中,则其定义不带值)。要定义不带值的变量,提供不带任何值的 “=”。此选项可重复使用。 init-start-delay n (1 秒) 此应用程序各实例产生之间的最小秒数。此延迟减少了服务器初始化时系统发出的需求。 killInterval n(300 秒) 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 无 请求环境中传递的 HTTP 请求头的名称。此选项使得头的内容(例如 Authorization)可用于 CGI 环境。 priority n (0) 为应用程序实例指定的进程优先级(使用 setpriority())。 processSlack n(5 秒) 如果当前正在运行的所有动态 FastCGI 应用程序数总和超过了 maxProcesses - processSlack,则进程管理器将调用杀死策略。此操作可通过在不活动的应用程序实例数到达 maxProcesses 之前杀死一些活动最不频繁的应用程序实例,从而改善高负载时的性能。 restart 无 此选项使进程管理器能在发生故障时重新启动动态应用程序(与静态应用程序类似)。 restart-delay n (5 秒) 重新产生此应用程序失败实例之间的最小秒数。此延迟避免了中断应用程序占用过多的系统资源。 singleThreshhold n (0) 一个 0 至 100 间的整数,用于确定是否可终止 FastCGI 应用程序的最后一个实例。如果进程管理器计算出应用程序的负载因子低于指定的阈值,则将终止最后一个实例。指定一个接近 1 的值,以使您的可执行程序以 “idle” 方式长时间运行。如果内存或 CPU 时间是主要因素,则接近 100 的值更为适用。值 为 0 将阻止终止应用程序的最后一个实例;该值也是缺省值。建议不要更改此缺省值(尤其在设置了 -appConnTimeout 的情况下)。 is set). startDelay n(3 秒) 尝试连接到动态 FastCGI 应用程序时,Web 服务器等待的秒数。如果此间隔到期,则将通知进程管理器希望启动应用程序的另一个实例。startDelay 必须小于 appConnTimeout 才有效。 updateInterval n (300 秒) updateInterval 确定了执行统计信息分析,以确定动态 FastCGI 应用程序结果的频率。 FastCgiExternalServer

appConnTimeout n (0 秒) 等待到 FastCGI 应用程序的连接完成的秒数,0 表明使用阻塞 connect()。如果此超时到期,则将导致 SERVER_ERROR。对于非零值,这是指 select() 中用于写入由非阻塞 connect() 返回的文件描述符的时间量。在许多平台上,非阻塞 connect() 很容易产生问题。请参阅 -idle-timeout;此选项将产生类似的结果,但其方式更为简便。 idle-timeout n (30 秒) 在请求异常终止,并且事件记录(错误日志级别)之前,允许 FastCGI 应用程序保持不活动的秒数。只有当与 FastCGI 应用程序的连接暂挂时,此不活动定时器才适用。如果请求进入应用程序的请求队列,而此应用程序在此期间没有响应(通过写和刷新),则此请求将异常终止。如果与应用程序的通信已完成,而与客户机的通信尚未完成(响应被高速缓存),则此超时不适用。 flush 无 当从应用程序接收到数据时将其强制写入客户机。缺省情况下,mod_fastcgi 将对数据高速缓存,以快速释放此应用程序。 host 主机名:端口 无 应用程序用于与 Web 服务器通信的主机名或 IP 地址和 TCP 端口号 (1-65535)。-socket 和 -host 选项是互斥的。 Pass-header header 无 请求环境中传递的 HTTP 请求头的名称。此选项使头的内容成为可用,通常头的内容(例如 Authorization)不可用于 CGI 环境。 socket 文件名 无 UNIX:应用程序用于与 Web 服务器通信的 UNIX 域套接字的文件名。此文件名相对于 FastCgiIpcDir。-socket 和 -port 选项是互斥的。 Windows NT:应用程序用于与 Web 服务器通信的管道名。此名称相对于 FastCgiIpcDir。-socket 和 -port 选项是互斥的。 FastCgiIpcDir

UNIX:FastCgiIpcDir 伪指令指定了作为 UNIX 套接字文件存储(在外部 FastCGI 应用程序中为查找)位置的目录,该套接字文件用于应用程序和 Web 服务器之间的通信。如果此目录不是以斜杠 (/) 开头的,则假设它相对于 ServerRoot。如果此目录不存在,则假设以相应的许可权创建它。不要指定非本地文件系统中的目录。如果您使用缺省目录(或 /tmp 中的另一个目录),则如果您的系统定期从 /tmp 删除文件,mod_fastcgi 将中断。 Windows NT:FastCgiIpcDir 伪指令指定了作为命名管道根的名称,该管道用于应用程序和 Web 服务器之间的通信。此名称的格式为 \.pipe管道名。管道名部分可以包含除反斜杠外的任何字符。 FastCgiIpcDir 伪指令必须在任何 FastCgiServerFastCgiExternalServer 伪指令(它利用 UNIX 套接字)之前。确保此目录对于 Web 服务器来说是可读、可写并可执行(可搜索)的;应该没有人能访问此目录。 FastCgiServer

FastCgiServer 伪指令定义了作为静态 FastCGI 应用程序的文件名。如果文件名不是以斜杠 (/) 开头的,则假设此文件名相对于 ServerRoot。 缺省情况下,进程管理器会使用下面指定的缺省配置(圆括号中)启动应用程序的一个实例。如果由于某些原因致使静态应用程序实例失效,mod_fastcgi 将产生另一个实例以进行替换,并记录此事件(警告日志级别)。 选项可为下列之一(不区分大小写): appConnTimeout n (0 秒) 等待到 FastCGI 应用程序的连接完成的秒数,0 表明使用阻塞 connect()。如果此超时到期,则将导致 SERVER_ERROR。对于非零值,这是指 select() 中用于写入由非阻塞 connect() 返回的文件描述符的时间量。在许多平台上,非阻塞 connect() 很容易产生问题。请参阅 idle-timeout, 它将产生类似的结果,但其方式更为简便。 idle-timeout n (30 秒) 在请求异常终止并且事件记录(错误日志级别)之前,允许 FastCGI 保持不活动的秒数。只有当与 FatCGI 应用程序的连接暂挂时,此不活动定时器才适用。如果请求进入应用程序的请求队列,而此应用程序在此期间没有响应(通过写和刷新),则此请求将异常终止。如果与应用程序的通信已完成,而与客户机的通信尚未完成(响应被高速缓存),则此超时不适用。 initial-env 名称[=值] 无] 无 在 FastCGI 应用程序初始环境中传递的“名称-值”对。要传递来自 Apache 环境的变量,请不要提供 “=”(变量实际不在环境中,其定义不带值)。要定义不带值的变量,提供不带值的 “=”。此选项可重复使用。 init-start-delay n(1 秒) 此应用程序各实例产生之间的最小秒数。此延迟减少了服务器初始化时系统发出的需求。 Flush 无 当从应用程序接收到数据时将其强制写入客户机。缺省情况下,mod_fastcgi 将对数据高速缓存,以快速释放此应用程序。 Listen-queue-depth n (100) 此应用程序的所有实例共享的 listen() 队列的深度(也称为累积)。较深的侦听队列使服务器能在不拒绝请求的情况下,应付瞬时负载波动。此选项不会增加吞吐量。添加附加应用程序实例会增加吞吐量及执行,这取决于应用程序和主机。 Pass-header header 无 请求环境中传递的 HTTP 请求头的名称。此选项使得头的内容(例如 Authorization)可用于 CGI 环境。 processes n (1) 服务器初始化时产生的应用程序实例数。 Priority n (0) 为应用程序实例指定的进程优先级(使用 setpriority())。 port n 无 应用程序用于与 Web 服务器通信的 TCP 端口号 (1-65535)。此选项使得能从网络上的其它机器访问此应用程序。-socket 和 -port 选项是互斥的。 Restart-delay n (5 秒) 重新产生此应用程序失败实例之间的最小秒数。此延迟避免了中断应用程序占用过多的系统资源。 Socket 文件名 (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 选项都没有指定,则此模块将为命名管道生成一个名称。-socket 和 -port 选项是互斥的。 FastCgiSuexec

FastCgiSuexec 伪指令用于启用对 suexec-wrapper 的支持。FastCgiSuexec 要求在 Apache 中启用(对于 CGI)。要使用 Apache 所使用的同一个 suexec-wrapper,将 FastCgiSuexec 设置成 On。要使用不同的 suexec-wrapper,指定 suexec-wrapper 的文件名。如果此文件名不是斜杠 (/) 开头的,则假设此文件名相对于 ServerRoot。 当启用 FastCgiSuexec 时,静态或外部 FastCGI 应用程序定义的位置十分重要。它们从定义它们的虚拟服务器中的 User 和 Group 伪指令继承了它们的用户和组。User 和 Group 伪指令应在 FastCGI 应用程序之前进行定义。此功能不会将 FastCGI 应用程序限制在定义它的虚拟服务器中,允许此应用程序对任何来自同一用户和组的虚拟服务器的请求进行服务。如果接收到的是对 FastCGI 应用程序的请求,而又不存在以此正确用户和组运行的现有匹配定义,则将用正确的用户和组启动此应用程序的动态实例。该操作将导致以不同用户/组运行同一应用程序的多个副本。如果这是问题,请从其它虚拟服务器中排除到此应用程序的导航,或者使用相同的用户和组来配置虚拟服务器。 请参阅 Apache 文档以获得更多有关 suexec 的信息(确保您已完全理解安全性含义)。