如何在 NGINX 代理后面访问 FastAPI SwaggerUI 文档?

Alp*_*urk 6 nginx swagger-ui fastapi

希望您能帮助我,这是我遇到的问题:

我的前端和后端服务器都在同一个 AWS EC2 实例上运行。因此,我创建了一个如下的 NGINX 配置:

server {
        server_name NAME;
        listen 80 default_server;
        location / {
                proxy_pass http://127.0.0.1:5000;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_http_version 1.1;
        }
        location /api/ {
                proxy_pass http://127.0.0.1:8000;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
        }
}
Run Code Online (Sandbox Code Playgroud)

因此,对“http://public_ip/api/”的任何请求都会路由到 FastAPI 后端服务器,而对另一个端点的所有其他请求都会路由到前端 SPA。

这在大多数情况下效果很好。但是,如果我尝试访问 FastAPI “/api/docs”“/api/redoc”路由,则会出现问题。例如,当我调用“/api/docs”端点时,有一个对“http://public_ip/openapi.json”地址的请求。显然这不是以“/api”开头的端点。因此 NGINX 会阻止它并提出错误的请求。

https://fastapi.tiangolo.com/advanced/behind-a-proxy/#about-proxies-with-a-stripped-path-prefix

我找到了本指南,但似乎这与我的问题根本无关。至少我是这么理解的。

任何帮助表示赞赏。提前致谢。

Alp*_*urk 4

“openapi_url”参数传递给 FastAPI() 似乎是一个不错的解决方案。传递了openapi_url= '/api/openapi.json'并且它对于文档和重做都是固定的。任何其他/更好的解决方案来处理可能发生的所有重定向都是值得赞赏的。

api = FastAPI(title="API_NAME",
              description="API_DESC",
              version="0.2.0",
              docs_url='/api/docs',
              redoc_url='/api/redoc',
              openapi_url='/api/openapi.json')
Run Code Online (Sandbox Code Playgroud)