Nginx 核心功能
Nginx 是一款开源、高性能、轻量级的 HTTP 服务器、反向代理、负载均衡器、TCP/UDP 代理及邮件代理服务器
一、核心架构
- Master 进程 :以 root 权限运行,负责读取配置文件、管理 Worker 进程(启动 / 重启 / 平滑重载)、处理系统信号(如
reload/stop)、打开日志文件,不直接处理用户请求。 - Worker 进程 :以普通用户(如
www-data)运行,是请求处理的核心单元;数量通过worker_processes配置(推荐设为 CPU 核心数或auto),多核环境下可充分利用 CPU 资源,避免上下文切换开销。 - 事件驱动模型 :基于
epoll(Linux)、kqueue(BSD)等高效事件机制,单 Worker 进程可同时处理数万并发连接,内存占用极低(静态文件场景下每个连接仅约 2.5KB)。 - 共享内存:用于缓存、会话保持、限流、日志共享等,实现多 Worker 进程间的数据协同NGINX开源社区。
二、HTTP 核心服务功能
1. 静态资源服务(基础能力)
- 高效提供 HTML、CSS、JS、图片、视频等静态文件,支持自动索引(
autoindex)、目录浏览、索引文件(index)配置。 - 内置文件描述符缓存(
open_file_cache),减少文件打开 / 关闭开销,大幅提升静态资源访问速度。 - 支持 FLV/MP4 视频流式传输,可实现断点续传与范围请求(
byte-range)nginx.org。
2. 虚拟主机
- 支持 基于域名 (
server_name)和 基于 IP 的虚拟主机,单台 Nginx 可同时托管多个独立网站,共享端口与资源。 - 每个虚拟主机独立配置根目录、日志、访问规则、SSL 证书等,实现站点隔离nginx.org。
3. 请求处理与路由
- 基于
location块实现 URI 精准匹配(前缀、正则、精确匹配),灵活分发请求至不同处理逻辑。 - 内置
rewrite模块,支持正则表达式实现 URI 重写、重定向(3xx 状态码),适配 URL 规范与业务路由需求nginx.org。 - 支持 HTTP/1.1 长连接(
keepalive)、请求流水线(pipelining),减少连接建立开销,提升吞吐nginx.org。
4. 动态请求代
- 支持 FastCGI、uWSGI、SCGI、memcached 等协议,可将动态请求转发至 PHP-FPM、Python(Django/Flask)、Node.js 等后端应用服务器。
- 提供
fastcgi_pass、uwsgi_pass等指令,实现动态请求的高效转发与参数传递。
三、反向代理
反向代理是 Nginx 最核心的应用场景,作为 "流量入口" 接收客户端请求,转发至后端服务并返回响应,核心功能如下:
- 请求转发 :通过
proxy_pass指令将请求转发至后端服务器(HTTP/HTTPS),隐藏后端真实 IP,提升安全性。 - 请求 / 响应处理 :支持修改请求头(如传递客户端真实 IP
X-Real-IP/X-Forwarded-For)、响应头过滤、内容替换nginx.org。 - 缓存加速 :内置代理缓存(
proxy_cache),缓存后端响应,减少重复请求,降低后端压力,提升访问速度。 - 故障容错:后端服务器异常时,自动跳过故障节点,将请求转发至健康节点,保障服务可用性。
四、负载均衡
基于反向代理扩展,实现多后端服务器的流量智能分发,核心功能:
- 分发策略
- 轮询(默认):请求依次分发至后端节点。
- 加权轮询(
weight):按节点权重分配流量,适配性能差异服务器。 - IP 哈希(
ip_hash):同一客户端 IP 始终转发至同一后端,实现会话保持。 - 最少连接(
least_conn):将请求分发至当前连接数最少的节点,均衡负载。 - 通用哈希(
hash):基于 URI、请求参数等自定义维度哈希分发。
- 健康检查 :通过
max_fails、fail_timeout等指令检测后端节点状态,自动剔除故障节点,恢复后重新加入集群。 - 会话保持 :结合
ip_hash或第三方模块(如sticky),确保用户会话绑定至固定后端,避免会话丢失。
五、安全与访问控制
- SSL/TLS 加密 :支持 HTTPS 服务,配置 SSL 证书(
ssl_certificate/ssl_certificate_key),支持 TLS 1.2/1.3、SNI(多域名证书共享)、HTTP/2、HTTP/3(QUIC),保障传输安全。 - 访问控制
- IP 黑白名单:通过
allow/deny指令限制客户端 IP 访问。 - 基础认证:
auth_basic实现 HTTP 账号密码验证。 - 子请求验证:通过
auth_request对接外部认证服务(如 OAuth、JWT)nginx.org。
- IP 黑白名单:通过
- 限流与防攻击
- 连接数限制:
limit_conn限制单 IP 并发连接数。 - 请求速率限制:
limit_req限制单 IP 单位时间请求数,防 CC 攻击。 - Referer 验证:
valid_referers防止盗链nginx.org。
- 连接数限制:
- 错误处理:自定义 3xx-5xx 错误页面,实现友好的错误重定向与用户提示nginx.org。
六、性能优化功能
- 内容压缩 :
gzip模块自动压缩文本资源(HTML/CSS/JS),减少传输体积,提升加载速度。 - 文件缓存 :
open_file_cache缓存文件描述符与元数据,proxy_cache缓存代理响应,降低 I/O 开销。 - 零拷贝传输 :支持
sendfile指令,实现内核态直接文件传输,减少用户态与内核态数据拷贝,提升静态文件传输效率。 - 连接复用:长连接、请求流水线减少 TCP 连接建立开销,提升并发处理能力nginx.org。
- 线程池 :
thread_pool处理磁盘 I/O 等阻塞操作,避免 Worker 进程阻塞,保障事件循环高效运行NGINX开源社区。
七、TCP/UDP 四层代理
除 HTTP 七层代理外,Nginx 支持 TCP/UDP 四层流量转发,核心功能:
- 通用代理 :通过
stream块配置,转发 MySQL、Redis、SSH、DNS 等 TCP/UDP 服务流量。 - 负载均衡:支持 TCP/UDP 流量的轮询、加权轮询、IP 哈希等分发策略。
- SSL 终止:为 TCP 流量提供 SSL 加密 / 解密,实现四层安全传输。
- 访问控制:基于客户端 IP 限制连接,限制单 IP 并发连接数。
八、邮件代理服务
支持 SMTP、POP3、IMAP 邮件协议代理,核心功能:
- 邮件客户端请求转发至后端邮件服务器,隐藏后端真实地址。
- 支持 SSL/TLS 加密,保障邮件传输安全。
- 提供用户认证、访问控制、连接管理等能力。
九、模块化与扩展能力
- 模块化架构 :核心模块(
core/events/http/stream)+ 可选模块(gzip/ssl/rewrite/proxy),按需加载,避免冗余。 - 动态模块加载 :支持
load_module指令动态加载第三方模块(如nginx-rtmp-module、lua-nginx-module),扩展功能(如直播、Lua 脚本逻辑)。 - njs 脚本支持:内置 JavaScript 运行时,可通过 njs 实现复杂请求处理、逻辑判断、数据转换等定制化能力。
- 嵌入式 Perl:支持 Perl 脚本扩展,适配特定业务逻辑需求nginx.org。
十、运维与管理功能
- 平滑重载 :
nginx -s reload不中断服务更新配置,Worker 进程优雅重启,保障业务连续性NGINX开源社区。 - 热升级 :
USR2信号实现二进制文件热替换,完成版本升级无 downtimeNGINX开源社区。 - 日志管理 :自定义访问日志(
access_log)、错误日志(error_log)格式,支持缓冲写入、快速日志轮换、Syslog 输出,便于监控与排查nginx.org。 - 信号控制 :支持
TERM(强制停止)、QUIT(优雅停止)、HUP(重载配置)、USR1(重新打开日志)等信号,灵活管理服务状态NGINX开源社区。
十一、核心配置指令
nginx
# 核心配置(nginx.conf)
user www-data;
worker_processes auto; # 自动匹配CPU核心数
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
events {
worker_connections 1024; # 单Worker最大连接数
use epoll; # Linux高效事件模型
}
http {
include mime.types;
default_type application/octet-stream;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; # 开启零拷贝
keepalive_timeout 65; # 长连接超时
# 负载均衡后端组
upstream backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080;
server 192.168.1.12:8080 backup; # 备用节点
}
# 虚拟主机
server {
listen 80;
server_name example.com;
# 静态资源服务
location /static/ {
root /var/www;
expires 7d; # 缓存7天
}
# 反向代理+负载均衡
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# SSL配置(443端口)
listen 443 ssl;
ssl_certificate /etc/nginx/cert/example.crt;
ssl_certificate_key /etc/nginx/cert/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
}
}
十二、核心应用场景
- 静态网站托管:高效服务 HTML、图片、视频等静态资源,适合博客、官网、CDN 节点。
- API 网关:作为微服务入口,实现请求路由、负载均衡、认证、限流、监控。
- 反向代理与高可用:隐藏后端服务,实现故障转移,保障核心业务 7×24 可用。
- 四层流量转发:代理 MySQL、Redis、DNS 等服务,实现跨网络访问与负载均衡。
- 邮件服务代理:为企业邮件系统提供安全、稳定的代理层。