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 服务实战经验!

相关推荐
骇客野人9 小时前
基于Nginx+Eureka+Apollo+Jenkins+SpringBoot Web系统分布式部署方案
nginx·eureka·jenkins
Kendra91921 小时前
从 0 到上线:单文件网页 App 部署到阿里云 ECS 全流程(Nginx+Node+PM2+PostgreSQL)
nginx·阿里云·云计算·部署·个人开发·今天吃什么
暖核1 天前
Nginx 从入门到实践:部署、配置、反向代理与负载均衡全解
运维·nginx·负载均衡
.柒宇.1 天前
运维常见面试题_04_Nginx与DNS服务
运维·nginx·面试·dns
NGINX开源社区1 天前
NGINX Ingress Controller 5.5:安全性与性能提升,迁移更轻松
java·服务器·nginx
weixin_307779131 天前
PHP 大文件上传:内存占用、超时与最佳实践
linux·服务器·开发语言·nginx·php
闲云野鹤在人间1 天前
项目实战:LNMP-电商平台-ECshop
linux·运维·nginx·apache·lvs
暖核1 天前
Keepalived 高可用全解析:从 VRRP 原理到生产环境 Nginx 主备切换实践
网络·nginx·智能路由器
SatanII2 天前
403 禁地:Nginx 拒绝所有生者进入
运维·nginx
xianyuCcCcCCCcc2 天前
Nginx 深度解析:从基础架构到反向代理与负载均衡实战全解
linux·运维·nginx·bash·负载均衡