FastCGI 伪指令
这些配置参数控制 IBM® HTTP Server 中的 FastCGI 功能部件。
- FastCGIAccessChecker 伪指令
- FastCGIAccessCheckerAuthoritatve 伪指令
- FastCGIAuthenticator 伪指令
- FastCGIAuthenticatorAuthoritative 伪指令
- FastCGIAuthorizer 伪指令
- FastCGIAuthorizerAuthoritative 伪指令
- FastCGIConfig 伪指令
- FastCGIExternalServer 伪指令
- FastCGIIpcDir 伪指令
- FastCGIServer 伪指令
FastCGIsuEXEC 伪指令
FastCGIAccessChecker 伪指令
FastCGIAccessChecker 伪指令将 FastCGI 应用程序定义为按目录的访问验证器。
伪指令 | 描述 |
---|---|
语法 | FastCGIAccessChecker file name [-compat] |
作用域 | 目录和位置 |
缺省值 | 目录 |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | 文件名 |
Apache 访问阶段在用户认证前,而请求提交的 HTTP 头确定允许访问所请求资源的决策。当动态组件作为访问验证决策的一部分(例如,时间或域帐户的状态)存在时,请使用基于 FastCGI 的授权程序。
如果 FastCGI 应用程序文件名没有相应的静态或外部服务器定义,那么该应用程序将作为动态 FastCGI 应用程序启动。如果文件名不以斜杠 (/) 开头,那么应用程序假定此文件名相对于 ServerRoot。
<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 的授权程序阶段。
HTTP Server 不支持来自 FastCGI 授权程序应用程序的定制故障响应。请参阅 ErrorDocument 伪指令以了解变通方法。FastCGI 应用程序可以为文档提供服务。
FastCGIAccessCheckerAuthoritatve 伪指令
FastCGIAccessCheckerAuthoritatve 伪指令支持到较低级别模块的访问检查传递。
伪指令 | 描述 |
---|---|
语法 | FastCGIAccessCheckerAuthoritative On | Off |
作用域 | 目录和位置 |
缺省值 | FastCGIAccessCheckerAuthoritative On |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | On 或 off |
如果 FastCGI 应用程序无法支持访问,那么将 FastCgiAccessCheckerAuthoritative 伪指令显式设置为 Off 可以支持到配置和 modules.c 文件中定义的较低级别模块的访问检查传递。
缺省情况下,控制不传递且失败的访问检查将导致“已禁止”应答。禁用缺省值之前,请仔细考虑含义。
FastCGIAuthenticator 伪指令
FastCGIAuthenticator 伪指令将 FastCGI 应用程序定义为按目录的认证器。
伪指令 | 描述 |
---|---|
语法 | FastCGIAuthenticator file name [-compat] |
作用域 | 目录 |
缺省值 | 无 |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | 文件名 |
认证器通过将提供的用户名和密码与已知用户和密码列表或数据库进行匹配来验证请求者。如果用户数据库在现有独立程序中进行维护或者位于 Web 服务器以外的机器上,请使用基于 FastCGI 的验证器。
如果 FastCGI 应用程序文件名没有相应的静态或外部服务器定义,那么该应用程序将作为动态 FastCGI 应用程序启动。如果文件名不以斜杠 (/) 开头,那么假定此文件名相对于 ServerRoot。
请将 Directory 或 Location 容器中的 FastCgiAuthenticator 伪指令与 AuthType 和 AuthName 伪指令配合使用。此伪指令仅支持基本用户认证类型。此认证类型需要 Require 或 FastCgiAuthorizer 伪指令才能正常工作。
/Directory htdocs/protected>
AuthType Basic
AuthName ProtectedRealm
FastCgiAuthenticator fcgi-bin/authenticator
require valid-user
</Directory>
Mod_fastcgi 伪指令几乎将通常可用的所有标准环境变量发送到 CGI 和 FastCGI 请求处理程序。FastCGI 认证应用程序在成功响应(状态:200)中返回的所有头将作为环境变量传递到子进程或 CGI 和 FastCGI 调用。不成功响应中返回的所有头都将传递到客户机。使用 -compat 选项可以获取符合 FastCGI 规范的行为。
Mod_fastcgi 伪指令将 FCGI_APACHE_ROLE 环境变量设置为 AUTHENTICATOR,指示已执行特定于 Apache 的授权程序阶段。
此伪指令不支持来自 FastCGI 授权程序应用程序的定制故障响应。请参阅 ErrorDocument 伪指令以了解变通方法。FastCGI 应用程序可以为文档提供服务。
FastCGIAuthenticatorAuthoritative 伪指令
如果显式设置为 off 并且 FastCGI 应用程序无法认证用户,那么 FastCGIAuthenticatorAuthoritative 伪指令将支持到配置和 modules.c 文件中定义的较低级别模块的认证传递。
伪指令 | 描述 |
---|---|
语法 | FastCGIAuthenticatorAuthoritative On | Off |
作用域 | 目录 |
缺省值 | FastCgiAuthenticatorAuthoritative On |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | On 或 off |
请将此伪指令与受到很好保护的 AuthUserFile 伪指令(包含一些与管理有关的用户)配合使用。
缺省情况下,控制不传递,并且未知用户将导致“需要授权”应答。禁用缺省值之前,请仔细考虑含义。
FastCGIAuthorizer 伪指令
FastCGIAuthorizer 伪指令将 FastCGI 应用程序定义为按目录的授权程序。
伪指令 | 描述 |
---|---|
语法 | FastCgiAuthorizer file name [-compat] |
作用域 | 目录 |
缺省值 | 无 |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | 文件名 |
授权程序验证已认证的用户是否可以访问请求的资源。当动态组件作为授权决策的一部分(例如,用户帐单的时间或货币)存在时,请使用基于 FastCGI 的授权程序。
如果 FastCGI 应用程序文件名没有相应的静态或外部服务器定义,那么该应用程序将作为动态 FastCGI 应用程序启动。如果文件名不以斜杠 (/) 开头,那么假定此文件名相对于 ServerRoot。
请使用 Directory 或 Location 容器中的 FastCgiAuthorizer 伪指令。 包括 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 伪指令
如果显式设置为 Off 且 FastCGI 应用程序无法认证用户,那么 FastCGIAuthorizerAuthoritative 伪指令将支持到配置和 modules.c 文件中定义的较低级别模块的认证传递。
伪指令 | 描述 |
---|---|
语法 | FastCgiAuthorizerAuthoritative file name On | Off |
作用域 | 目录 |
缺省值 | FastCgiAuthorizerAuthoritative file name On |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | On 或 off |
请将此伪指令与受到很好保护的 AuthUserFile(包含一些与管理有关的用户)配合使用。
缺省情况下,控制不传递,并且未知用户将导致“需要授权”应答。禁用缺省值之前,请仔细考虑含义。
FastCGIConfig 伪指令
FastCGIConfig 伪指令定义所有动态 FastCGI 应用程序的缺省参数。
伪指令 | 描述 |
---|---|
语法 | FastCgiConfig option option... FastCgiConfig 伪指令不影响静态或外部应用程序。 |
作用域 | 目录 |
缺省值 | 无 |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | 动态应用程序按需启动。为了满足大量需求,可以启动其他应用程序实例。需求减少时,应用程序实例数也会减少。提供了多个用于管理此过程的选项。 |
- appConnTimeout n(0 秒)。这是等待与 FastCGI 应用程序的连接完成的秒数,或者为 0,后一种情况表明使用了 blocking connect()。如果该超时到期,那么会生成 SERVER_ERROR。对于非零值,这是 select() 中写入 non-blocking connect() 所返回的文件描述符所用的时间长度。在许多平台上,Non-blocking connect() 非常麻烦。另请参阅 -idle-timeout;此选项以更可移植的方式生成类似结果。
- idle-timeout n(30 秒)。这是在请求异常终止并以错误 LogLevel 记录事件之前,允许 FastCGI 应用程序处于不活动状态的秒数。仅当存在与 FastCGI 应用程序的暂挂连接时,才会应用该不活动计时器。如果应用程序在此时间段内不响应已排队的请求,那么该请求会异常终止。如果与应用程序的通信完成,但是与客户机的通信未完成(缓存的响应),那么不会应用超时。
- autoUpdate 无。此选项使得 mod_fastcgi 模块在处理每个请求之前检查磁盘上应用程序的使用寿命。对于最近的应用程序,此功能会通知进程管理器并停止该应用程序的所有运行中实例。请将此类型的功能构建到应用程序中。将此选项与 -restart 配合使用时可能会出现问题。
- gainValue n(0.5)。这是计算当前正在运行的动态 FastCGI 应用程序的以指数方式递减的连接次数负载因子时,用作指数的介于 0 与 1 之间的浮点值。旧的值通过乘以 (1 - gainValue) 使值变小,其权重与当前值(旧的值乘以 gainValue)比较则更大。
- initial-env name[=value] 无。这是衍生应用程序实例时,在初始环境中传递的“名称/值”对。 要从 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 请求头的名称。此选项使头的内容可用于 CGI 环境。
- priority n (0)。这是使用 setpriority() 指定给应用程序实例的进程优先级。
- processSlack n(5 秒)。如果当前正在运行的所有动态 FastCGI 应用程序总数超过了 maxProcesses - processSlack,那么进程管理器将调用终止策略。此操作通过在达到 maxProcesses 值之前终止某些活动最少的应用程序实例来提高负载较高时的性能。
- restart 无。此选项使得进程管理器在发生故障时重新启动动态应用程序,此行为与静态应用程序相似。
- Restart-delay n(5 秒)。这是两次重新衍生此应用程序的失败实例之间的最小秒数。此延迟可以阻止已中断的应用程序消耗过多系统资源。
- singleThreshhold n (0)。这是 0 到 100 之间的整数,用于确定是否可以终止 FastCGI 应用程序的最后一个实例。如果进程管理器所计算的应用程序的负载因子小于指定阈值,那么将终止最后一个实例。请指定接近于 1 的值,以便可执行文件以空闲方式运行很长时间。如果要考虑到内存或 CPU 时间,那么接近于 100 的值将更适用。值为 0 将阻止应用程序的最后一个实例终止;此值是缺省值。不建议您更改此缺省值,在您设置 -appConnTimeout 选项时尤其如此。
- startDelay n(3 秒)。这是 Web 服务器在尝试连接到动态 FastCGI 应用程序时所等待的秒数。如果该时间间隔到期,那么系统将通知进程管理器它希望启动该应用程序的另一个实例。请将 startDelay 值设置为小于 appConnTimeout 值,以使其有效。
- updateInterval n(300 秒)。updateInterval 确定执行统计分析的频率,以确定动态 FastCGI 应用程序的命运。
FastCGIExternalServer 伪指令
FastCGIExternalServer 将文件名定义为外部 FastCGI 应用程序。
它的操作方式与 Fastcgiserver 伪指令相同,但 CGI 应用程序在 Web 服务器外的另一个进程中运行。
伪指令 | 描述 |
---|---|
语法 | FastCgiExternalServer file name -host hostnameport [-appConnTimeout n] FastCgiExternalServer file name -socket file name [-appConnTimeout n] |
作用域 | 服务器配置 |
缺省值 | 无 |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 |
|
FastCGIIpcDir 伪指令
FastCGIIpcDir 伪指令将 directory 指定为在其中存储 UNIX 套接字文件的位置,这些 UNIX 套接字文件用于应用程序与 Web 服务器之间的通信。
伪指令 | 描述 |
---|---|
语法 |
|
作用域 | 服务器配置 |
缺省值 | 无 |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | directory 或 name |
FastCgiIpcDir 伪指令将 directory 指定为在其中存储和查找(对于外部 FastCGI 应用程序)UNIX 套接字文件的位置,这些 UNIX 套接字文件用于应用程序与 Web 服务器之间的通信。如果目录不以斜杠 (/) 开头,那么假定此目录相对于 ServerRoot。如果目录不存在,那么此函数将尝试创建具有适当许可权的伪指令。请在本地文件系统上指定目录。如果您使用缺省目录或 /tmp 中的另一个目录,那么当系统定期从 /tmp 目录中删除文件时,mod_fastcgi 将中断。
FastCgiIpcDir 伪指令将 name 指定为命名管道的根,这些管道用于应用程序与 Web 服务器之间的通信。请以 >\\.\pipe\pipename 格式定义 name。
管道名语法可以包含除反斜杠以外的任何字符。
FastCgiIpcDir 伪指令必须在任何 FastCgiServer 或 FastCgiExternalServer 伪指令的前面,后面两个伪指令利用 UNIX 套接字。 请确保目录对于 Web 服务器可读、可写和可执行。任何用户都不应该具有对此目录的访问权。
FastCGIServer 伪指令
FastCGIServer 伪指令将文件名定义为静态 FastCGI 应用程序。
进程管理器将使用在下面括号中指定的缺省配置启动应用程序的一个实例。如果某个静态应用程序实例出于任何原因而死亡,那么 mod_fastcgi 模块将衍生另一个实例来进行替换,并以警告 LogLevel 记录该事件。
伪指令 | 描述 |
---|---|
语法 | FastCgiServer file name [options] |
作用域 | 服务器配置 |
缺省值 | 无 |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | directory 或 name |
- appConnTimeout n(0 秒)。这是等待与 FastCGI 应用程序的连接完成的秒数,或者为 0,后一种情况表明使用了 blocking connect()。如果该超时到期,那么会生成 SERVER_ERROR。对于非零值,此选项指示 select() 中写入 non-blocking connect() 所返回的文件描述符所用的时间长度。在许多平台上,Non-blocking connect() 非常麻烦。请参阅 -idle-timeout 选项;此选项以更可移植的方式生成类似结果。
- Idle-timeout n(30 秒)。这是在请求异常终止并以错误 LogLevel 记录事件之前,允许 FastCGI 应用程序处于不活动状态的秒数。仅当存在与 FastCGI 应用程序的暂挂连接时,才会应用该不活动计时器。如果应用程序在此时间段内不响应已排队的请求,那么该请求会异常终止。如果与应用程序的通信完成,但是与客户机的通信未完成(缓存的响应),那么不会应用超时。
- initial-env name [=value] none]none。这是在 FastCGI 应用程序初始环境中传递的“名称/值”对。 要从 Apache 环境传递变量,请不要提供“=”(变量实际上不在环境中,而是已进行定义但未赋值)。要定义没有值的变量,请提供没有值的“=”。您可以重复此选项。
- init-start-delay n(1 秒)。这是两次衍生此应用程序的实例之间的最小秒数。此延迟降低了服务器初始化时对系统的要求。
- Flush 无。强制在接收到来自应用程序的数据时将这些数据写入客户机。缺省情况下,mod_fastcgi 会缓存数据以快速释放应用程序。
- Listen-queue-depth n (100)。listen() 队列的深度,也称为积压,由此应用程序的所有实例共享。更深的侦听队列使服务器可以应付瞬态装入波动而不会拒绝请求;此选项不增加吞吐量。根据应用程序和主机,添加其他应用程序实例可能会增加吞吐量和提高性能。
- Pass-header header 无。这是在请求环境中传递的 HTTP 请求头的名称。此选项使头的内容可用于 CGI 环境。
- processes n (1)。这是在服务器初始化时需要衍生的应用程序实例数。
- Priority n (0)。这是使用 setpriority() 指定给应用程序实例的进程优先级。
- port n 无。这是应用程序用于与 Web 服务器通信的 TCP 端口号 (1-65535)。此选项使得可以从网络中的其他机器访问该应用程序。-socket 选项和 -port 选项是互斥的。
- Restart-delay n(5 秒)。这是两次重新衍生此应用程序的失败实例之间的最小秒数。此延迟可以阻止中断的应用程序使用过多系统资源。
- socket file name:
- 在 UNIX 平台上:这是应用程序用于与 Web 服务器通信的 UNIX 域套接字的文件名。模块将在 FastCgiIpcDir 指定的目录中创建套接字。此选项使得同一机器上的其他应用程序(例如 cgi-fcgi)可以访问该应用程序,或者可以通过外部 FastCGI 应用程序定义 FastCgiExternalServer 访问该应用程序。如果既未提供 -socket 选项,也未提供 -port 选项,那么模块将生成一个 UNIX 域套接字文件名。-socket 选项和 -port 选项是互斥的。
- 在 Windows 操作系统上:这是应用程序用于与 Web 服务器通信的管道名。模块将创建 FastCgiIpcDir 伪指令指定的命名管道根之外的命名管道。此选项使得同一机器上的其他应用程序(例如 cgi-fcgi)可以访问该应用程序,或者可以通过外部 FastCGI 应用程序定义 FastCgiExternalServer 访问该应用程序。如果既未提供 -socket 选项,也未提供 -port 选项,那么模块将为命名管道生成一个名称。-socket 选项和 -port 选项是互斥的。如果文件名不以斜杠 (/) 开头,那么假定此文件名相对于 ServerRoot。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
FastCGIsuEXEC 伪指令
FastCGIsuEXEC 伪指令支持 suEXEC-wrapper。
伪指令 | 描述 |
---|---|
语法 | FastCgiSuexec On | Off file name |
作用域 | 服务器配置 |
缺省值 | FastCgiSuexec Off |
模块 | mod_fastcgi |
配置文件中的多个实例 | 是 |
值 | FastCgiSuexec 伪指令要求在 Apache 中对 CGI 启用 suEXEC。要使用 Apache 所使用的 suEXEC-wrapper,请将 FastCgiSuexec 设置为 On。要使用另一个 suEXEC-wrapper,请指定 suEXEC-wrapper 的文件名。如果文件名不以斜杠 (/) 开头,那么假定此文件名相对于 ServerRoot。 |
启用 FastCgiSuexec 伪指令时,静态或外部 FastCGI 应用程序定义的位置将变得很重要。这些区别从定义它们的虚拟服务器中的 User 和 Group 伪指令继承其用户和组。User 和 Group 伪指令应该在 FastCGI 应用程序定义之前。此功能不会将 FastCGI 应用程序限制在定义它的虚拟服务器中。该应用程序可以为来自任何具有同一用户和组的虚拟服务器的请求提供服务。如果接收了针对 FastCGI 应用程序的请求但未使用正确的用户和组运行现有匹配定义,那么将使用正确的用户和组启动该应用程序的动态实例。此操作可能会导致使用不同的用户和组运行同一应用程序的多个副本。如果这会导致问题,请排除从其他虚拟服务器到应用程序的导航,或者使用同一用户和组来配置虚拟服务器。
请参阅 Apache 文档,以了解有关 suEXEC 和安全含义的更多信息。