4、负载均衡与反向代理:Nginx安装与配置、反向代理原理、负载均衡策略、健康检查配置
在服务目录平台的多环境架构中,Nginx 承担着流量入口与分发枢纽的角色。本章将系统讲解 Nginx 的核心安装流程、反向代理工作机制、负载均衡策略选型以及健康检查配置方法,帮助你在准入控制与项目部署之间建立稳定、可观测的流量转发层。
4.1 Nginx 安装与基础配置
Nginx 支持主流 Linux 发行版及容器化部署。以下以 CentOS 7/8 和 Ubuntu 20.04/22.04 为例,给出生产环境推荐安装方式。
| 操作系统 | 安装方式 | 关键命令 | 配置文件路径 |
|---|---|---|---|
| CentOS 7/8 | EPEL + yum | yum install epel-release -y && yum install nginx -y |
/etc/nginx/nginx.conf |
| Ubuntu 20.04/22.04 | apt 官方源 | apt update && apt install nginx -y |
/etc/nginx/nginx.conf |
| Docker 容器 | 官方镜像 | docker run -d --name nginx -p 80:80 nginx:alpine |
/etc/nginx/nginx.conf |
--restart=always 策略保证高可用。
安装完成后,通过 nginx -t 校验配置语法,使用 systemctl start nginx 或 nginx -s reload 启动/重载服务。
4.2 反向代理原理
反向代理位于客户端与后端服务器之间,客户端感知不到后端真实地址。Nginx 接收客户端请求后,根据配置将请求转发到内部服务,并将响应返回给客户端。核心流程如下:
- 客户端请求 → 访问 Nginx 监听端口(如 80/443)。
- Nginx 解析 → 根据
location块匹配请求 URI。 - 转发决策 → 通过
proxy_pass指令将请求发送到上游服务器组。 - 后端处理 → 上游服务处理请求并返回响应。
- 响应回传 → Nginx 将后端响应返回给客户端,可附加缓存、压缩、头修改等处理。
server {
listen 80;
server_name catalog.internal.com;
location /api/ {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
反向代理的核心价值在于:隐藏后端结构、统一入口、集中处理 SSL 终止、支持灰度发布与流量治理。
4.3 负载均衡策略
Nginx 通过 upstream 模块定义后端服务器组,并支持多种负载均衡算法。选择正确的策略直接影响系统吞吐量与响应延迟。
| 策略名称 | 配置关键字 | 工作原理 | 适用场景 |
|---|---|---|---|
| 轮询(默认) | 无 / round-robin |
按顺序依次分发请求,权重可调 | 后端性能均匀,无状态服务 |
| 最少连接 | least_conn |
优先转发给当前活跃连接数最少的后端 | 长连接、请求处理时间差异大的场景 |
| IP Hash | ip_hash |
根据客户端 IP 计算 hash,固定转发到同一后端 | 需要会话保持(Session Sticky) |
| 通用 Hash | hash $request_uri |
自定义 key 进行 hash 分配 | 缓存亲和性、URL 路由分发 |
| 随机 | random |
从可用后端中随机选取 | 测试环境、流量模拟 |
ip_hash 时,如果后端扩缩容,hash 映射会重新分布,可能导致会话丢失。生产环境建议结合 Redis 或 Cookie 实现外部会话存储。
以下是一个包含权重与备份节点的 upstream 配置示例:
upstream catalog_backend {
least_conn;
server 10.0.1.10:8080 weight=3;
server 10.0.1.11:8080 weight=2;
server 10.0.1.12:8080 backup;
}
server {
listen 80;
location / {
proxy_pass http://catalog_backend;
}
}
4.4 健康检查配置
Nginx 开源版默认只提供被动健康检查(根据请求响应判断),商业版 Nginx Plus 支持主动健康检查。对于服务目录平台,推荐结合第三方模块或使用开源版 + 脚本实现。
4.4.1 被动健康检查(开源版)
通过 max_fails 和 fail_timeout 参数控制:
upstream catalog_backend {
server 10.0.1.10:8080 max_fails=3 fail_timeout=30s;
server 10.0.1.11:8080 max_fails=3 fail_timeout=30s;
}
当后端在 fail_timeout 内失败次数达到 max_fails,Nginx 将其标记为不可用,并在超时后重新尝试。
4.4.2 主动健康检查(Nginx Plus / 第三方模块)
使用 ngx_http_healthcheck_module 或商业版配置:
upstream catalog_backend {
zone catalog 64k;
server 10.0.1.10:8080;
server 10.0.1.11:8080;
}
server {
listen 80;
location / {
proxy_pass http://catalog_backend;
health_check interval=5s fails=3 passes=2 uri=/health;
}
}
参数说明:
interval:健康检查间隔时间。fails:连续失败次数后标记为不健康。passes:连续成功次数后标记为健康。uri:检查请求的路径,后端需返回 2xx/3xx 状态码。
/health 或 /actuator/health 端点,返回 JSON 格式的健康状态,包含数据库连接、缓存、依赖服务等关键组件的存活信息。
4.5 生产环境配置清单
在服务目录平台上线前,请逐项确认以下配置项:
| 配置项 | 推荐值 / 操作 | 说明 |
|---|---|---|
| worker_processes | auto |
自动匹配 CPU 核心数 |
| worker_connections | 10240 |
单 worker 最大并发连接数 |
| keepalive_timeout | 65 |
客户端长连接超时 |
| proxy_read_timeout | 60s |
后端响应超时,防止慢请求堆积 |
| proxy_buffer_size | 8k |
头部缓冲区,避免大 header 截断 |
| client_max_body_size | 10m |
根据业务上传文件大小调整 |
| 日志格式 | 包含 $upstream_addr $upstream_status |
便于排查后端分发情况 |
log_format upstream_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'upstream: $upstream_addr $upstream_status';
access_log /var/log/nginx/access.log upstream_log;
通过以上配置,Nginx 层即可实现流量分发、故障隔离与可观测性,为服务目录平台的稳定运行提供坚实基础。