Python中如何在Windows IIS服务器下配置Flask WSGI环境
- 现在的旧 Web 系统是在
WindowsIIS服务器下运行。 - 系统和语言老旧翻新想上
Python3.6 + Flask +MongDB,现在所有客户的服务器也是 Windows 下跑的。所以也想在WindowsIIS上搭建FLask环境,但是 WSGI 好像对 IIS 不太友好。什么fastCGI,UWSGI之类的。 - 有没有哪位同学在 IIS 下搭建过
Flask,WSGI环境,来给点建议,谢谢
Python中如何在Windows IIS服务器下配置Flask WSGI环境
难道不是应该 IIS 直接反代 Python 自己的 http 服务吗?
要在Windows IIS服务器下配置Flask WSGI环境,你需要安装并配置几个关键组件。下面是一个完整的步骤指南和代码示例。
首先,确保你的服务器上已经安装了Python和pip。然后,通过pip安装必要的包:
pip install flask wfastcgi
接下来,在你的Flask应用目录中创建一个web.config文件,这是IIS的配置文件。假设你的Flask应用主文件名为app.py,内容如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Flask on IIS!"
if __name__ == '__main__':
app.run()
web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="FlaskFastCGI"
path="*"
verb="*"
modules="FastCgiModule"
scriptProcessor="C:\Python39\python.exe|C:\Python39\Lib\site-packages\wfastcgi.py"
resourceType="Unspecified"
requireAccess="Script" />
</handlers>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="env" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="app.app" />
<add key="PYTHONPATH" value="C:\inetpub\wwwroot\YourFlaskApp" />
</appSettings>
</configuration>
配置步骤:
- 将你的Flask应用文件(如
app.py)和web.config文件放在IIS的网站目录下(例如C:\inetpub\wwwroot\YourFlaskApp)。 - 在IIS管理器中,添加一个新的网站或应用程序,指向该目录。
- 确保IIS已经安装了“CGI”和“FastCGI”模块(可以通过“添加角色和功能”安装)。
- 在IIS的“处理程序映射”中,确认
FlaskFastCGI处理器已正确添加并启用。 - 可能需要根据你的Python安装路径调整
web.config中的scriptProcessor和PYTHONPATH值。
最后,重启IIS服务,你的Flask应用就应该可以通过IIS访问了。
总结:配置的关键是正确设置web.config和IIS处理程序映射。
没在 IIS 试过。
以前用 Apache + mod_wsgi 搭过。
服务器配置接触少,直接反代不太理解,就是说配置起来可行,不太难吗
Apache 下的 mod cgi 配置好像挺流行的
给公司做小项目时部署过,用 wfastcgi,微软出品。
另外说一下,flask 自带的 Web server 别用在生产环节,直接反代虽然可行但不可取。
原来还有 wfastcgi。
下面这个博客看起来不错可以参考。
使用 wfastcgi 在 IIS 上部署 Python Flask 应用
https://liulixiang1988.github.io/shi-yong-wfastcgizai-iisshang-bu-shu-python-flaskying-yong.html
先想想为什么要用 WSGI 或者其他 CGI。如果没有那么的必要,可以用 gevent 或者 gunicorn 直接启动为 HTTP 服务。在此之前是不是有必要用 IIS,看你自己的产品或者程序的运行情况。比如 IIS 还要处理前端。
请教一下,不用 WSGI 用什么? gunicorn 和 gevent 怎么在 windows 下跑?
我的情况是前提下必须是 Windows,然后最理想的是继续用 IIS 服务器
是我手残,Windows 下不能 gunicorn,gevent 也不那么好用,更不要提 uwsgi 了。或许你可以参考一下 stack overflow 上老哥们的意见,https://stackoverflow.com/questions/6823316/python-on-iis-how
大概越过 IIS 直接用 Python 做 HTTP 服务更好一些。
我手残了,Windows 下别用这些依赖来搞了,直接 Python 启 HTTP 服务更好。
或者 Windows Server 上启动一个 Linux 虚拟机来运行 Flask 应用。(如果 Windows Server 已经是虚拟机,不能嵌套虚拟化,还是算了。
哥给你说一下吧,当年也被这事儿折腾的够呛。
如果不太要求性能,最省事的方案就是把 IIS 停了服务,
直接安装一个绿色 Apache 然后用 Mod_WSGI 这个网上可以找到编译好的插件直接放 apache 目录里面, 设置一下 load module 就可以用了。这方案比较老旧,性能低,但是配置非常省事,全是绿色的。
百度 Windows+Apache+mod_wsgi+Flask
和这个类似的也有用 nginx FastCGI 的方案,因为 windows 没有 epoll 只能用 select,所以 nginx 的 windows 版也是打个酱油而已。
百度 Windows 下 nginx+django+flup 搭建与配置
还有一个方案是用 IIS,wFastCGI
官方
https://docs.microsoft.com/en-us/iis/configuration/system.webServer/fastCgi/application/
https://www.cnblogs.com/xiaolecn/p/5111076.html
其实历史上还有个很 B 的东西叫 HiconZoo
http://www.helicontech.com/articles/running-django-on-windows-with-performance-tests/
但是这折腾起来有点小复杂,建议不要弄了。
这个用 docker 来跑不是更好么?
在生产环境用 docker 好吗,性能不会有影响吗
…docker 不就是为生产环境而生的么…要是不能用在生产环境为什么还这么多人这么多公司用呢?

