передача переменных env в fcgi (perl) - PullRequest
2 голосов
/ 12 января 2012

У меня есть веб-сервер apache 2, работающий с mod_fcgid. Сценарии 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, но при его включении (например, через «SetHandler fcgid-script» в .htaccess) TEST_VAR не передается (даже при первом запуске). Помимо этого, fcgi действительно работает.

Есть идеи или предложенные подходы к этому? Я бы предпочел установить внешнюю среду, как описано выше, по разным причинам, но это не обязательно.

Спасибо!

1 Ответ

1 голос
/ 27 января 2012

Полагаю, вам нужно проверить / обновить конфигурацию 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 даже остается в памяти.Exec в сценарии оболочки порождает новый «стандартный» подпроцесс perl, который должен завершиться после запуска сценария, или нет?

...