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

如何在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地址,配置更简洁。

步骤:

  1. 安装Gunicorn:pip install gunicorn
  2. 启动命令:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:12:52