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

相关推荐
舒一笑1 天前
Mac环境安装Nginx指南实录
前端·nginx·程序员
水冗水孚1 天前
图文并茂记录:Ubuntu上安装Ollama大模型提供Serve,前端调用实现AI对话功能
nginx·ubuntu·ollama
雨落Liy5 天前
Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
运维·nginx·负载均衡
Yyyy4825 天前
Nginx负载均衡集群实验步骤
运维·nginx·负载均衡
qq_264220896 天前
Nginx优化与 SSL/TLS配置
运维·nginx
matlab的学徒6 天前
Web与Nginx网站服务(改)
linux·运维·前端·nginx·tomcat
邂逅星河浪漫6 天前
【Docker+Nginx+Ollama】前后端分离式项目部署(传统打包方式)
java·nginx·docker·部署
IT成长日记6 天前
【Nginx开荒攻略】Nginx主配置文件结构与核心模块详解:从0到1掌握nginx.conf:
linux·运维·nginx·配置文件
ZzzZZzzzZZZzzzz…6 天前
Nginx_Tomcat综合案例
运维·nginx·tomcat·负载均衡·rhce·反向代理·https加密服务