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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:16:01