如何在IIS上部署含DeepFace的Python Flask Web API?解决404.3错误
在IIS上部署基于DeepFace的Flask Web API解决404.3错误
问题描述
我有一个基于DeepFace库的Flask Python脚本,在VS Code中运行完全正常,但部署到IIS作为Web API时遇到问题。访问http://localhost/face/face.py时,IIS返回如下错误:
HTTP Error 404.3 - Not Found
由于扩展配置问题,无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载该文件,请添加MIME映射。
已经尝试为.py添加IIS MIME类型,也修改了web.config添加处理程序,但都没生效。
核心代码片段:
@app.route('/face_verification', methods=['POST']) def post_example(): result = DeepFace.verify(param1, param1) try: return result except Exception as e: return str(e)
当前web.config内容:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> <!-- ADD THIS --> </modules> <handlers> <remove name="WebDAV" /> <add name="WebDAV" path="*" verb="GET, POST" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> </handlers> </system.webServer> </configuration>
解决步骤
1. 安装必要组件
- 启用IIS的CGI功能:打开「控制面板」→「程序和功能」→「启用或关闭Windows功能」,勾选「Internet信息服务」→「万维网服务」→「应用程序开发功能」→「CGI」,完成安装。
- 安装并注册FastCGI处理程序:打开管理员命令提示符,执行
pip install wfastcgi,再运行wfastcgi-enable完成注册。
2. 配置IIS站点与应用程序池
- 打开IIS管理器,新建应用程序池:命名为
FaceAPI,.NET CLR版本选择「无托管代码」,管道模式设为「集成」。 - 将Python脚本所在文件夹设为站点物理路径,把站点的应用程序池切换为刚创建的
FaceAPI。
3. 替换web.config配置
用以下内容替换原web.config,注意替换路径参数为你的实际路径:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <remove name="PythonHandler" /> <add name="PythonHandler" path="*.py" verb="*" modules="FastCgiModule" scriptProcessor="C:\PythonXX\python.exe|C:\PythonXX\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> </handlers> <rewrite> <rules> <rule name="FlaskRouting" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="face.py/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> <appSettings> <!-- 替换为你的脚本所在目录 --> <add key="PYTHONPATH" value="C:\inetpub\wwwroot\face" /> <!-- 替换为Flask实例名,格式为[脚本文件名].[app变量名] --> <add key="WSGI_HANDLER" value="face.app" /> <!-- 日志存放路径,需提前创建logs文件夹 --> <add key="WSGI_LOG" value="C:\inetpub\wwwroot\face\logs\wfastcgi.log" /> </appSettings> </configuration>
4. 调整脚本与权限
- 补全Flask脚本的初始化逻辑,确保能正确接收请求参数:
from flask import Flask, request import DeepFace app = Flask(__name__) @app.route('/face_verification', methods=['POST']) def post_example(): # 从请求JSON中获取参数 data = request.get_json() param1 = data.get('param1') param2 = data.get('param2') try: result = DeepFace.verify(param1, param2) return result except Exception as e: return str(e), 500 if __name__ == '__main__': app.run()
- 给
IIS AppPool\FaceAPI账号赋予脚本目录、Python安装目录的读取/执行权限,以及logs文件夹的写入权限。
5. 测试API
部署完成后,直接访问Flask路由地址测试:http://localhost/face/face_verification,通过POST请求传递JSON参数即可。
内容的提问来源于stack exchange,提问作者Bass Alfan
相关产品推荐
相关产品推荐

