【问题标题】:Running FastAPI under IIS在 IIS 下运行 FastAPI
【发布时间】:2020-12-14 16:48:45
【问题描述】:

目前我在一些内部 IIS 站点的子目录下使用 Flask 运行了一个简单的 API。现在我认为使用 FastAPI 重写该 API 可能是一些想法。在 IIS 上运行 API 并不是一件难事,您必须在 IIS 配置中创建一个web.config 等等。我知道这是使用 WSGI,但是否也有可能使用 ASGI(可能与 uvicorn 和 gunicorn 结合使用)?

重要的一点是它必须在某个子目录下运行,称为<iis_internal_company_server>/myapi。在 Flask 中,我包含了一个众所周知的前缀中间件,它可以按预期工作。我正在为 FastAPI 寻找类似的东西,这可能是使用 app.include_router(router, prefix='/myapi') 的情况吗?

进行了一些研究,但没有找到解决方案。也许你们中的一个人可能对此有一些经验。如果有,请分享。非常感谢。

问候,托马斯

【问题讨论】:

标签: python iis wsgi fastapi asgi


【解决方案1】:

我的答案太长,无法发表评论,但这不是一个确定的答案。

  1. 我没有完全理解 WSGI/ASGI 的东西?您还想将 Flask api 与 Fastapi 一起运行吗?然后 Fastapi 可以做到。检查文档https://fastapi.tiangolo.com/advanced/wsgi/。特此报告示例
from fastapi import FastAPI
from fastapi.middleware.wsgi import WSGIMiddleware
from flask import Flask, escape, request

flask_app = Flask(__name__)

@flask_app.route("/")
def flask_main():
    name = request.args.get("name", "World")
    return f"Hello, {escape(name)} from Flask!"

app = FastAPI()

@app.get("/v2")
def read_main():
    return {"message": "Hello World"}

app.mount("/v1", WSGIMiddleware(flask_app))
  1. 子目录是什么意思?您可以将代码放在您想要的任何目录中,然后从那里运行它。相反,如果你想让两个应用程序在同一个 IP 地址上运行,据我所知,你唯一的机会是运行一个网关,它将以 /api 开头的请求转发到 Fastapi 服务器,所有其他请求到其他服务器

根据评论编辑

  1. How can I fix FastAPI application error on Apache WSGI?。服务器需要与 ASGI 工作人员兼容。我不知道你运行的是哪个网络服务器,所以我无话可说。

  2. 这一点应该已经回答了你的问题,不是吗?

【讨论】:

  • 嗨,首先,我想用 FastAPI 替换所有 Flask 的东西。但是,IIS 似乎只支持同步请求,而 FastAPI 倾向于使用 ASGI(异步请求),所以我不确定它是否可以正常工作。对于子目录,我的意思是localhost/subdirectory。意味着对于普通请求,我可能必须为我配置的所有路径添加前缀,否则它们可能指向localhost
【解决方案2】:

在我的情况下,在 IIS 上部署使用 wfastcgi.py

首先请安装a2wsgi

pip install a2wsgi

在 main.py 中

from fastapi import FastAPI
from a2wsgi import ASGIMiddleware

app = FastAPI()

@app.get("/")
def read_main():
 return {"message": "Hello World"}

wsgi_app = ASGIMiddleware(app)

在 web.config 中在 appSettings 中添加这个键

<add key="WSGI_HANDLER" value="main.wsgi_app" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多