Python中如何在Windows IIS服务器下配置Flask WSGI环境

  • 现在的旧 Web 系统是在WindowsIIS服务器下运行。
  • 系统和语言老旧翻新想上Python3.6 + Flask +MongDB,现在所有客户的服务器也是 Windows 下跑的。所以也想在WindowsIIS上搭建FLask环境,但是 WSGI 好像对 IIS 不太友好。什么fastCGIUWSGI之类的。
  • 有没有哪位同学在 IIS 下搭建过Flask,WSGI环境,来给点建议,谢谢

Python中如何在Windows IIS服务器下配置Flask WSGI环境

18 回复

难道不是应该 IIS 直接反代 Python 自己的 http 服务吗?


要在Windows IIS服务器下配置Flask WSGI环境,你需要安装并配置几个关键组件。下面是一个完整的步骤指南和代码示例。

首先,确保你的服务器上已经安装了Python和pip。然后,通过pip安装必要的包:

pip install flask wfastcgi

接下来,在你的Flask应用目录中创建一个web.config文件,这是IIS的配置文件。假设你的Flask应用主文件名为app.py,内容如下:

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>

配置步骤:

  1. 将你的Flask应用文件(如app.py)和web.config文件放在IIS的网站目录下(例如C:\inetpub\wwwroot\YourFlaskApp)。
  2. 在IIS管理器中,添加一个新的网站或应用程序,指向该目录。
  3. 确保IIS已经安装了“CGI”和“FastCGI”模块(可以通过“添加角色和功能”安装)。
  4. 在IIS的“处理程序映射”中,确认FlaskFastCGI处理器已正确添加并启用。
  5. 可能需要根据你的Python安装路径调整web.config中的scriptProcessorPYTHONPATH值。

最后,重启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 不就是为生产环境而生的么…要是不能用在生产环境为什么还这么多人这么多公司用呢?

回到顶部