在IIS上运行FastAPI应用出现Bad Gateway错误该如何解决?
排查步骤及解决方案
- 核心配置修正(最可能的报错原因)
IIS的HttpPlatformHandler会为后端进程自动分配随机端口,存储在环境变量%HTTP_PLATFORM_PORT%中,你当前的uvicorn启动参数未绑定该端口,导致IIS无法转发请求到FastAPI服务。将web.config中httpPlatform的arguments属性修改为:
arguments="-m uvicorn main:app --host 127.0.0.1 --port %HTTP_PLATFORM_PORT%"
如果你的应用使用了虚拟环境,需要把processPath的值替换为虚拟环境内python.exe的完整路径。
权限检查
给以下两个目录授予IIS运行用户(对应站点应用程序池的身份用户、或IUSR用户)读取和执行权限:- Python安装目录(
c:\Python\Python310\) - FastAPI应用的站点根目录
- Python安装目录(
基础运行验证
手动打开服务器命令提示符,cd到站点根目录,执行以下命令验证应用是否能正常启动:
c:\Python\Python310\python.exe -m uvicorn main:app
如果执行时报模块不存在等错误,说明对应依赖未正确安装到系统Python环境中,执行pip install fastapi uvicorn安装所需依赖即可。
日志排查
你已经开启了stdoutLogEnabled="true",直接到站点根目录下查找生成的stdout日志文件,日志中会记录应用启动时的具体错误信息,可直接定位问题。HttpPlatformHandler验证
打开IIS的模块管理界面,确认HttpPlatformHandler已正确安装,未安装的话需要先完成该组件的安装才能正常转发请求。
修改后可用的web.config参考:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/> </handlers> <httpPlatform processPath="c:\Python\Python310\python.exe" arguments="-m uvicorn main:app --host 127.0.0.1 --port %HTTP_PLATFORM_PORT%" stdoutLogEnabled="true" startupTimeLimit="60" processesPerApplication="16"> <environmentVariables> <environmentVariable name="TEMPLATE_STRING" value="some-random-string-text" /> </environmentVariables> </httpPlatform> </system.webServer> </configuration>
内容的提问来源于stack exchange,提问作者vrunnn
相关产品推荐
相关产品推荐

