一、Nginx 基础概述
Nginx(发音为 “engine-x”)是由俄罗斯程序员 Igor Sysoev 开发的高性能开源 Web 服务器/反向代理服务器及电子邮件代理服务器。自 2004 年发布首个版本以来,凭借其轻量级、高并发、低资源消耗的特性,已成为全球最流行的 Web 服务器之一,广泛用于百度、腾讯、京东等大型互联网企业。
核心优势:
- 高并发处理:单台服务器可稳定支撑 2-3 万并发连接(官方测试达 5 万)。
- 低内存占用:3 万并发下仅需约 150MB 内存。
- 模块化设计:通过动态模块扩展功能(如 HTTPS、压缩、负载均衡)。
- 事件驱动架构:基于异步非阻塞模型,避免多线程上下文切换开销。
二、核心功能解析
1. 反向代理与负载均衡
- 反向代理:隐藏后端服务器真实 IP,通过
proxy_pass
指令将请求转发至指定服务(如proxy_pass http://backend_servers;
)。 - 负载均衡算法:
- 轮询(Round Robin):默认算法,按顺序分配请求。
- IP 哈希(IP Hash):根据客户端 IP 固定分配服务器,解决 Session 共享问题。
- 最少连接(Least Connections):优先分配给连接数最少的服务器。
- 健康检查:结合
max_fails
和fail_timeout
参数自动剔除故障节点。
配置示例:
http {
upstream backend {
server 192.168.1.100:8080 weight=5;
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2;
ip_hash; # 启用 IP 哈希
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
}
2. 静态资源服务
- 高效文件传输:通过
sendfile
指令启用零拷贝技术,减少磁盘 I/O 操作。 - 缓存控制:使用
expires
指令设置缓存时间(如expires 7d;
),结合add_header Cache-Control "public";
优化浏览器缓存。 - 压缩传输:启用 GZIP 压缩减少带宽占用(如
gzip on; gzip_types text/css application/javascript;
)。
配置示例:
server {
location /static/ {
root /data/www;
expires 30d;
gzip_static on; # 启用预压缩文件
}
}
3. HTTP 服务器与 SSL/TLS
- 虚拟主机:通过
server
块配置多域名托管(如server_name example.com;
)。 - HTTPS 配置:
- 指定证书路径:
ssl_certificate /path/to/cert.pem;
- 强制跳转 HTTP 到 HTTPS:
return 301 https://$host$request_uri;
- 协议优化:
ssl_protocols TLSv1.2 TLSv1.3;
- 指定证书路径:
配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_session_cache shared:SSL:10m;
}
4. 邮件代理服务
支持 IMAP/POP3/SMTP 协议代理,通过 mail
块配置认证、加密及路由规则。
三、工作原理与架构
1. 进程模型
- Master 进程:读取配置、管理 Worker 进程、监听信号(如
reload
)。 - Worker 进程:处理实际请求,数量通常与 CPU 核心数一致(通过
worker_processes auto;
自动配置)。
2. 事件驱动模型
- 异步非阻塞:基于 epoll(Linux)或 kqueue(BSD),单进程处理海量连接。
- 请求处理流程:
- 接收请求 → 2. 解析 HTTP 头 → 3. 选择后端服务器 → 4. 生成响应 → 5. 记录日志。
四、实战场景与优化
1. 动静分离
将静态资源(如图片、CSS)与动态请求(如 PHP)分离,提升性能:
server {
location / {
proxy_pass http://backend_app;
}
location ~* \.(jpg|png|css|js)$ {
root /data/static;
expires 30d;
}
}
2. 高可用集群
结合 Keepalived 实现双机热备,通过 VIP 漂移确保服务连续性。
3. 性能优化
- 调整 Worker 连接数:
worker_connections 1024;
- 启用缓冲:
proxy_buffer_size 32k; proxy_buffers 4 128k;
- 限制请求速率:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
五、常用命令与故障排查
1. 基础命令
- 检查配置:
nginx -t
- 平滑重载:
nginx -s reload
- 查看进程:
ps aux | grep nginx
2. 日志分析
- 访问日志:
/var/log/nginx/access.log
- 错误日志:
/var/log/nginx/error.log
- 调试工具:
strace -p <PID>
跟踪系统调用。
六、扩展功能与生态
- 模块扩展:通过
load_module
动态加载第三方模块(如ngx_http_lua_module
)。 - 与 Docker 集成:挂载自定义配置实现容器化部署:
docker run -d -p 80:80 -v /path/to/nginx.conf:/etc/nginx/nginx.conf nginx
七、总结
Nginx 以其高效、灵活、稳定的特性,成为现代 Web 架构的核心组件。无论是处理高并发请求、构建负载均衡集群,还是优化静态资源传输,Nginx 均能提供成熟的解决方案。通过深入理解其工作原理与配置技巧,开发者可充分发挥其潜力,构建高性能、可扩展的 Web 应用。