Как настроить 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