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. 分析流程

  1. 收集数据:监控指标、日志、系统资源使用情况

  2. 识别瓶颈:CPU、内存、I/O、网络中的限制因素

  3. 定位原因:配置问题、架构问题、资源不足

  4. 实施优化:针对性调整配置或架构

  5. 验证效果:再次压测比较优化前后指标

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
后端响应慢 后端过载/超时设置不当 增加后端/调整超时/限流

 

posted @ 2025-06-07 13:27  Shafir莎菲尔  阅读(287)  评论(0)    收藏  举报