希望您能帮助我,这是我遇到的问题:
我的前端和后端服务器都在同一个 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
我找到了本指南,但似乎这与我的问题根本无关。至少我是这么理解的。
任何帮助表示赞赏。提前致谢。
设置:
所以我有一个由客户端对象组成的客户端数组。还有两个异步函数,一个用于处理来自 WebSocket 的传入消息,另一个用于使用给定的客户端对象执行一些 API 调用。
当某个消息从 WebSocket 连接到达时,function_a应该检测到它并在client 数组中启动for 循环。对于客户端数组中的每个客户端对象,我想触发function_b。但function_b应该为每个客户端并发运行。
示例代码:
clients = {}
async def function_a(ws_message): # this is being called each time when a new message arrives
if ws_message == 'signal_message':
for client in clients:
await function_b(client)
async def function_b(client):
# get client parameters
# make an API request with those parameters
Run Code Online (Sandbox Code Playgroud)
更新|| 使用asyncio.gather()编写代码 …