首页 > 解决方案 > Windows Server 上的 2 个 IIS Flask 站点 - 仅运行 1 个

问题描述

Windows Server 数据中心 2019 Python 3.7.6

我在 IIS 上配置了 2 个站点。

mysite1 端口 9090:使用 VSCode 运行并在浏览器中输入 URL

  1. 从 VSCode 运行
  2. 在浏览器中输入网址:###.###.###.###:9090

mysite2 端口 9566:仅从 VSCode 运行

  1. 从 VScode 运行。
  2. 错误 500。在浏览器中输入 URL:###.###.###.###:9566 也来自 IIS 管理器菜单选项:浏览 *:9566

HTTP 错误 500.0 - 内部服务器错误

C:\inetpub\wwwroot\Flask\mysite2\venv\Scripts\python.exe - FastCGI 进程意外退出

详细错误信息:

模块 FastCgiModule

通知 ExecuteRequestHandler

处理程序 Python FastCGI

错误代码 0x00000067

请求的 URL http://localhost:9566/

物理路径 C:\inetpub\wwwroot\Flask\mysite2

登录方法匿名

登录用户匿名

2 个站点配置了不同的 AppPools

2 个 web.config 文件

<configuration>  
  <system.webServer>
    <handlers>
        <remove name="FlaskHandler" />
        <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\inetpub\wwwroot\Flask\mysite1\venv\Scripts\python.exe|C:\inetpub\wwwroot\Flask\mysite1\venv\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>
  <appSettings>
    <add key="WSGI_HANDLER" value="app.app" /> <!-- {name_of_file}.{name_of_flask_app}-->
    <add key="PYTHONPATH" value="C:\inetpub\wwwroot\Flask\mysite1" />
    <add key="WSGI_LOG" value="C:\inetpub\wwwroot\Flask\mysite1\app.log" />
  </appSettings>
</configuration>  

<configuration>  
  <system.webServer>
    <handlers>
        <remove name="FlaskHandler" />
        <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\inetpub\wwwroot\Flask\mysite2\venv\Scripts\python.exe|C:\inetpub\wwwroot\Flask\mysite2\venv\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>
  <appSettings>
    <add key="WSGI_HANDLER" value="app.app" /> <!-- {name_of_file}.{name_of_flask_app}-->
    <add key="PYTHONPATH" value="C:\inetpub\wwwroot\Flask\mysite2" />
    <add key="WSGI_LOG" value="C:\inetpub\wwwroot\Flask\mysite1\app.log" />
  </appSettings>
</configuration>  

使用相同的步骤创建 mysite1 和 mysite2。

在 IIS 管理器中,我停止了 mysite1,但 mysite2 没有在浏览器中使用输入 URL 运行。

帮助表示赞赏 1

更多调试

  1. 我打开了失败的请求跟踪

https://docs.microsoft.com/en-us/iis/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis

这些是错误和警告跟踪的日志消息

94. FASTCGI_UNEXPECTED_EXIT

Error

95. SET_RESPONSE_ERROR_DESCRIPTION     22:01:34.515 

Warning
 ErrorDescription="C:\inetpub\wwwroot\Flask\mysite2\venv\Scripts\python.exe - The FastCGI process exited unexpectedly" 22:01:34.515 
96. MODULE_SET_RESPONSE_ERROR_STATUS

Warning
 ModuleName="FastCgiModule", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="The semaphore cannot be set again.
 (0x67)", ConfigExceptionInfo="" 

调试帖子:IIS 上的 Python 烧瓶应用程序无法在 Windows Server 2019 上运行

我不明白运行 wfastcgi.py 的作用,但 mysite1 和 mysite2 的行为方式相同。

The "working" site, runs and does not end
C:\inetpub\wwwroot\Flask\RESTAPI_mysite1\venv\Scripts\python.exe C:\inetpub\wwwroot\Flask\mysite1\venv\lib\site-packages\wfastcgi.py

The "non-working" site, runs and does not end
C:\inetpub\wwwroot\Flask\RESTAPI_mysite2\venv\Scripts\python.exe C:\inetpub\wwwroot\Flask\mysite2\venv\lib\site-packages\wfastcgi.py
  1. 调试帖子:在 Windows 上使用 FastCgiModule 设置 Python 和 Flask 时出现 500 内部服务器错误

这些建议不适用于 mysite2。

帮助表示赞赏 2

标签: flaskiisfastcgiwfastcgi

解决方案


应用程序池很奇怪。也许 site1 应用程序池的一些特殊设置是未知的。即使您手动创建新池,这些设置也不会在新池中配置。

尝试使用 appcmd 将 site1 池复制到新池。(首先停止 site1 池)

  1. 以管理员身份运行命令行。
  2. CD C:\Windows\System32\inetsrv
  3. appcmd.exe list apppool "site1 pool name" /config /xml > D:\AppPoolConfig.xml
  4. appcmd.exe add apppool /name:new pool name /in < D:\AppPoolConfig.xml

然后在 IIS 管理器中启动新池。让 site2 工作。


推荐阅读