You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure虚拟机上Flask应用HTTPS公网访问失败求助

排查Azure虚拟机上Flask HTTPS公网无法访问的问题

以下是针对你遇到的问题的具体排查方向:

1. 检查Azure网络安全组(NSG)入站规则

  • 确认NSG的443端口入站规则源地址范围设置为Any或你需要的公网IP段,不要仅限虚拟机内网段。很多时候会不小心把源IP限制在内网,导致公网流量被拦截。
  • 检查规则优先级:如果存在更高优先级的拒绝类规则(比如拒绝所有入站流量的规则),会覆盖443的允许规则,需要调整优先级。
  • 验证规则的协议是TCP,端口范围明确为443,目标地址指向虚拟机的内网IP或Any。

2. 排查虚拟机本地防火墙

  • Linux系统:执行sudo ufw allow 443/tcp开放端口,或者用iptables -L -n查看规则,确保存在允许443端口入站的条目。
  • Windows系统:打开防火墙高级设置,手动添加允许TCP 443端口的入站规则,确保规则应用到公网接口。

3. 特权端口权限问题

  • 443属于1-1024的特权端口,普通用户运行Flask时可能没有绑定权限。即使内网能访问,也可能存在绑定范围受限的情况:
    • 测试方案:改用非特权端口(如5001),配置app.run(host='0.0.0.0', port=5001, ssl_context='adhoc'),同时在NSG开放5001端口,若公网能访问,则说明是特权端口权限问题。
    • 解决方法:使用sudo运行Flask(Linux),或者通过反向代理(如Nginx)处理443端口,再转发到Flask的非特权端口。

4. 验证Flask端口监听状态

  • 用netstat -tulpn | grep :443(Linux)或netstat -ano | findstr :443(Windows)检查端口监听情况:
    • 确保Flask进程监听的是0.0.0.0:443,而不是仅127.0.0.1:443或内网IP。如果只监听内网IP,公网流量无法到达。
    • 查看Flask启动日志,确认是否有Running on all addresses (0.0.0.0)的提示,验证host='0.0.0.0'配置生效。

5. 证书相关排查(优先级较低)

  • 虽然使用adhoc证书也存在问题,但仍可排查:自签证书的*Common Name(CN)*需包含虚拟机公网IP或域名(否则仅会触发浏览器警告,不会导致无法连接);同时确认证书文件路径正确、Flask进程有读取权限。

内容的提问来源于stack exchange,提问作者Axel Puig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:48:25