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

相关推荐
ICT董老师33 分钟前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
bleach-1 小时前
buuctf系列解题思路祥讲--[SUCTF 2019]CheckIn1--文件上传以及user.ini的应用
nginx·web安全·网络安全·php
CodeCaptain2 小时前
配置Nginx反向代理来实现负载均衡,续阿里云ECS配置Nginx反向代理
nginx·阿里云·负载均衡
r***01382 小时前
Nginx代理到https地址忽略证书验证配置
运维·nginx·https
CodeCaptain2 小时前
阿里云ECS上配置Nginx的反向代理
nginx·阿里云·云计算
GDAL20 小时前
NJS 共享字典(ngx.shared)全解析:跨 Worker 进程的数据共享方案
nginx·shared·njs
xifangge202521 小时前
PHP 错误日志在哪里看?Apache / Nginx / PHP-FPM 一次讲清
nginx·php·apache
鸠摩智首席音效师21 小时前
如何安装和配置 Nginx 反向代理服务器 ?
运维·nginx
星光不问赶路人1 天前
Nginx 的 location 路径匹配语法详解
nginx·api
GDAL1 天前
深入理解 NJS 全局对象:掌控运行时的核心工具
nginx·njs