NGINX 负载均衡原理与 Flask 服务实战验证

NGINX 是现代 Web 架构中最常用的高性能 Web 服务器和反向代理服务器之一。它不仅能高效处理静态资源,还能通过负载均衡功能将流量分发到多个后端应用服务器,提升系统的并发能力和高可用性。本文将详细介绍 NGINX 的负载均衡原理,并通过 Flask 服务进行实战验证。


一、NGINX 负载均衡原理

NGINX 作为反向代理服务器,可以将客户端请求分发到后端多台服务器(上游服务器),实现负载均衡。其主要负载均衡算法包括:

  • 轮询(Round Robin):默认方式,依次将请求分发到每个后端服务器。
  • 最少连接(Least Connections):优先分发到当前连接数最少的服务器。
  • IP 哈希(IP Hash):同一 IP 的请求分发到同一服务器,适合会话保持。

NGINX 还支持健康检查,自动剔除故障节点,保证高可用。


二、NGINX 负载均衡配置示例

假设有两台后端应用服务器,IP 分别为 127.0.0.1:8001127.0.0.1:8002,可以这样配置 NGINX:

nginx 复制代码
# /etc/nginx/nginx.conf
http {
    upstream flaskapp {
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
    }

    server {
        listen 8080;
        location / {
            proxy_pass http://flaskapp;
        }
    }
}

你也可以根据需求选择不同的负载均衡算法:

  • 最少连接:

    nginx 复制代码
    upstream flaskapp {
        least_conn;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
    }
  • IP 哈希:

    nginx 复制代码
    upstream flaskapp {
        ip_hash;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
    }

修改配置后,重载 NGINX:

pwsh 复制代码
nginx -s reload

三、使用 Flask 服务验证 NGINX 负载均衡

下面通过两个 Flask 服务实例,验证 NGINX 的负载均衡效果。

1. 启动多个 Flask 服务

分别在不同端口启动两个 Flask 实例:

app.py

python 复制代码
from flask import Flask
import os

app = Flask(__name__)

@app.route('/')
def hello():
    return f'Hello from Flask! PID: {os.getpid()}'

if __name__ == '__main__':
    app.run(port=8001)

复制一份,修改端口为 8002:

app2.py

python 复制代码
from flask import Flask
import os

app = Flask(__name__)

@app.route('/')
def hello():
    return f'Hello from Flask! PID: {os.getpid()}'

if __name__ == '__main__':
    app.run(port=8002)

分别运行:

pwsh 复制代码
python app.py
python app2.py

2. 配置 NGINX 负载均衡

如上文所示,配置 NGINX 的 upstreamproxy_pass,将流量分发到两个 Flask 服务。


3. 验证负载均衡效果

多次访问 NGINX 端口(如 http://localhost:8080/),你会看到返回的 PID 不同,说明请求被分发到了不同的 Flask 实例。

pwsh 复制代码
curl http://localhost:8080/

多次执行,返回结果会在两个 Flask 服务之间切换。


四、总结

NGINX 通过反向代理和多种负载均衡算法,将流量分发到多个后端服务器,显著提升系统的并发能力和高可用性。通过简单的 Flask 服务实例,可以直观验证 NGINX 的负载均衡效果。无论是生产环境还是开发测试,NGINX 都是实现高性能和高可用架构的首选工具。


欢迎留言交流更多 NGINX 负载均衡与 Python 服务实战经验!

相关推荐
IT成长日记6 小时前
【Nginx开荒攻略】Nginx虚拟主机配置:从域名、端口到IP的完整指南
linux·运维·服务器·nginx·虚拟主机
西贝爱学习19 小时前
【软件】nginx-1.28.0安装包(Windows版)
运维·nginx
zrande20 小时前
Nginx 负载均衡通用方案
nginx·负载均衡
小灰灰的可爱无人可替代1 天前
记录一次使用docker和docker-compose更新vue前端项目问题
nginx·docker·vue
会飞的鱼_1231 天前
设备管理平台项目全流程部署指南:从环境到ELK日志监控
nginx
雲帝2 天前
爱发电nginx转发企业微信webhook
nginx
星光一影2 天前
【OA办公系统】神点企业OA办公助手/全开源
mysql·nginx·开源·php·源代码管理
matlab的学徒2 天前
nginx+springboot+redis+mysql+elfk
linux·spring boot·redis·nginx
NicolasCage3 天前
解决苍穹外卖WebSocket连接失败的问题
nginx
维尔切3 天前
Nginx 反向代理与负载均衡
运维·nginx·负载均衡