Apache 学习笔记,apache学习笔记


http://httpd.apache.org/docs/2.4/en/env.html

有两种影响Apache HTTP Server的环境变量。

首先,由底层操作系统控制环境变量。这些在服务器启动之前设置。它们可以用于配置文件的扩展,并且可以选择使用PassEnv指令传递给CGI脚本和SSI。

其次,Apache HTTP Server提供了一种将信息存储在也称为环境变量的命名变量中的机制。这些信息可用于控制各种操作,如日志记录或访问控制。变量也被用作与CGI脚本等外部程序进行通信的机制。本文档讨论操作和使用这些变量的不同方式。

尽管这些变量被称为环境变量,但它们与底层操作系统控制的环境变量不同。相反,这些变量在Apache内部结构中存储和操作。当它们提供给CGI脚本和服务器端包含脚本时,它们只会成为实际的操作系统环境变量。如果您希望操作服务器本身运行的操作系统环境,则必须使用操作系统shell提供的标准环境操作机制。

设置环境变量

基本环境操作

The most basic way to set an environment variable in Apache is using the unconditional SetEnv directive. Variables may also be passed from the environment of the shell which started the server using the PassEnv directive.

在Apache中设置环境变量的最基本方法是使用无条件的SetEnv指令。 变量也可以通过使用PassEnv指令启动服务器的shell的环境中传递。

有条件的每个请求设置
为了获得更大的灵活性,mod_setenvif提供的指令允许根据请求设置环境变量,并根据特定请求的特征进行设置。 例如,只有当特定的浏览器(User-Agent)发出请求时,或者只有在找到特定Referer [sic]标头时,才能设置变量。 通过使用[E = …]选项设置环境变量的mod_rewrite的RewriteRule,可以获得更大的灵活性。

唯一标识符
最后,mod_unique_id将每个请求的环境变量UNIQUE_ID设置为在非常特定的条件下保证在“所有”请求中唯一的值。

标准CGI变量

除了在Apache配置中设置并通过shell传递的所有环境变量之外,CGI脚本和SSI页面还提供了一组环境变量,其中包含CGI规范要求的有关请求的元信息。

一些警告

  • 使用环境操作指令覆盖或更改标准CGI变量是不可能的。
  • 当使用suexec启动CGI脚本时,在CGI脚本启动之前,环境将被清除为一组安全变量。安全变量的列表在suexec.c的编译时定义。
  • 出于便携性原因,环境变量的名称可能只包含字母,数字和下划线字符。另外,第一个字符可能不是数字。传递给CGI脚本和SSI页面时,与此限制不匹配的字符将被替换为下划线。
  • 一个特殊情况是通过环境变量传递给CGI脚本等的HTTP头文件(见下文)。它们被转换成大写字符,而只有破折号被替换为下划线;如果标题包含任何其他(无效)字符,则整个标题将被无声丢弃。请参阅下面的解决方法。
  • SetEnv指令在请求处理期间延迟运行,这意味着像SetEnvIf和RewriteCond这样的指令将看不到用它设置的变量。
  • 当服务器通过内部子请求查找路径(如查找DirectoryIndex或使用mod_autoindex生成目录列表)时,每个请求的环境变量不会在子请求中继承。此外,由于mod_setenvif采取的API阶段,因此SetEnvIf指令不会在子请求中单独评估。
    最佳
    使用环境变量

相关内容

    暂无相关文章