975 字
5 分钟
nginx.md
2026-06-30
无标签

nginx原理#

1. 什么是Nginx#

Nginx是一款高性能的HTTP和反向代理服务器,由俄罗斯工程师Igor Sysoev开发。它以轻量级、高并发、低内存消耗著称,采用事件驱动模型处理请求,能够在单机上轻松应对数万级并发连接。Nginx不仅可以作为Web服务器直接提供静态资源服务,还广泛用于反向代理、负载均衡、缓存加速等场景,是现代Web架构中不可或缺的核心组件。

2. Nginx的核心类比#

🏨 Nginx = 五星级酒店前台#

把Nginx想象成一家五星级酒店的前台接待员,这个类比能帮你理解它的核心功能:

客人进门(客户端请求): 所有客人(HTTP请求)都必须经过前台(Nginx),前台不会直接提供客房服务,而是负责引导和分配。

询问需求(请求解析): 前台会询问客人的需求——是要办理入住(静态资源请求)、用餐(API请求),还是会议服务(WebSocket连接)。

分配房间(请求路由): 根据需求,前台将客人引导到对应的楼层和房间:

  • 静态资源 → 直接从前台旁边的储物架拿取(本地文件)
  • API请求 → 转交给客房服务员(后端应用服务器)
  • 负载均衡 → 根据房间占用情况分配(轮询、权重等策略)

处理突发情况(高并发): 即使同时来了大量客人,前台也能高效处理,因为它采用”非阻塞”方式——不需要每个客人都单独占用一个前台人员。

⚖️ 核心区别:正向代理 vs 反向代理#

代理类型类比场景作用对象典型用途
正向代理旅行社帮游客订机票代表客户端翻墙、缓存、隐藏客户端IP
反向代理酒店前台代表酒店代表服务端负载均衡、安全防护、SSL终止

3. 负载均衡策略#

Nginx支持多种负载均衡算法,适用于不同场景:

算法说明适用场景
round_robin默认轮询,依次分配后端服务器性能相近
least_conn分配给连接数最少的服务器请求处理时间差异大
ip_hash根据客户端IP哈希分配需要会话保持
weight按权重分配,权重越高分配越多服务器性能差异大

配置示例:

upstream backend {
server 192.168.1.10 weight=3;
server 192.168.1.11 weight=2;
server 192.168.1.12 backup;
}
server {
location /api/ {
proxy_pass http://backend;
}
}

4. Nginx配置文件结构#

Nginx配置文件(nginx.conf)采用模块化结构,主要包含以下层级:

main # 全局配置(user、worker_processes、error_log)
├── events # 事件驱动配置(worker_connections、use epoll)
└── http # HTTP协议配置
├── upstream # 上游服务器配置(负载均衡)
└── server # 虚拟主机配置
└── location # 路径匹配与处理规则

核心指令说明:

  • worker_processes: 工作进程数,通常设为CPU核心数
  • worker_connections: 每个进程最大连接数
  • proxy_pass: 反向代理到上游服务器
  • root: 设置静态文件根目录
  • try_files: 尝试按顺序查找文件

5. 性能优化技巧#

1. 调整工作进程和连接数:

worker_processes auto;
worker_connections 10240;

2. 开启gzip压缩:

gzip on;
gzip_types text/plain text/css application/json;
gzip_min_length 1000;

3. 配置缓存:

location ~* \.(jpg|png|css|js)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}

4. 启用sendfile和tcp_nopush:

sendfile on;
tcp_nopush on;

6. 高可用方案#

主备模式(Keepalived + Nginx):

  • 两台Nginx服务器,一台主服务器提供服务,一台备用
  • Keepalived通过VRRP协议实现自动故障切换
  • 当主服务器宕机时,备用服务器自动接管VIP

集群模式(Nginx + Consul):

  • 多台Nginx组成集群,通过Consul实现服务发现
  • 动态感知后端服务器状态,自动剔除故障节点
  • 支持水平扩展,应对更高并发