falsk windows 服务器部署-解决服务器外无法访问

falsk windows 服务器部署-解决服务器外无法访问

以下是详细分析和解决步骤,帮你排查"服务器外无法访问"的问题,从网络、端口、服务本身等维度逐一确认:

一、先确认核心逻辑:端口是否真的"通"了

不管用 flask run 还是其他 WSGI 服务器,要让外部访问,必须满足 "端口在服务器、网络、防火墙全链路打通" ,按以下步骤逐一验证:

1. 在服务器本机验证端口是否被 Flask 占用

打开服务器的命令提示符(CMD),执行:

bash 复制代码
# 查看 65050 端口是否被 Python/Flask 占用
netstat -ano | findstr "65050"
  • 如果输出里有 LISTENING 状态,且 PID 对应 Python 进程,说明 Flask 确实在监听 65050 端口。
  • 如果没输出,说明 Flask 没启动成功,或端口被其他程序占用了(比如之前的残留进程)。
2. 在服务器本机用 curl 或浏览器访问
  • 用命令行测试 :在服务器 CMD 里执行

    bash 复制代码
    curl http://127.0.0.1:65050

    如果返回 Flask 页面的 HTML 内容,说明服务在本机是正常的。

  • 用浏览器测试 :在服务器上打开浏览器,访问 http://127.0.0.1:65050 或 http://192.168.0.12:65050 ,能打开就说明服务本身没问题,问题在外部网络/防火墙。

二、检查网络链路:公网 IP、端口映射是否正确

公网IP 是公网 IP,需要确保:

1. 确认"公网 IP 确实指向你的服务器"
  • 服务器本机访问 https://www.whatismyip.com ,看显示的公网 IP 是否是 36.147.85.23 。
    • 如果不一致,说明你理解的"映射后的地址"可能有误(比如公网 IP 是路由器/WAF 的,需要在路由器里做端口映射)。
    • 如果一致,继续往下排查。
2. 确认路由器/网关的"端口映射"是否生效(如果服务器在局域网内)

如果你的服务器是在局域网(比如家里/公司内网),公网 IP 是路由器的,必须在路由器里做 "端口映射" :

  • 登录路由器管理后台(一般地址是 192.168.0.1 或 192.168.1.1 ,看路由器型号)。
  • 找到"端口映射""虚拟服务器""NAT 转发"之类的配置项,添加规则:
    • 外部端口:65050(你 Flask 用的端口)
    • 内部 IP:服务器的局域网 IP(比如 192.168.0.12 ,在服务器本机执行 ipconfig 看 IPv4 地址 )
    • 内部端口:65050
    • 协议:TCP
  • 保存后,重启路由器,确保映射规则生效。
3. 用公网工具测试端口是否可访问

在 外部设备(手机/其他电脑,别在服务器本机)访问以下网址,测试 65050 端口是否能被公网访问:

  • https://www.yougetsignal.com/tools/open-ports/
    输入 公网ip 和 65050 ,点"Check"。
    • 如果显示 Port 65050 is open ,说明公网能访问到端口;
    • 如果显示 Port 65050 is closed ,说明端口没打通,问题在防火墙或路由器映射。

三、检查防火墙:Windows 防火墙、云厂商安全组

1. 确认 Windows 防火墙的入站规则

你已经配置了 65050 端口的入站规则,但要确认:

  • 规则的"本地端口"确实是 65050 ,"协议类型"是 TCP 。
  • 规则状态是"已启用"(在"高级安全 Windows 防火墙" → 入站规则里,看规则前面的绿色对勾)。
  • 如果服务器是云主机(比如阿里云、腾讯云),还要检查 云厂商的安全组规则 ,确保放行 65050 端口(很多云主机默认会封禁非 80、443 等端口)。
2. 临时关闭防火墙测试(仅调试用)

为了快速验证是否是防火墙问题,可临时关闭 Windows 防火墙:

  • 控制面板 → 系统和安全 → Windows 防火墙 → 启用或关闭 Windows 防火墙 → 选择"关闭 Windows 防火墙"。
  • 然后在外部设备重新访问 http:/公网ip:65050 ,如果能访问了,说明是防火墙规则没配对;如果还不能,继续往下排查。

四、确认 Flask 服务本身的绑定逻辑

1. 检查 Flask 启动命令

确保启动命令是:

bash 复制代码
flask run --host=0.0.0.0 --port=65050
  • --host=0.0.0.0 是关键,表示 Flask 绑定到服务器的所有网卡,允许外部访问;如果写成 --host=127.0.0.1 或 --host=192.168.0.12 ,就只能本机或局域网访问,公网无法访问。
2. 检查 Flask 代码里的监听逻辑

如果代码里有手动设置 app.run() ,确认参数:

python 复制代码
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=65050, debug=False)
  • host 必须是 0.0.0.0 ,否则会限制访问来源。

五、总结排查流程(按顺序执行)

  1. 本机验证 :服务器本机用 curl 或浏览器访问 http://127.0.0.1:65050 ,确认服务正常。
  2. 局域网验证 :同一局域网的其他设备访问 http://192.168.0.12:65050 ,确认局域网能访问。
  3. 公网端口测试 :用 yougetsignal 测试 36.147.85.23:65050 是否开放。
  4. 防火墙/安全组:确认 Windows 防火墙、云厂商安全组放行 65050 端口。
  5. 端口映射:如果是内网服务器,确认路由器的端口映射规则正确。

按这个流程走一遍,就能定位到具体哪一步"断了",解决后外部就能正常访问 http://公网:65050 啦!如果还有问题,把每一步的测试结果补充出来,就能进一步分析~

相关推荐
晴天的雨.9929 小时前
【Linux】基础开发工具---软件包管理器
linux·运维·服务器
云计算练习生9 小时前
什么是操作系统安全?身份认证、访问控制与审计机
服务器·网络·安全·访问控制·操作系统安全
龙腾-虎跃9 小时前
AI-Vue3-python-flask-Blog 全栈博客项目深度解析:从零搭建你的 AI 博客
人工智能·python·flask
对空六课9 小时前
Vue 组件曝光埋点为什么会重复触发?去重方案与实现思路
服务器·前端·算法·数据分析
Multipath7129 小时前
乾元通轨道交通多链路聚合通信方案
网络·网络协议·5g·智能路由器·信息与通信
Hello_Pyhx9 小时前
Ventoy:Linux制盘与排障
linux·运维·服务器
郭庆汝10 小时前
windows本地部署AgentDesk
windows
笨笨D幸福10 小时前
win11 vhdx/wtg 安装出现问题,提示 Windows 安装程序无法将 Windows 配置为在此计算机的硬件上运行
windows
小义_10 小时前
Linux 补充
linux·服务器
晴天的雨.99210 小时前
【Linux】Shell 命令以及运行原理+权限管理
linux·运维·服务器