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

发布于:2025-08-05 ⋅ 阅读:(21) ⋅ 点赞:(0)

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

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

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

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

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

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

# 查看 65050 端口是否被 Python/Flask 占用
netstat -ano | findstr "65050"
  • 如果输出里有 LISTENING 状态,且 PID 对应 Python 进程,说明 Flask 确实在监听 65050 端口。
  • 如果没输出,说明 Flask 没启动成功,或端口被其他程序占用了(比如之前的残留进程)。
2. 在服务器本机用 curl 或浏览器访问
  • 用命令行测试:在服务器 CMD 里执行
    curl http://127.0.0.1:65050
    
    如果返回 Flask 页面的 HTML 内容,说明服务在本机是正常的。
  • 用浏览器测试:在服务器上打开浏览器,访问 http://127.0.0.1:65050http://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.1192.168.1.1 ,看路由器型号)。
  • 找到“端口映射”“虚拟服务器”“NAT 转发”之类的配置项,添加规则:
    • 外部端口:65050(你 Flask 用的端口)
    • 内部 IP:服务器的局域网 IP(比如 192.168.0.12 ,在服务器本机执行 ipconfigIPv4 地址
    • 内部端口:65050
    • 协议:TCP
  • 保存后,重启路由器,确保映射规则生效。
3. 用公网工具测试端口是否可访问

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

  • https://www.yougetsignal.com/tools/open-ports/
    输入 公网ip65050 ,点“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 启动命令

确保启动命令是:

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() ,确认参数:

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 啦!如果还有问题,把每一步的测试结果补充出来,就能进一步分析~


网站公告

今日签到

点亮在社区的每一天
去签到