Как настроить Perl/FCGI (FastCGI) с помощью IIS 7.5?

Я пытаюсь запустить Perl/FastCGI (FCGI) с IIS 7.5. Версия C:\Windows\System32\inetsrv\iisfcgi.dll - 7.5.7601.17514. Здесь мой web.config и мой Perl script:

D:\MiLu\Dev :: more /t1 web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
  <directoryBrowse enabled="true" />
  <handlers>
   <add name="FCGI" path="*.pl" verb="*"
    modules="FastCgiModule"
    scriptProcessor="C:\Opt\Cygwin\bin\perl.exe"
    resourceType="Unspecified" requireAccess="Script" />
  </handlers>
 </system.webServer>
</configuration>

D:\MiLu\Dev :: more /t4 Perl\fcgi\count.pl
use strict;
use warnings;
use FCGI;

my $count = 0;
my $request = FCGI::Request();

while ( $request->Accept >= 0 ) {
    print "Content-type: text/html\r\n\r\n", ++$count;
}

Все, что я получаю, это 500 с общей страницей ошибок из IIS, в которой указано, что "процесс FastCGI неожиданно вышел из системы" и перечислены возможные причины ошибок.

script отлично работает из командной строки, печатает три строки и сразу же выходит из него, указывая, что script и установка модуля в порядке. (Я скопировал его из руководства FCGI, так что все должно быть в порядке.)

D:\MiLu\Dev :: C:\Opt\Cygwin\bin\perl.exe Perl\fcgi\count.pl
Content-type: text/html

1

Существует FCGI::IIS module, однако он работает только для IIS 5.1 и 6.0.

Тот факт, что имеется выделенный модуль FCGI для IIS, предполагает, что IIS 5.1 и 6.0 предоставили собственную нестандартную реализацию FCGI. Итак, если это так, то как насчет IIS 7.5? Довольно много неопределенностей.

Автор FCGI::IIS похоже, попытался сделать свой модуль работой с IIS 7.0 (Getting Perl, работающим с IIS7 с FastCGI - 2007), но отказался.

Где я могу найти что-то более конкретное относительно того, что такое ошибка? Есть ли файл журнала? Что мне нужно искать в средстве просмотра событий Windows (eventvwr)?

Есть ли какое-то магическое заклинание для IIS, которое мне не хватает?

Там не так много информации об этой комбинации. Но это может сработать, в конце концов. Здесь есть страница настройки конфигурации приложения FastCGI, а у кого-то есть Catalyst для работы с FastCGI на IIS 7.0 (Catalyst + IIS 7.0 на MS Windows 2008/Vista).

Ответ 1

Я не делал этого некоторое время, и никогда с Cygwin. Чтобы проверить это, вы можете загрузить и установить последнее активное состояние perl для своей архитектуры и попробовать установить/настроить, как показано ниже:

http://legacy.websitepanel.net/kb/installing-and-running-active-perl-runtime-as-isapi-on-microsoft-iis-7.0

Другая ссылка:

http://blogs.iis.net/wadeh/archive/2009/04/13/running-perl-on-iis-7.aspx

Удачи.

Ответ 2


  Я только что наткнулся на это. Многие ссылки, на которые вы ссылаетесь, являются моими. В то время, когда я писал это руководство, FastCGI для IIS был совершенно новым, а версия Vista еще не вышла. К сожалению, из-за работы я закончил работу над другими проектами и не получил возможности продолжить работу с гидами, как только вышла версия Vista (IIS 7).

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

FastCGI работает по-разному по-разному в Windows с тем, что он делает в Linux. Это не только версия IIS, но и версия Apache.

В Linux вы можете установить FastCGI как обработчик, а shebang для script будет достаточно, чтобы указать его на Perl и сделать правильную вещь (до тех пор, пока вы закодировали свой script для FCGI или CGI:: Fast).

В Windows вам нужно указать FastCGI script, который вы хотите вызвать с помощью обработчика:

IIS 7:
Диспетчер IIS → Сайты → Веб-сайт → Сопоставление обработчиков → Добавить отображение модулей...
Путь запроса: test_script.fcgi
Модуль: FastCgiModule
Исполняемый файл: c:\perl\bin\perl.exe | c:\inetpub\wwwroot\test_script.fcgi
Имя: тестовый пример FCGI
Нажмите ОК, затем выберите, чтобы добавить приложение FastCGI. Если вы проверите настройки FastCGI для сервера, вам понадобится эта часть после | устанавливается как аргумент исполняемого файла (Perl).
Перезагрузите сервер (а не только на веб-сайт). Он должен работать. К сожалению, если вы хотите использовать этот метод, вам нужно будет добавить отображение для каждого script. Модуль FCGI:: IIS попытался обойти эту проблему, но у нее много предостережений и она не завершена.

<Б > Apache Я проверил это на WAMP, скопировав файл mod_fcgid.so в соответствующий каталог и обновив httpd.conf:

<IfModule fcgid_module> FcgidInitialEnv PATH "C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Perl/bin" FcgidInitialEnv SystemRoot "C:/Windows" FcgidInitialEnv SystemDrive "C:" FcgidInitialEnv TEMP "C:/WINDOWS/Temp" FcgidInitialEnv TMP "C:/WINDOWS/Temp" FcgidInitialEnv windir "C:/WINDOWS" FcgidIOTimeout 64 FcgidConnectTimeout 16 FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 1 FcgidMaxRequestLen 8131072 <Files ~ "\test_script.fcgi$"> Options Indexes FollowSymLinks ExecCGI AddHandler fcgid-script .fcgi FcgidWrapper "C:/Perl/bin/perl.exe c:/wamp/www/test_script.fcgi" .fcgi </Files> </IfModule>

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


Lyle