将env变量传递给fcgi(perl)



我有一个运行mod_fcgid的apache 2 Web服务器。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/htmlrnrn";
  print "$ENV{TEST_VAR}";
}

当在没有fcgi的情况下运行时,这可以很好地工作,但当启用它时(例如,通过.htaccess中的"SetHandler fcgid脚本"),TEST_VAR不会被传递(即使在第一次运行时也不会)。除此之外,fcgi似乎确实在发挥作用。

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

谢谢!

我想您必须检查/更新您的apache配置。

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

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

来自FCGI手册:

使用FcgidInitialEnv定义要传递到FastCGI应用程序的环境变量。。。

也许是OS/sandbox/虚拟机/chroot的一些奇怪的安全功能在环境变量最终进入%ENV之前修改了它们?

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

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

相关内容

  • 没有找到相关文章

最新更新