【问题标题】:passing env variables to fcgi (perl)将环境变量传递给 fcgi (perl)
【发布时间】:2012-01-11 21:41:10
【问题描述】:

我有一个运行 mod_fcgid 的 apache 2 网络服务器。 CGI 脚本通过传递一些环境变量然后执行 perl 程序来执行,例如:

index.cgi:
#!/bin/sh
export TEST_VAR=test
exec test.pl

test.pl:
#!/usr/bin/perl
use CGI::Fast; 
while ($q = new CGI::Fast) {
  print "Content-type: text/html\r\n\r\n";
  print "$ENV{TEST_VAR}";
}

这在没有 fcgi 的情况下运行良好,但在启用它时(例如,通过 .htaccess 中的“SetHandler fcgid-script”),TEST_VAR 没有通过(甚至在第一次运行时也没有)。除此之外,fcgi 似乎确实在工作。

对此有任何想法或建议的方法吗?出于各种配置原因,我更喜欢如上所述在外部设置环境,但这不是强制性的。

谢谢!

【问题讨论】:

  • 是否可以使用配置文件?我发现它往往比依赖环境变量更清晰(并且更一致)。

标签: perl fastcgi env


【解决方案1】:

我猜你必须检查/更新你的 apache 配置。

1) 首先我会检查 apache 设置的环境。来自 FastCGI 网站:

要将每个请求的环境变量传递给 FastCGI 应用程序,请查看:mod_env (SetEnv, PassEnv, UnSetEnv) ...

来自 FCGI 手册:

使用 FcgidInitialEnv 定义环境变量以传递给 FastCGI 应用程序...

也许是操作系统/沙盒/虚拟机/chroot 的一些奇怪的安全功能在您的环境变量最终进入 %ENV 之前对其进行了修改?

2) FastCGI 脚本的文件扩展名通常是 .fcgi,而不是 .cgi 或 .pl。 apache 是否将您的任何脚本识别为 FastCGI/FCGI?您在 Apache 配置中为 AddType/AddHandler/SetHandler/FastCgiServer 设置了什么?

另外:我不确定您的 perl 脚本是否会保留在内存中。 shell 脚本中的 exec 生成了一个新的“标准”perl 子进程,该子进程应该在脚本运行后终止吗?

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 2021-09-05
    • 2020-03-27
    • 2017-03-30
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多