我一直在寻找这个问题的解决方案:
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/