当前位置: 当前位置:首页 > 热点 > 无法配置IIS来支持Python程序的运行正文

无法配置IIS来支持Python程序的运行

作者:综合 来源:休闲 浏览: 【大 中 小】 发布时间:2026-10-17 06:39:49 评论数:

我把一个ASP.NET项目迁移到Windows Server 2019上,无法顺手想在同一站点挂几个Python脚本。配置IIS 10,持Pn程Python 3.9,运行官方文档翻了个遍,无法折腾了整整一个下午,配置最后发现根本跑不起来。持Pn程网上那些教程全是运行复制粘贴,照着做,无法每一步都报错。配置

核心问题出在IIS的持Pn程处理器映射上。你要在“处理程序映射”里添加一个脚本映射,运行请求路径写*.py,无法可执行文件指向python.exe,配置再加个-u参数。持Pn程听起来简单?我试了,IIS直接返回500.19,配置错误。原因是Python解释器不是ISAPI过滤器,IIS期望的是原生模块或CGI程序。你得先安装wfastcgi,然后运行wfastcgi-enable,它会帮你生成一个FastCgiModule的配置。但这里有个坑——wfastcgi默认只处理Django的wsgi.py,你要写个简单的hello.py,它根本不认。

我换了个思路,用HttpPlatformHandler模块。这个模块是微软官方推荐的,专门用来把请求转发给外部进程。配置看起来也合理:在web.config里写<httpPlatform processPath="C:\Python39\python.exe" arguments="app.py" />。结果呢?进程能启动,但IIS和Python进程之间的通信管道总是断。查事件日志,发现Python进程莫名其妙地退出,连个异常都不抛。后来我才知道,HttpPlatformHandler需要Python脚本自己监听一个端口,然后IIS把请求转发过去,这等于你要自己写一个WSGI服务器,太扯了。

最恶心的是权限问题。就算你配置对了,IIS的工作进程(w3wp.exe)默认以ApplicationPoolIdentity运行,这个账户对C:\Python39目录只有只读权限。Python需要写__pycache__缓存文件,没权限就直接崩。你得手动给整个Python安装目录加上IIS_IUSRS的修改权限。这还没完,如果你用虚拟环境,路径里带空格,IIS解析参数时会把路径截断,又得用短文件名(8.3格式)绕过。

另一个隐蔽的问题出在URL重写上。我项目里有个rewrite规则,把所有请求都指向index.php,结果Python脚本的请求也被拦了。你必须在规则里加个条件,排除.py后缀。这个坑不踩一次根本想不到。

折腾到最后,我彻底放弃在IIS上跑Python了。改用nginx反代到本地的uvicorn,五分钟就通了。说实话,IIS对Python的支持就是个半成品,适合跑跑Flask开发测试,生产环境还是别指望它。如果你非要用IIS,建议直接装个WSL,在Linux子系统里跑Python,然后用IIS的ARR反向代理,至少比原生配置靠谱十倍。