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」同样报错
- mysite1(端口9090):VSCode启动、浏览器直接访问均正常
- 报错信息
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>
已执行调试操作
- 开启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=""
- 手动执行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. 优先修正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
相关产品推荐
相关产品推荐

