NginxAPI网关性能优化SRE
场景
某微服务架构使用Nginx作为API网关,近期用户反馈接口响应缓慢,超时错误(504)和上游不可达(502)频繁出现。SRE团队介入排查。
症状
- 平均响应时间从50ms飙升至800ms
- 错误率从0.1%升至5%
- 部分客户端反复出现超时
诊断
- 检查Nginx错误日志:
tail -100 /var/log/nginx/error.log,发现大量“upstream timed out”和“no live upstreams”错误。 - 查看访问日志:
tail -100 /var/log/nginx/access.log | awk '{print $NF}',最后一列为响应时间,发现部分请求耗时超过10秒。 - 检查系统资源:
top显示CPU空闲,但wa(I/O等待)较高,磁盘出现瓶颈?但上游服务为内存型,实际检查发现上游服务器负载正常。 - 使用strace追踪:
strace -p $(pidof nginx) -e trace=network -c,发现大量epoll_wait调用超时,且TCP连接建立缓慢。 - 分析配置:Nginx中的proxy_pass指向上游域名,但未配置连接池和超时参数,导致每次请求新建连接。
命令与优化
查看当前配置
nginx -T | grep -E 'proxy_connect_timeout|proxy_send_timeout|proxy_read_timeout|keepalive'
若未设置keepalive,则每个请求都会创建新连接。
优化上游连接池
在http块或location块中添加:
upstream backend {
server backend-svc:8080;
keepalive 32;
}
server {
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
}
}
调整worker进程
计算worker_processes为auto或CPU核数,worker_connections建议1024以上。
worker_processes auto;
events {
worker_connections 2048;
multi_accept on;
}
开启缓存
若API幂等,可启用proxy_cache:
proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
风险控制
- 修改前备份配置文件:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak - 使用
nginx -t验证语法 - 逐步生效:
nginx -s reload(热加载,不中断连接) - 如有灰度环境,先测试
回滚
若优化后问题恶化或出现新问题:
cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
nginx -t && nginx -s reload
验证
- 再次运行
ab -n 1000 -c 100 http://api.example.com/endpoint,观察响应时间和错误率 - 监控日志中响应时间分布:
awk '{print $NF}' access.log | sort -n | uniq -c | sort -k1 -n - 确认502/504消失
何时提交OpsGlobal工单
- 如果调优后仍无改善,可能涉及内核参数(net.ipv4.tcp_tw_reuse等)、SSL握手优化或更复杂架构问题。
- 当影响生产且无足够时间自己排查时,立即提交工单。
- 需要专业压力测试或性能基线制定时。
OpsGlobal的SRE专家可提供7x24小时远程支持,快速定位并解决Nginx网关性能问题。
适用场景
适合正在处理 Performance、Nginx, API网关, 性能优化, SRE 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过一个真实场景,详细讲解Nginx作为API网关时出现性能瓶颈的诊断、优化、回滚及验证步骤,并说明何时应求助OpsGlobal专业支持。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。