如何在Python-Flask服务器中设置多IP监听实现故障转移?
实现Flask监听指定多IP并支持故障转移的可行方案
Flask原生的app.run()不支持直接传入多个IP地址,以下是几种可行的实现方案:
方案1:启动多个Flask实例(纯Python实现)
通过多线程启动多个Flask实例,每个实例绑定一个目标IP,实现同时监听。
示例代码:
from flask import Flask import threading app = Flask(__name__, instance_relative_config=True) # 业务路由示例 @app.route('/') def hello(): return "Hello from Flask!" def run_flask(host): # 必须关闭自动重载,避免多线程冲突 app.run(debug=False, host=host, port=5000, use_reloader=False) if __name__ == '__main__': # 分别启动绑定两个IP的线程 t1 = threading.Thread(target=run_flask, args=('192.168.1.10',)) t2 = threading.Thread(target=run_flask, args=('192.168.1.11',)) t1.start() t2.start() t1.join() t2.join()
注意:Flask自带服务器仅适合开发或小规模场景,生产环境不推荐使用。
方案2:使用Nginx反向代理(生产环境推荐)
让Nginx监听两个目标IP,将请求转发到本地运行的Flask服务,Flask只需绑定127.0.0.1即可。
Nginx配置示例:
server { listen 192.168.1.10:5000; listen 192.168.1.11:5000; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
Flask端简化配置:
app.run(debug=False, host='127.0.0.1', port=5000)
优势:Nginx是生产级反向代理,稳定性高,可高效处理并发连接;当主网卡故障时,客户端切换到备用IP即可正常访问,无需修改Flask配置。
方案3:使用Gunicorn作为生产服务器
Gunicorn是Flask常用的生产级WSGI服务器,原生支持绑定多个IP地址,配置更简洁。
步骤:
- 安装Gunicorn:
pip install gunicorn - 启动命令:
gunicorn -b 192.168.1.10:5000 -b 192.168.1.11:5000 app:app
其中app:app表示你的Flask应用文件名为app.py,且应用实例名为app。
优势:无需额外编写多线程代码,生产环境性能更优,配置简单直接。
故障转移说明
上述方案均能实现同时监听两个指定IP,当主以太网端口故障时,客户端只需将请求切换到备用IP(192.168.1.11)即可正常访问。若需自动故障转移,可结合客户端重试逻辑或DNS轮询配置进一步优化可用性。
内容的提问来源于stack exchange,提问作者Lore
相关产品推荐
相关产品推荐

