IIS 提供的 Perl CGI 脚本无法启动并出现 HTTP-502 错误,但如果再次尝试则可以正常工作

标签 perl iis-7 cgi

我一直在寻找这个问题的解决方案:

IIS7 网络服务器提供的 Perl CGI 脚本有时会因 HTTP-502 错误而失败:“HTTP 错误 502.2 – 错误的网关 CGI 应用程序未返回完整的 HTTP header 集”

如果此脚本长时间未被调用(通常为数小时),通常会发生此错误。如果用户重试启动此脚本的操作,它将起作用。 我认为 IIS 返回 HTTP-502.2 错误是因为 Perl 解释器向 STDERR 打印了一条错误消息。我的猜测是当前工作目录有时没有设置正确(不是请求的虚拟路径对应的物理路径),所以Perl解释器找不到脚本。

在 IIS 上,发送到 STDERR 的消息丢失了。使用 CGI::Carp qw(fatalsToBrowser) 也无济于事;它从不打印错误消息,支持我的 Perl 解释器找不到脚本的理论。 我已经看到在 Windows 上运行的 Apache 服务器表现出相同的行为:长时间暂停后出现一次故障,然后重试脚本完美无缺。 可能在内部使用 shell 来运行 Perl 解释器。

“perl”文件夹的 IIS 设置将文件夹视为应用程序。 处理程序映射将“*.pl”文件映射到

c:\perl\bin\perl.exe "%s"%s

我是否必须添加任何设置(Windows 或 IIS)以实现正确的环境和当前工作目录?

最佳答案

从 IIS 运行 PERL cgi 的另一个技巧。

首先点击 -> Handler Mappings

然后点击右边的action box -> Add module Mapping

请求路径 -> *.pl

模块 -> IsapiModule

可执行文件 -> Activeperl\bin\PerlEx30.dll

名称 -> perl(任意)

请求限制 -> 映射 -> 文件或文件夹,动词 -> 所有动词, 访问 -> 执行 然后点击确定

然后您将在添加模块映射中显示名称 perl

然后是左边的角

右键单击“站点”,然后单击“添加网站”

站点名称 -> perl.com(任意)

物理路径 -> 选择包含 perl cgi 脚本的文件夹

主机名 -> perl.com 然后点击确定

那么以下对于运行CGI很重要

c:/windows/system32/drivers/etc/hosts

打开主机文件 然后将 host name-> 添加到::1 下面的 hosts 文件中 就像我在 iis 中的主机名是 perl.com 所以我添加了 127.0.0.1 perl.com 然后保存。

然后在浏览器上运行 perl cgi,如 perl.com/file.pl

关于IIS 提供的 Perl CGI 脚本无法启动并出现 HTTP-502 错误,但如果再次尝试则可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615661/

相关文章:

perl - 在 Perl 中匹配

javascript - 突出显示与 Perl 正则表达式匹配的 HTML 部分 - 在服务器端 Perl 或客户端 javascript 中执行吗?

perl - 如何在 perl 中获取 POST 值

ruby-on-rails - CGI 问题::unescapeHTML

perl - 在这种情况下,< 在 Perl 中做了什么?

json - Perl - 从 JSON 到对象/哈希

perl5.12 - 如何在 Perl 5.12 中获得有效的 Data::Alias?

asp.net - IIS7 404错误

ssl - 如何在II7上安装SAN SSL证书?

ASP.net 同源策略 header 不起作用