Skip to main content
 首页 » 编程设计

python之Windows Server 2012 上的 Flask、wfastcgi 和 IIS

2025年05月04日22lonelyxmas

我正在尝试在 Windows Server 2012 上的 IIS 上部署一个 flask 服务。到达这一点:

  1. pip 安装 flask(Python 版本 2.7 和 3 已经安装。)
  2. pip安装wfastcgi
  3. 运行 wfastcgi-enable
  4. 在IIS下建立了一个新站点
  5. 为 wfastcgi 添加了一个处理程序
  6. 修改后的 Web.config

从本地主机运行返回我期望的输出。但是,当我从sitename访问该网站时,返回如下错误(省略路径):

Error occurred while reading WSGI handler: 
 
Traceback (most recent call last): 
  File "wfastcgi.py", line 791, in main 
    env, handler = read_wsgi_handler(response.physical_path) 
  File "wfastcgi.py", line 633, in read_wsgi_handler 
    handler = get_wsgi_handler(os.getenv("WSGI_HANDLER")) 
  File "wfastcgi.py", line 586, in get_wsgi_handler 
    raise Exception('WSGI_HANDLER env var must be set') 
Exception: WSGI_HANDLER env var must be set 

无论是在服务器上还是在域中的另一台机器上都是这种情况。似乎当从本地主机以外的任何地方请求应用程序时,环境都无法访问。没有任何内容写入 wfastcgi 日志。

我在下面包含了 app.py 和 Web.config。我在这里省略了 scriptProcessor 路径,但它被设置为从 wfastcgi-enable 返回的值。

从本地主机运行时,环境可用。 在 locahost 之外调用时如何使环境对应用可用?

app.py

from flask import Flask   
myapp = Flask(__name__) 
 
@myapp.route("/hello")  
def hello(): 
  return "Hello from flask!" 
 
if __name__ == "__main__":         
  myapp.run(port=8080) 

Web.config

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <appSettings> 
        <add key="WSGI_HANDLER" value="app.myapp" /> 
        <add key="PYTHONPATH" value="c:/inetpub/wwwroot/flask-services/" /> 
        <add key="WSGI_LOG" value="C:/TMP/logs/app.log" /> 
    </appSettings> 
    <system.webServer> 
        <handlers> 
            <add name="python-wfastcgi" path="*" verb="*" modules="FastCgiModule" scriptProcessor="[Omitted]" resourceType="Unspecified" requireAccess="Script" /> 
        </handlers> 
    </system.webServer> 
</configuration> 

请您参考如下方法:

我们最近在使用 IIS 7、Flask 0.12 和 Python 3.6.4 时遇到了类似的问题。您的 web.config 看起来不错。两个建议:

  1. 为你的脚本处理器使用一个virtualenv。它避免了使用系统级 Python 安装的副作用。这样调试起来更容易。
  2. 在 IIS 中仔细检查 IIS_IUSRS 和 IUSR 对您的 Python 路径中的文件夹具有修改权限。