将env变量传递给fcgi(perl)

时间:2012-01-11 21:41:11

标签: perl fastcgi env

我有一个运行mod_fcgid的apache 2 webserver。 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似乎确实有效。

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

谢谢!

1 个答案:

答案 0 :(得分: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子进程,它应该在脚本运行后终止吗?