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

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


一、NGINX 负载均衡原理

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

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

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


二、NGINX 负载均衡配置示例

假设有两台后端应用服务器,IP 分别为 127.0.0.1:8001 和 127.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 的 upstream 和 proxy_pass,将流量分发到两个 Flask 服务。


3. 验证负载均衡效果

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

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

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


四、总结

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


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

相关推荐
我不会起名字3221 天前
网关超时比服务短:一次 499 的完整归因
网关·nginx·排查·499
味悲2 天前
Nginx笔记
linux·运维·笔记·nginx
John_Hui2 天前
CentOS7安装Nginx
linux·服务器·nginx
时间售卖铺3 天前
Nginx 反向代理
运维·nginx·云原生
life码农3 天前
Nginx location 优先级详解:匹配规则、修饰符与完整代码示例
运维·nginx
爬也要爬着前进4 天前
Prometheus通过Nginx-vts-exporter模块监控nginx服务
运维·nginx·prometheus
溪语流沙4 天前
【Web全栈进阶】Nginx反向代理 + HTTPS:正式上线
前端·vue.js·python·nginx·https·fastapi
无敌糖果4 天前
Nginx 后端error.log疯狂刷盘问题分析
运维·nginx
李纲明4 天前
WordPress 古腾堡点「更新」报「不是有效的 JSON 响应」:我按 REST 接口一路查下来的顺序
运维·nginx·php·wordpress·rest api
你看我名字4 天前
LNMP 生产架构与云运维实践:Nginx、PHP-FPM、MySQL 全链路分析
运维·nginx·架构