在我更详细地描述问题之前;我已经尝试了很多东西,并且在这个问题上花了很多时间。所有其他帮助文章、旧论坛答案以及 Gemini 和 Chatgpt 答案都毫无用处。
情况:
我有机器 A(服务器,使用 fastapi 运行我的 API。应用程序启动没有问题。)下面是控制台输出的屏幕截图。
(详细信息:该应用程序是通过 ssh 启动的。屏幕截图不是在机器 A 上截取的,因为机器 A 正在运行 Ubuntu 服务器,所以我必须 ssh 进入它才能从控制台截取屏幕截图。不过,我也尝试过运行无需 ssh,只需在机器 A 上连接屏幕和键盘即可。)
urllib3 警告是由于与 torch 的版本冲突造成的,据我所知,不会产生任何影响。以防万一,我也尝试在 venv 中运行所有内容,这消除了警告,但问题仍然存在。
从机器 B(前端,在我的笔记本电脑上运行,现在由于没有前端,我们正在使用 Postman 来测试功能)我发送一个包,供用户注册到后端。
问题
在 Postman 中,这显示:
当我发送请求时,机器A(后端)的控制台中没有任何内容,并且几分之一秒后邮递员中出现错误。 机器A上的防火墙已完全禁用,并且已在iptables中进行了适当的设置
我尝试了什么?
我有;
更改端口
启用防火墙
使用过CORS中间件
无需中间件即可使用
在路由器上打开 TCP 端口
将 uvicorn 的 --host 设置为 0.0.0.0 并设置为机器 A 的私有 IP
将postman中的url设置为0.0.0.0或机器A的私有IP
在路由器上打开端口后尝试跨网络连接,使用公网IP和端口8000
使用了允许 [“*”] 来源的 CORS 中间件配置(我读到,使用 * 来源仅在不允许凭据时才有效,因此我尝试了可能适用于此限制的所有设置组合)
将 DNS 地址从标准更改为 9.9.9.9
似乎没有什么可以改变任何事情......结果绝对是零变化,无论我改变了什么
我得出的结论是,这是路由到主机(后端)的问题,而不是 python 脚本/fastAPI 或 uvicorn 的问题,因为当我尝试从同一台机器(机器 A,本地主机)发送数据包时它确实有效)但不能跨机器或跨网络。我的结论的另一个原因是,当 uvicorn 应用程序运行时和不运行时,邮递员中的错误没有区别。
非常感谢任何帮助!
你只需要使用这些标志运行 uvicorn
uvicorn main:app --host 0.0.0.0 --port $PORT