运行 IIS 上的 Python Flask 应用程序时出现错误 500。如何获得实际错误

Error 500 while running a Python Flask application on IIS. How to get the actual error

我尝试在 windows 上的 IIS 上获取 Flask 应用程序 运行。

原因是通过使用 IIS 机制完成的 windows 身份验证获得单点登录。

我在我的开发机器上得到了它 运行。但是在实际生产环境中是行不通的。由于某些原因,我收到错误 500,但我没有看到实际的 Flask 错误消息。

我在设置期间看到 python 错误消息,然后才设置写入日志文件的权限。它告诉我缺少的权利。我猜这应该意味着 FastCGI 的配置是正确的。

现在,在我设置写入权限后,我收到一个 IIS 错误 500 页面,告诉我 FastCGI 出了点问题。但是我没有得到任何日志条目,即使我设置了写入它们的权限。 windows 事件日志中没有日志文件和条目。没有。

您知道获取实际错误消息的方法吗?

[更新] 启用失败请求跟踪后,出现以下错误:

<RenderingInfo Culture="en-US">
  <Opcode>FASTCGI_UNKNOWN_ERROR</Opcode>
  <Keywords>
   <Keyword>FastCGI</Keyword>
  </Keywords>
  <freb:Description Data="ErrorCode">The directory name is invalid.
(0x8007010b)</freb:Description>
</RenderingInfo>

web.config 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="PYTHONPATH" value="C:\inetpub\wwwroot\app_name" />
    <!-- The handler here is specific to Bottle; see the next section. -->
    <add key="WSGI_HANDLER" value="main.app" />
    <add key="WSGI_LOG" value="C:\inetpub\wwwroot\app_name\LogFiles\wfastcgi.log" />
  </appSettings>
  <system.web>
            <customErrors mode="Off" />
  </system.web>
  <system.webServer>
    <handlers>
      <clear />
      <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" 
                          scriptProcessor="&quot;c:\program files\python37\python.exe&quot;|&quot;c:\program files\python37\lib\site-packages\wfastcgi.py&quot;" 
                          resourceType="Unspecified" requireAccess="Script" />
    </handlers>
    <security>
      <authentication>
        <anonymousAuthentication enabled="false" />                       
                        <windowsAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
</configuration>

如果我猜的话,"program files"文件夹的路径里面有空白会导致错误。

所有 IIS 站点的根目录中都有一个 web.config 文件,其中包含所有设置。您可以使用文本编辑器手动编辑它(它只是 XML)或者您可以使用 IIS GUI。

在我看来,默认的 <customErrors> 设置是 OnRemoteOnly,这意味着它会在您的本地开发机器上显示实际错误,但会使用 [=23= 隐藏它们](但无用)当您远程查看站点时,生产中出现错误页面。

在 web.config 中查找 system.web 元素内的 <customErrors>(见下文)。将其设置为 mode="Off",这应该意味着您可以看到实际的错误消息。

<configuration>
    <system.web>
        <customErrors mode="Off">
        </customErrors>
    </system.web>
</configuration>

要在 iis 中配置 python flask 应用程序,您可以按照以下步骤操作:

  • 首先,你需要安装python、wfastcgi、flask 服务器。
  • 您可以从下面link:
  • 下载python

https://www.python.org/downloads/

注意:如果可能,请使用python 3.6 以上的版本。

安装 python 后,以管理员身份安装 wfastcgi.run 命令提示符和 运行 下面的命令:

pip install wfastcgi

wfastcgi-enable

下面是我的烧瓶示例:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello from FastCGI via IIS!"
if __name__ == "__main__":
    app.run()

在为 运行 创建应用程序后,它使用以下命令:

python app.py

现在启用 iis 的 cgi 功能:

  • 现在打开iis。
  • 右键单击服务器名称并select添加站点。

  • 输入站点名称物理路径和站点绑定。
  • 添加站点后 select 站点名称和 select 处理程序映射 中间窗格中的功能。

  • 点击“添加模块映射”

可执行路径值:

C:\Python37-32\python.exe|C:\Python37-32\Lib\site-packages\wfastcgi.py

  • 点击“请求限制”。确保“仅当请求映射到时调用处理程序:”复选框未选中:

  • 这里点击“是”:

  • 现在返回 select 应用程序设置功能。

  • 单击操作窗格中的添加。

  • 设置 PYTHONPATH 变量(这是您的站点文件夹路径):

  • 和 WSGI_HANDLER(我的 Flask 应用程序名为 app.py,因此值为 app.app — 如果您的名为 site.py,则值为 site.app或类似):

  • 单击“确定”并浏览到您的站点。

我遇到了同样的错误,通过将 访问权限 添加到 python 的文件夹中解决了这个问题。 在您的情况下,python 文件夹路径是 c:\program files\python37,因此请尝试添加具有 读取和执行访问权限的 IIS_IUSRS.

另一种选择是将 Web 应用程序的 AppPool 身份更改为 LocalSystem 作为 IIS 管理器。

如果您的文件权限正确,则问题可能出在您的应用程序池设置上。

  1. 转到 IIS 管理器
  2. 单击服务器的 Application Pools 选项卡
  3. 点击Set Application Pool Defaults...
  4. Process Model下的Identity设置为LocalSystem