FastAPI运行在uvicorn上,无法跨机器/网络连接

问题描述 投票:0回答:1

在我更详细地描述问题之前;我已经尝试了很多东西,并且在这个问题上花了很多时间。所有其他帮助文章、旧论坛答案以及 Gemini 和 Chatgpt 答案都毫无用处。

情况

我有机器 A(服务器,使用 fastapi 运行我的 API。应用程序启动没有问题。)下面是控制台输出的屏幕截图。

(详细信息:该应用程序是通过 ssh 启动的。屏幕截图不是在机器 A 上截取的,因为机器 A 正在运行 Ubuntu 服务器,所以我必须 ssh 进入它才能从控制台截取屏幕截图。不过,我也尝试过运行无需 ssh,只需在机器 A 上连接屏幕和键盘即可。)

enter image description here

urllib3 警告是由于与 torch 的版本冲突造成的,据我所知,不会产生任何影响。以防万一,我也尝试在 venv 中运行所有内容,这消除了警告,但问题仍然存在。

从机器 B(前端,在我的笔记本电脑上运行,现在由于没有前端,我们正在使用 Postman 来测试功能)我发送一个包,供用户注册到后端。

enter image description here

enter image description here

问题

在 Postman 中,这显示:

enter image description here

当我发送请求时,机器A(后端)的控制台中没有任何内容,并且几分之一秒后邮递员中出现错误。 机器A上的防火墙已完全禁用,并且已在iptables中进行了适当的设置

我尝试了什么?

我有;

  • 更改端口

  • 启用防火墙

  • 使用过CORS中间件

  • 无需中间件即可使用

  • 在路由器上打开 TCP 端口

  • 将 uvicorn 的 --host 设置为 0.0.0.0 并设置为机器 A 的私有 IP

  • 将postman中的url设置为0.0.0.0或机器A的私有IP

  • 在路由器上打开端口后尝试跨网络连接,使用公网IP和端口8000

  • 使用B机(前端)ping命令检查后端是否可达,结果是:enter image description here

  • 使用了允许 [“*”] 来源的 CORS 中间件配置(我读到,使用 * 来源仅在不允许凭据时才有效,因此我尝试了可能适用于此限制的所有设置组合)

  • 检查后端是否正在侦听端口 8000(以及所有 IP 组合):enter image description here

  • 将 DNS 地址从标准更改为 9.9.9.9

似乎没有什么可以改变任何事情......结果绝对是零变化,无论我改变了什么

我得出的结论是,这是路由到主机(后端)的问题,而不是 python 脚本/fastAPI 或 uvicorn 的问题,因为当我尝试从同一台机器(机器 A,本地主机)发送数据包时它确实有效)但不能跨机器或跨网络。我的结论的另一个原因是,当 uvicorn 应用程序运行时和不运行时,邮递员中的错误没有区别。

非常感谢任何帮助!

python networking fastapi uvicorn
1个回答
0
投票

你只需要使用这些标志运行 uvicorn

uvicorn main:app --host 0.0.0.0 --port $PORT
© www.soinside.com 2019 - 2024. All rights reserved.