是的,可以从外部网络访问使用 Flask 和 Python 构建的 REST API,但需要正确配置网络和服务器设置。以下是关键步骤和注意事项:
默认情况下,Flask 开发服务器 (app.run()
) 仅监听 127.0.0.1
(本地回环地址),这意味着它只能从运行它的同一台机器访问。要让外部网络访问,需显式指定监听所有网络接口 (0.0.0.0
):
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000) # 监听所有网络接口
host='0.0.0.0'
:允许来自任何 IP 地址的连接。port=5000
:默认端口(可自定义)。即使 Flask 监听了外部请求,还需确保服务器的防火墙或云服务商的安全组规则允许外部访问指定端口(如 5000
)。
5000
为例):sudo ufw allow 5000/tcp # 如果使用 UFW # 或 sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT # 直接配置 iptables5000
)。Flask 自带的开发服务器(app.run()
)不适合直接暴露在生产环境,因为它缺乏性能、安全性和稳定性优化。建议使用生产级 WSGI 服务器,如:
通过 Nginx 或 Apache 作为反向代理,可以:
/etc/nginx/sites-available/flask_api
):server { listen 80; server_name your_domain_or_ip; # 替换为你的域名或IP location / { proxy_pass http://127.0.0.1:5000; # 转发到 Flask 应用 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }curl
测试:curl http://<服务器IP>:5000app.run()
仅用于开发,生产环境必须用 Gunicorn/uWSGI + Nginx。allow/deny
规则,仅允许可信 IP 访问。0.0.0.0
。proxy_pass
地址是否正确。-w
参数)。