【问题标题】:How to configure Perl/FCGI (FastCGI) with IIS 7.5?如何使用 IIS 7.5 配置 Perl/FCGI (FastCGI)?
【发布时间】:2011-05-20 21:33:31
【问题描述】:

我正在尝试让 Perl/FastCGI (FCGI) 与 IIS 7.5 一起运行。 C:\Windows\System32\inetsrv\iisfcgi.dll 的版本是7.5.7601.17514。这是我的web.config 和我的 Perl 脚本:

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 进程意外退出”并列出可能的错误原因。

脚本在命令行下运行正常,打印了三行,然后立即退出,说明脚本和模块安装没问题。 (顺便说一下,我是从FCGI manual复制过来的,应该没问题。)

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。

IIS 有一个专用的 FCGI 模块这一事实表明 IIS 5.1 和 6.0 提供了它们自己的非标准 FCGI 实现。那么如果这是真的,那么 IIS 7.5 呢?相当多的不确定性。

FCGI::IISseems to have tried to make his module work with IIS 7.0 (Getting Perl working on IIS7 with FastCGI - 2007)的作者,但是放弃了。

我在哪里可以找到更具体的错误信息?有日志文件吗?我应该在 Windows 事件查看器 (eventvwr) 中寻找什么?

我缺少一些关于 IIS 的魔法咒语吗?

关于这种组合的信息并不多。但它最终可能会奏效。这里有FastCGI Application configuration reference page,还有someone has got Catalyst to work with FastCGI on IIS 7.0 (Catalyst+IIS 7.0 on MS Windows 2008/Vista)

【问题讨论】:

    标签: perl iis iis-7.5 fastcgi


    【解决方案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

    祝你好运。

    【讨论】:

    • 我按照第二个 URL 中的步骤进行操作,并且能够正确部署,感谢您的链接!
    【解决方案2】:


    我刚遇到这个。你引用的很多链接都是我的。在我写这些指南的时候,用于 IIS 的 FastCGI 是全新的,Vista 版本还没有发布。不幸的是,由于工作原因,我最终参与了其他项目,并且在 Vista (IIS 7) 版本发布后没有机会继续阅读这些指南。

    我刚刚来到一个再次需要这个的项目,在我自己寻找解决方案的过程中,我偶然发现了你的帖子。我做了一些测试并设法找到了解决方案。

    FastCGI 在 Windows 上的工作方式与在 Linux 上的工作方式完全不同。不只是 IIS 版本,还有 Apache 版本。

    在 Linux 上,您可以将 FastCGI 设置为处理程序,并且脚本的 shebang 足以将其指向 Perl 并执行正确的操作(只要您为 FCGI 或 CGI::Fast 编写了脚本) .

    在 Windows 上,您需要指定要使用处理程序调用的 FastCGI 脚本:

    IIS 7
    IIS 管理器 -> 站点 -> 网站 -> 处理程序映射 -> 添加模块映射...
    请求路径:test_script.fcgi
    模块:FastCgiModule
    可执行文件:c:\perl\bin\perl.exe|c:\inetpub\wwwroot\test_script.fcgi
    名称:测试 FCGI 示例
    单击确定,然后选择添加 FastCGI 应用程序。如果您检查服务器的 FastCGI 设置,您将需要 | 之后的部分。设置为可执行文件 (Perl) 的参数。
    重新启动服务器(不仅仅是网站)。它应该工作。不幸的是,如果您想使用这种技术,您需要为每个脚本添加一个映射。 FCGI::IIS 模块试图解决这个问题,但它有很多警告并且还没有完成。

    阿帕奇 我通过将 mod_fcgid.so 文件复制到适当的目录并更新 httpd.conf 在 WAMP 上对此进行了测试:

    <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>

    我希望这可以帮助遇到与您相同问题的任何人。


    莱尔

    【讨论】:

    • 谢谢,莱尔。我现在已经放弃了这个 Perl/IIS 设置,但我相信你的更新将使其他用户在网络开发世界这个有点黑暗的角落寻求建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多