在 Windows 系统上使用 IIS 发布基于 Python Flask 的网站,需通过 FastCGI 和 wfastcgi 桥接 IIS 与 Python。
一、环境准备
- 安装 IIS
- 打开 控制面板 > 程序和功能 > 启用或关闭 Windows 功能。
- 勾选 Internet Information Services,展开应用程序开发功能,勾选 CGI。
- 安装 Python
- 下载
官网下载地址:https://www.anaconda.com/download
中科大镜像源官网:https://mirrors.ustc.edu.cn/anaconda/archive/
以上两个网址都可下载,我下载的是中科大镜像Anaconda3-2024.10-1-Windows-x86_64.exe - 配置环境变量,此电脑 > 右键 > 属性,接下来配置如下图。
- 下载
- 安装 Flask 和 wfastcgi
pip install flask wfastcgi
二、启用 wfastcgi
- 以管理员身份运行命令提示符:
记录输出中的 Python 路径 和 wfastcgi 路径(如wfastcgi-enable
C:\Python39\python.exe|C:\Python39\Lib\site-packages\wfastcgi.py
)。
三、部署 Flask 应用
- 目录结构示例:
C:\MyFlaskApp\ │ app.py # Flask 主程序 │ web.config # IIS 配置文件 ├── static/ # 静态文件(CSS/JS/图片) └── templates/ # HTML 模板
- Flask 应用示例(app.py):
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('index.html') if __name__ == '__main__': app.run()
- 配置 web.config
在应用根目录创建web.config
,替换<Python路径>
和<wfastcgi路径>
:<configuration> <system.webServer> <handlers> <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="<Python路径>|<wfastcgi路径>" resourceType="Unspecified" /> </handlers> <security> <requestFiltering> <requestLimits maxAllowedContentLength="1073741824" /> <!-- 允许大文件上传 --> </requestFiltering> </security> </system.webServer> <appSettings> <add key="WSGI_HANDLER" value="app.app" /> <!-- Flask 实例的模块路径 --> <add key="PYTHONPATH" value="C:\MyFlaskApp" /> <!-- 应用根目录 --> <add key="WSGI_LOG" value="C:\MyFlaskApp\logs.txt" /> <!-- 日志文件(可选) --> </appSettings> </configuration>
四、配置 IIS 网站
-
创建新网站
-
打开 IIS 管理器,右键 网站 > 添加网站。
-
设置 站点名称、物理路径(应用根目录)、端口(如 80)。
-
-
配置应用程序池
-
在 应用程序池 中,找到该网站对应的池,右键 基本设置:
-
将 .NET CLR 版本 改为 无托管代码。
-
将 标识 改为有权限访问应用目录的账户(如 LocalSystem)。
-
-
-
处理静态文件
- 确保 IIS 的 静态内容 功能已启用(在 Windows 功能中检查)。
-
重启 IIS
iisreset
五、测试与排错
-
访问网站
在浏览器输入http://localhost
查看是否正常。 -
常见错误排查:
- 500 错误:检查 web.config 中的路径和 WSGI_HANDLER 是否正确。
- 静态文件 404:确保 IIS 静态文件模块已安装,且文件路径正确。
- 权限问题:右键应用目录 > 属性 > 安全,添加 IIS_IUSRS 并赋予读写权限。
- 查看日志:检查 C:\MyFlaskApp\logs.txt 或 IIS 的 失败请求跟踪。
六、高级配置(本地可不配置)
- 使用虚拟环境:在 web.config 中指定虚拟环境的 Python 路径。
- HTTPS:在 IIS 中绑定 SSL 证书。
- URL 重写:通过 IIS 的 URL 重写模块 配置自定义路由规则。
完成以上步骤后,你的 Flask 应用即可通过 IIS 在 Windows 上稳定运行。