ALB 后面的 Fast API 中的根路径

Muh*_*min 0 python reverse-proxy aws-application-load-balancer fastapi

我正在 AWS ALB 后面部署一个快速 API 应用程序,侦听器规则路径模式/api/v1/指向快速 API。我的应用程序看起来像这样

from typing import Union
import os
import mysql.connector
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    print("Root path hit")
    return {"App": "Fargate"}


@app.get("/api/v1/")
def read_apiv1():
    print("Root path hit")
    return {"App": "Path Fargate API v1"}

Run Code Online (Sandbox Code Playgroud)

我使用 docker 在 ECS 中部署了应用程序,我的 docker run 命令是

CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80", "--root-path", "/api/v1"]
Run Code Online (Sandbox Code Playgroud)

现在,当我点击后缀为 的 AWS ALB dns 时,我会看到抛出响应的/api/v1/端点。但是,根据快速 API 的文档,它应该使用./api/v1{"App": "Path Fargate API v1"}/

谁能帮助我为什么我会出现这种意想不到的行为?我是否必须/api/v1在所有端点之前手动写入?

小智 5

这就是我添加/api/v1到所有路线的方式:

from sys import prefix
from typing import Union
import os
from fastapi import FastAPI, APIRouter

app = FastAPI()

prefix_router = APIRouter(prefix="/api/v1")

@prefix_router.get("/")
def read_root():
    print("Root path hit")
    return {"App": "Fargate"}


@prefix_router.get("/something/")
def read_apiv1():
    print("Root path hit")
    return {"App": "Path Fargate API v1"}

app.include_router(prefix_router)
Run Code Online (Sandbox Code Playgroud)

此后,当我转到http://127.0.0.1/api/v1/something/路径时,它会自动将我重定向到第二条路线。

  • 您是否也成功设置了 OpenAPI 端点的前缀? (2认同)