HTTP 错误 502.2 - 坏网关:在 IIS 7 中配置 Python 2.7

0 投票
4 回答
6918 浏览
提问于 2025-04-18 01:04

我刚刚开始使用Stack Overflow(这是我的第一篇帖子),但我真的觉得这个网站很有用。

我遇到了麻烦。我们正在尝试在Windows 7的机器上设置IIS 7.0,以便与WinPython 2.7一起运行。

我对IIS还不太熟悉,但我对Python很有经验。IIS 7找不到一个库,而这个库在Python单独运行时可以完美执行。当通过IIS执行时,脚本失败并出现回溯,IIS返回502.2错误。

我找到了一些讨论 http://forums.iis.net/p/1209465/2073173.aspx?HTTP+Error+502+2+Bad+Gateway+Frustrations,但建议的解决方案只是另一个故障排除的建议。

我发现IIS对这个错误的描述(http://support.microsoft.com/kb/942057)有帮助,但没什么用。

我发现Python的启动选项/参数很有帮助(http://docs.python.org/2/using/cmdline.html),但也没什么用。

我发现IIS关于配置Python的建议很有帮助(http://support.microsoft.com/kb/276494),但(可能?)不完整。

这个关于手动定义备用bin文件夹的讨论(http://forums.asp.net/t/1303052.aspx?Tell+IIS+to+load+dll+from+another+directory+not+Bin+web+config+)可能是我解决问题的地方,但我觉得这不是因为在2.6版本时不需要这样做。

IIS似乎允许Python导入任何只是Python脚本的模块。一旦涉及到*.pyd文件(基本上就是Python的dll文件),它就会出错。我对DLL和Windows环境不是很专业,但难道IIS不需要有某种bin文件夹的路径吗?我需要手动编辑这些路径吗,就像上面最后一个链接讨论的那样?

实际错误的详细信息如下,关于DLL加载失败:

错误信息:

"HTTP错误502.2 - 错误网关 指定的CGI应用程序未能返回完整的HTTP头。它返回的头信息是“回溯(最近的调用最后):文件"\estorage.equitable.int\riskmgmt\Quants\web\LinksPage.py",第2行,导入pyweb 文件"\estorage.equitable.int\riskmgmt\Quants\Common2014\Python\pyweb__init__.py",第5行,从core导入* 文件"\estorage.equitable.int\riskmgmt\Quants\Common2014\Python\pyweb\core.py",第2行,从pylib导入pgdb 文件"\estorage.equitable.int\riskmgmt\Quants\Common2014\Python\pylib\pgdb.py",第8行,从scikits导入timeseries作为ts 文件"C:\WinPython-32bit-2.7.6.2-20140401\python-2.7.6\lib\site-packages\scikits.timeseries-0.91.3-py2.7-win32.egg\scikits\timeseries__init__.py",第13行,导入const 文件"C:\WinPython-32bit-2.7.6.2-20140401\python-2.7.6\lib\site-packages\scikits.timeseries-0.91.3-py2.7-win32.egg\scikits\timeseries\const.py",第79行,从cseries导入freq_constants 导入错误:DLL加载失败:指定的模块找不到。”

我相信Python环境配置得很好,因为脚本可以通过命令行从同一个可执行文件(python.exe)运行。我在想,我没有正确配置IIS以适应新的Python 2.7安装。相同的脚本昨天在IIS和Python 2.6上运行良好。但在我们从2.6升级到2.7的过程中,许多PATH和PYTHONPATH参数都发生了变化,而且我们还从ActivePython换成了WinPython。WinPython在机器上是“注册”的。

我尝试过的事情

  • 确认在IIS和命令行运行时,Python的sys.path是预期的 - 是的。

  • 在Python命令行中使用该模块。

  • 使用两种不同的编译器(ming32和VS2008)重新编译失败的模块。

  • 将我的新2.7模块的副本放入旧的python26文件夹中。

  • 抓狂和其他一些乱七八糟的尝试。

我的下一步是把这个消息发到一个Python论坛。如果有人能推荐一个适合Python-IIS相关问题的好论坛,我将非常感激。

请帮帮我!提前感谢。

4 个回答

0

试试这个

print("Content-Type: text/html\n")
print("Hello Python World!")

你必须指定文档的类型

0

在尝试在Windows 8.1上配置CGI以运行Perl时,我遇到了HTTP错误502.2。不过,我看了loste的帖子后解决了这个问题。我之前安装了Perl64和Strawberry Perl两个版本。虽然IIS的事件处理程序只指向了Perl64的目录,但这两个目录都出现在我的Windows PATH变量中。因为我更喜欢使用Strawberry Perl,所以我把事件处理程序改成指向Strawberry Perl的目录,并且从Windows PATH变量中删除了Perl64的路径,这样就解决了这个错误。

0

(注意:jc77是我的同事,其实我是提问者,因为这是从IIS论坛转过来的内容。)

我们解决了这个问题。

简单来说:可移植的Python + 粗心/新手的编译 = 奇怪的行为 + 挫折。

总的来说,编译要正确。如果你想在scikits.timeseries上正常工作,使用ming32编译的话,在Spyder.exe里一切看起来都正常,但在python.exe里就不行了。如果你想在两者中都能用,就得用VS2008来编译。

更多信息:

Winpython(还有其他类似的)看起来和其他Python安装是一样的,只要你“注册”了这个安装。它通常工作得很好,99%的时候都没问题。我们是通过艰难的方式学到的,“Winpython Interpreter.exe”和安装包里的“python.exe”其实是不同的。为什么会这样我们也说不清,但这两个程序的表现确实不一样。我们一直在Spyder里测试,而Spyder肯定是用“winpython interpreter.exe”。在IIS找不到的模块在Spyder里可以正常导入和运行。但是在IIS中,用python.exe时,这个模块就无法导入了。我们原以为IDE会使用python.exe,认为它们的环境是一样的。实际上,99%的时候,它们看起来确实是一样的。我们在winpython interpreter.exe中编译scikits的方式是可以的。我们在编译scikits时犯了一个新手错误,但因为在我们的IDE(Spyder)里运行得很好,所以没注意到。

我加这些关键词是为了帮助其他人:如果你遇到类似的错误,很可能是因为你在使用可移植的Python安装,并且没有正确编译某些东西。涉及到的有Winpython、Portable Python、eGenix,还有可能是Active State和Enthought Canopy。

1

我在Windows Server 2012 R2上用IIS 8.5干净安装PHP 5.5的时候,遇到了502.2错误。

后来我发现,PHP其实是一个需要用到Visual C++的程序,它需要一个叫做MSVCR110.dll的文件才能正常运行。我的电脑上没有安装Visual Studio 2012,所以也就没有这个文件。最后,我通过安装Visual C++ Redistributable Packages解决了这个问题,下载链接在这里:https://www.microsoft.com/en-us/download/details.aspx?id=30679#

撰写回答