利用Nginx代理压测后端服务,需配置upstream轮询分发至多实例并记录upstream_addr与响应时间,用wrk发起带标识并发请求,结合后端返回的X-Backend-Process-Time实现端到端性能分析。

要利用 Nginx 代理实现对后端服务的压力测试,关键不是只压测 Nginx 本身,而是借助它作为流量分发枢纽,真实、可追踪地把压力打到多个后端节点,并能清晰识别每个请求的去向和耗时。
准备可区分的后端服务
启动至少两个后端实例,每个返回唯一标识(如主机名、服务名或自定义响应头),便于后续验证分发效果:
- 服务 A:监听
127.0.0.1:8001,响应头含X-Backend: node-a - 服务 B:监听
127.0.0.1:8002,响应头含X-Backend: node-b
可用轻量脚本快速搭建(如 Flask 或 Python http.server),无需复杂逻辑,重点是返回可识别标记。
配置 Nginx 做负载分发并记录路径
在 upstream 块中定义轮询集群,并启用详细日志记录:
upstream test_backend {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 8080;
location / {
proxy_pass http://test_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 记录实际转发目标和响应时间
log_format test_log '$remote_addr - [$time_local] "$request" '
'$status $body_bytes_sent "$upstream_addr" '
'$upstream_response_time $request_time';
access_log /var/log/nginx/test_access.log test_log;
}
}重启 Nginx 后,每次请求都会在日志里留下 upstream_addr(如 127.0.0.1:8001)和两个时间字段,方便统计各节点承接量与延迟。
用 wrk 发起带标识的并发压测
避免使用 ab 这类简单工具(难以控制连接复用与 header),推荐 wrk:
wrk -t4 -c200 -d30s \ -H "X-Test-Scope: stress-round-1" \ http://localhost:8080/
参数说明:
-
-t4:4 个线程 -
-c200:维持 200 个并发连接 -
-d30s:持续 30 秒 -
-H添加请求头,便于从日志中筛选本次压测流量
压测期间,可实时 tail -f /var/log/nginx/test_access.log 观察 upstream_addr 分布是否均衡,同时用 curl -I http://localhost:8080/ 检查响应头中 X-Backend 是否交替出现。
结合后端打点做端到端分析
仅靠 Nginx 日志无法判断后端内部耗时。建议后端在响应中返回处理时间:
- 返回
X-Backend-Process-Time: 42.8ms - Nginx 日志中加入
$upstream_http_x_backend_process_time字段
这样就能对比upstream_response_time(Nginx 等待时间)和X-Backend-Process-Time(后端真实处理时间),识别出是网络延迟、后端排队还是自身性能瓶颈。
不复杂但容易忽略


















