You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server IIS部署两个Flask站点仅一正常另一报FastCGI 500错误

问题背景
  • 运行环境:Windows Server DataCenter 2019、Python 3.7.6
  • IIS共配置2个Flask站点,运行情况如下:
    • mysite1(端口9090):VSCode启动、浏览器直接访问均正常
      • VSCode直接启动运行正常
      • 浏览器访问###.###.###.###:9090正常
    • mysite2(端口9566):仅VSCode启动正常
      • VSCode直接启动运行正常
      • 浏览器访问###.###.###.###:9566报500错误,IIS管理器点击「浏览 *:9566」同样报错
  • 报错信息

HTTP Error 500.0 - Internal Server Error
具体提示:C:\inetpub\wwwroot\Flask\mysite2\venv\Scripts\python.exe - The FastCGI process exited unexpectedly
详细错误参数:

  • 模块:FastCgiModule
  • 通知:ExecuteRequestHandler
  • 处理程序:Python FastCGI
  • 错误代码:0x00000067
  • 请求URL:http://localhost:9566/
  • 物理路径:C:\inetpub\wwwroot\Flask\mysite2
  • 登录方法:Anonymous
  • 登录用户:Anonymous
  • 两个站点使用独立的应用程序池配置

两个站点web.config配置

<!-- mysite1 配置 -->
<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>  

<!-- mysite2 配置 -->
<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>  

已执行调试操作

  1. 开启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="" 
  1. 手动执行wfastcgi.py验证,两个站点执行后均持续运行无退出:
# 正常站点执行命令
C:\inetpub\wwwroot\Flask\RESTAPI_mysite1\venv\Scripts\python.exe C:\inetpub\wwwroot\Flask\mysite1\venv\lib\site-packages\wfastcgi.py
# 异常站点执行命令
C:\inetpub\wwwroot\Flask\RESTAPI_mysite2\venv\Scripts\python.exe C:\inetpub\wwwroot\Flask\mysite2\venv\lib\site-packages\wfastcgi.py
  1. 已参考现有同类问题排查方案,均未解决问题。

排查解决方案

1. 优先修正web.config配置错误

mysite2的WSGI_LOG配置路径错误指向了mysite1的日志文件:

<!-- 错误配置 -->
<add key="WSGI_LOG" value="C:\inetpub\wwwroot\Flask\mysite1\app.log" />

修改为mysite2自身的目录路径:

<!-- 正确配置 -->
<add key="WSGI_LOG" value="C:\inetpub\wwwroot\Flask\mysite2\app.log" />

两个站点的FastCGI进程同时写同一个日志文件会触发文件锁冲突,直接导致进程异常退出,这是报错0x00000067(信号量重复设置)的典型诱因。

2. 检查目录权限配置

给mysite2的根目录、虚拟环境目录添加对应应用程序池标识的读取&执行权限:

  • 打开mysite2根目录属性→安全→编辑→添加
  • 输入对象名称为IIS AppPool\你的mysite2应用程序池名称,检查名称后确认
  • 勾选允许「读取 & 执行、列出文件夹内容、读取」权限,保存生效

3. 排查FastCGI处理程序冲突

两个站点使用了相同的处理程序名称Python FastCGI,如果该处理程序是在IIS全局层级配置的,会出现站点间冲突:

  • 打开IIS管理器→点击根服务器节点→FastCGI设置
  • 确认已分别为mysite1和mysite2的python.exe路径添加了独立的FastCGI映射
  • 点击mysite2站点节点→处理程序映射,确认Python FastCGI是仅作用于当前站点的局部配置,不要继承全局同名配置

4. 验证应用启动逻辑

手动激活mysite2的虚拟环境后,执行启动脚本验证有没有依赖缺失、代码报错:

# 激活虚拟环境
C:\inetpub\wwwroot\Flask\mysite2\venv\Scripts\activate.bat
# 运行启动文件
python C:\inetpub\wwwroot\Flask\mysite2\app.py

如果有报错直接修复对应问题即可。

完成以上操作后,重启mysite2的应用程序池和站点,再次访问验证。


内容的提问来源于stack exchange,提问作者G. Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 22:51:00