我一直在寻找解决这个问题的方法:
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)我必须添加以强制执行正确的环境和当前工作目录?
答案 0 :(得分:0)
从IIS运行PERL cgi的另一个技巧。
First click -> Handler Mappings
Then right side action box click -> Add module Mapping
Request Path -> *.pl
Module -> IsapiModule
Executable -> Activeperl\bin\PerlEx30.dll
Name -> perl (anything)
Request Restrictions -> Mapping -> file or folder, verbs -> all verbs ,
access -> Execute
然后单击“确定”
然后,您将在添加模块映射
中显示名称perl然后是左侧角落
Right click on the Sites and click Add web Site
site name -> perl.com (anything)
Physical path -> select the folder which is contain the perl cgi scripts
Host name -> perl.com
然后单击确定
然后以下对于运行CGI非常重要
c:/windows/system32/drivers/etc/hosts
打开hosts文件
然后添加host name-> into the hosts file below the ::1
like my Host name in iis is perl.com so i added 127.0.0.1 perl.com
然后保存。
然后在浏览器上运行perl cgi,如perl.com/file.pl