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

IIS提供的Perl CGI脚本无法启动,出现HTTP-502错误,但如果重试,则可以正常工作,perl,iis-7,cgi,Perl,Iis 7,Cgi,我一直在寻找解决这个问题的方法: IIS7 web服务器提供的Perl CGI脚本有时会因HTTP-502错误而失败:“HTTP错误502.2–坏网关CGI应用程序未返回完整的HTTP头集” 如果长时间(通常是几个小时)没有调用此脚本,通常会发生此错误。如果用户重试启动此脚本的操作,它将工作。 我认为IIS返回HTTP-502.2错误,因为Perl解释器已将错误消息打印到STDERR。我的猜测是,当前工作目录有时设置不正确(不是与请求的虚拟路径对应的物理路径),因此Perl解释器无法找到脚本 在

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

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

如果长时间(通常是几个小时)没有调用此脚本,通常会发生此错误。如果用户重试启动此脚本的操作,它将工作。 我认为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的另一个技巧

第一次单击->处理程序映射

然后单击右侧操作框->添加模块映射

请求路径->*.pl

Module->IsapiModule

Executable->Activeperl\bin\PerlEx30.dll

Name->perl(任何内容)

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

然后,您将在Add模块映射中显示名称perl

然后是左边的拐角

右键单击网站,然后单击添加网站

site name->perl.com(任何内容)

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

主机名->perl.com
然后单击ok

那么下面的内容对于运行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

您安装了什么perl平台?如stawberry perl或active perlActiveStatePerl 5.8.8亲爱的Hussain,感谢您的回复。我现在可以访问服务器了。我发现问题是由我猜的Perl intepreter写入到STDERR引起的-但这是一个警告:
utf8“\xFF”没有映射到Unicode…
当Perl程序在预期UTF-8的情况下从拉丁字符集中读取包含8位字符的配置文件时,出现了警告。有两台机器组成一个带有负载平衡器的集群,并且只有一台机器上的配置文件包含拉丁文-1字符。也许现在已经修好了。@elwood很抱歉这么说,我没有遇到这个问题,所以我不知道。等我有了主意,我会发帖的。