nginx 介绍-01
一、Nginx概述
1. Nginx是什么?
Nginx (发音为"engine X")是一款高性能的开源Web服务器、反向代理服务器和电子邮件(IMAP/POP3)代理服务器。由俄罗斯程序员Igor Sysoev开发,最初是为解决C10K问题(即单机同时处理1万个连接)而设计。
2. Nginx的特点
-
高性能:事件驱动架构,非阻塞I/O模型
-
高并发:单机可支持数万并发连接
-
低内存消耗:处理静态资源时内存占用极低
-
模块化设计:功能可通过模块扩展
-
热部署:支持不停止服务的情况下升级
-
高可靠性:稳定性好,适合7×24小时运行
3. Nginx的主要应用场景
-
静态资源服务器:高效处理HTML、CSS、JS、图片等
-
反向代理服务器:负载均衡、请求转发
-
API网关:路由、限流、鉴权等
-
动态内容缓存:减轻后端应用服务器压力
-
SSL/TLS终端:处理HTTPS加解密
二、Nginx目录结构
典型Nginx安装目录结构(以Linux为例):
/etc/nginx/ ├── conf.d/ # 额外的配置文件目录 ├── fastcgi_params # FastCGI相关参数 ├── mime.types # MIME类型映射 ├── modules/ # 动态模块目录 ├── nginx.conf # 主配置文件 ├── scgi_params # SCGI相关参数 ├── sites-available/ # 可用的虚拟主机配置 ├── sites-enabled/ # 启用的虚拟主机配置(通常是sites-available的符号链接) ├── uwsgi_params # uWSGI相关参数 └── snippets/ # 配置片段 /var/log/nginx/ # 日志目录 ├── access.log # 访问日志 └── error.log # 错误日志 /usr/share/nginx/html/ # 默认网站根目录
三、常用Nginx命令
# 启动
nginx
systemctl start nginx
# 停止
nginx -s stop
systemctl stop nginx
# 优雅停止(处理完当前请求)
nginx -s quit
# 重新加载配置 必须是启动的状态下执行
nginx -s reload
systemctl reload nginx
# 重新打开日志文件
nginx -s reopen
# 测试配置文件语法
nginx -t
nginx -T # 测试并输出配置内容
# 查看版本和编译参数
nginx -V
查看进程
netstat -lntp | grep 80
四、Nginx负载均衡
1. 负载均衡概念
Nginx可以将客户端请求分发到多个后端服务器,实现:
-
提高系统吞吐量
-
提高系统可用性
-
实现横向扩展
2. 负载均衡算法
upstream backend {
# 轮询(默认)
server backend1.example.com;
server backend2.example.com;
# 加权轮询
server backend3.example.com weight=2;
# IP哈希
ip_hash;
server backend4.example.com;
# 最少连接
least_conn;
server backend5.example.com;
# 响应时间优先(商业版)
# fair;
}
五、性能测试中的监控
关键监控指标
-
连接数:Active connections (活跃连接数)
-
请求处理:Requests per second (RPS/QPS)
-
流量:Network in/out
-
响应时间:Request processing time
-
后端健康:Upstream server status
-
错误率:4xx/5xx错误比例
2. 监控工具
-
Nginx状态模块:
ngx_http_stub_status_module
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
-
第三方工具:
-
Prometheus + Grafana
-
Zabbix
-
Datadog
-
New Relic
-
ELK Stack (分析日志)
-
六、常见性能场景问题及调优
1. 高并发连接问题
症状:
-
大量连接处于WAIT状态
-
新连接被拒绝
调优点:nginx
# 调整工作进程数(通常等于CPU核心数)
worker_processes auto;
# 每个worker的最大连接数
events {
worker_connections 10240;
use epoll; # Linux下高性能事件模型
}
# 调整系统级限制
# ulimit -n 65535
2. 高负载下响应慢
症状:
-
平均响应时间随并发增加而上升
-
CPU使用率高
调优点:nginx
# 启用高效文件传输
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 调整缓冲区大小
client_body_buffer_size 16k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
# 开启Gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
# 连接超时设置
keepalive_timeout 65;
keepalive_requests 100;
3. 后端服务过载
症状:
-
后端响应时间增加
-
5xx错误增多
调优点:nginx
# 调整代理超时
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
# 启用缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
# 限流
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
location / {
limit_req zone=one burst=20;
}
4. 内存不足问题
症状:
-
内存使用率高
-
频繁交换(Swap)
调优点:
# 调整每个连接的缓冲区
client_body_buffer_size 16k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
# 限制上传文件大小
client_max_body_size 8m;
# 减少worker进程内存占用
worker_processes 2; # 根据CPU核心数调整
七、性能瓶颈分析方法
1. 分析流程
-
收集数据:监控指标、日志、系统资源使用情况
-
识别瓶颈:CPU、内存、I/O、网络中的限制因素
-
定位原因:配置问题、架构问题、资源不足
-
实施优化:针对性调整配置或架构
-
验证效果:再次压测比较优化前后指标
2. 常用工具
-
系统级:top, vmstat, iostat, netstat, ss
-
Nginx特定:
-
ngx_http_stub_status_module -
ngxtop(实时监控Nginx请求) -
GoAccess (日志分析)
-
-
全链路:APM工具如SkyWalking, Pinpoint
3. 典型瓶颈场景
| 性能问题现象 | 可能原因 | 调优方向 |
|---|---|---|
| 高CPU使用率 | 动态内容处理多/Gzip压缩 | 启用缓存/调整压缩级别 |
| 高内存使用 | 缓冲区设置过大/连接数多 | 优化缓冲区/限制连接 |
| 高I/O等待 | 日志写入频繁/静态文件多 | 异步日志/优化sendfile |
| 网络吞吐低 | 小文件多/TCP配置不佳 | 启用tcp_nopush/tcp_nodelay |
| 后端响应慢 | 后端过载/超时设置不当 | 增加后端/调整超时/限流 |

浙公网安备 33010602011771号