Nginx 核心功能
Nginx 是 Igor Sysoev 开发的高性能、轻量级、事件驱动型 HTTP 服务器、反向代理服务器及邮件代理服务器。其核心基于异步非阻塞事件模型(epoll/kqueue),能在极低内存占用下支撑数万级并发连接,是互联网架构流量入口的核心组件。以下是其核心功能的全面深度解析,包含功能原理、核心配置、适用场景与关键特性。
一、静态资源 Web 服务
这是 Nginx 最基础的原生核心功能,作为 Web 服务器直接处理静态文件请求,性能远超传统 Apache 服务器。
核心原理
基于异步非阻塞 IO,通过内核sendfile 零拷贝技术直接传输静态文件,避免用户态与内核态的多次数据拷贝,极大提升文件传输效率,大幅降低 CPU 与 IO 开销。
核心特性
- 支持全类型静态资源托管(HTML/CSS/JS、图片、视频、文档等)
- 零拷贝 sendfile 机制,大文件支持
sendfile_max_chunk防阻塞 - 原生支持断点续传(Range 请求)、目录索引、带宽限制
- 完善的缓存过期控制(Cache-Control/Expires)
核心配置示例
server {
listen 80;
server_name static.example.com;
root /usr/share/nginx/static; # 静态资源根目录
index index.html index.htm; # 默认首页
# 开启零拷贝,优化TCP传输
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 静态资源缓存与日志优化
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
access_log off;
}
# 目录索引(用于文件下载站)
location /download/ {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
适用场景
官网静态页面、CDN 边缘节点、静态资源下载站、前后端分离项目前端资源托管。
二、反向代理
反向代理是 Nginx 最核心的企业级功能,也是其在架构中承担流量入口的核心能力。
核心原理
Nginx 接收客户端请求,按规则转发给后端上游(upstream)应用服务器(Tomcat/Node.js/Java/Python 等),再将后端响应结果返回给客户端。全程对客户端透明,屏蔽后端服务细节,实现请求转发与流量管控。
核心特性
- 支持 HTTP/HTTPS/HTTP2/GRPC/WebSocket/FastCGI/uwsgi 等多协议转发
- 完全异步非阻塞转发,不会因后端慢请求阻塞自身进程
- 支持请求头 / 响应头的修改、重写、过滤,URL 重写与重定向
- 长连接复用,大幅减少后端服务的 TCP 连接开销
核心配置示例
# 定义上游服务池
upstream backend_app {
server 127.0.0.1:8080;
server 192.168.1.100:8080;
}
server {
listen 80;
server_name api.example.com;
# 基础HTTP反向代理
location / {
proxy_pass http://backend_app;
# 传递客户端真实信息给后端
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时控制,防慢请求占用连接
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
# 缓冲区优化
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
# WebSocket反向代理
location /ws/ {
proxy_pass http://backend_app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
}
}
适用场景
微服务 API 网关、前后端分离项目接口转发、跨域解决方案、多服务统一入口、WebSocket 长连接代理。
三、负载均衡
负载均衡是反向代理的核心延伸能力,是企业级高可用架构的必备核心功能。
核心原理
当后端存在多个应用服务节点时,Nginx 按照预设的负载均衡算法,将客户端请求按规则分发到不同后端节点,实现流量分摊,提升系统并发处理能力;同时实现故障自动转移,单个节点宕机时自动切换到健康节点,保障服务高可用。
核心负载均衡算法
| 算法类型 | 核心原理 | 配置示例 | 适用场景 |
|---|---|---|---|
| 轮询(默认) | 请求按顺序逐一分配到后端节点,均匀分发 | upstream backend { server 10.0.0.1:8080; server 10.0.0.2:8080; } |
后端节点配置一致、无状态服务、无会话保持需求 |
| 加权轮询 | 按节点权重分配请求,权重越高,分发请求越多 | upstream backend { server 10.0.0.1:8080 weight=3; server 10.0.0.2:8080 weight=1; } |
后端服务器配置差异大,高配机器承接更多流量 |
| IP 哈希(ip_hash) | 基于客户端 IP 哈希计算,固定分配到同一节点,实现会话保持 | upstream backend { ip_hash; server 10.0.0.1:8080; server 10.0.0.2:8080; } |
有会话保持需求的服务,如本地存储 session 的登录系统 |
| 最少连接数(least_conn) | 请求优先分配给当前活跃连接数最少的节点,避免慢节点被压垮 | upstream backend { least_conn; server 10.0.0.1:8080; server 10.0.0.2:8080; } |
请求处理时长差异大,接口响应时间不均的后端服务 |
| URL 哈希 | 基于请求 URL 哈希计算,固定分配到同一节点 | upstream backend { hash $request_uri; server 10.0.0.1:8080; } |
反向代理缓存、CDN 节点,提升缓存命中率 |
高可用节点状态配置
upstream backend {
# 3次失败后,30秒内不再分配请求
server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 down; # 手动永久下线
server 192.168.1.12:8080 backup; # 备用节点,主节点全故障才启用
}
适用场景
高并发业务系统流量分摊、服务集群高可用架构、微服务集群流量治理。
四、动静分离
动静分离是 Nginx 最常用的架构优化手段,基于静态资源服务与反向代理能力实现,是 Web 架构的标准最佳实践。
核心原理
将动态请求(接口、动态页面)与静态资源请求(图片、CSS、JS、视频等)完全拆分:静态资源由 Nginx 直接处理(本身处理效率极高),动态请求转发给后端应用服务器处理。充分发挥 Nginx 高并发处理静态资源的优势,大幅降低后端应用服务器的压力。
核心优势
- 缩短响应链路:静态资源直接返回,无需经过后端应用
- 故障隔离:动态服务故障时,静态页面仍可正常访问
- 架构分层:静态资源可单独部署 CDN,动态服务独立扩容
核心配置示例
server {
listen 80;
server_name www.example.com;
root /usr/share/nginx/frontend;
index index.html;
# 静态资源:Nginx直接处理
location ~* \.(html|htm|js|css|png|jpg|jpeg|gif|ico|woff|woff2|ttf|svg)$ {
root /usr/share/nginx/frontend;
expires 7d;
sendfile on;
access_log off;
}
# 动态API请求:转发给后端应用
location /api/ {
proxy_pass http://backend_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 管理后台:转发给独立后端服务
location /admin/ {
proxy_pass http://backend_admin;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
适用场景
前后端分离项目、PHP/Java 动态网站架构、高并发门户网站、电商平台。
五、缓存加速
Nginx 提供原生的代理缓存能力,用于缓存后端服务的响应内容,减少重复回源请求,降低后端负载,提升响应速度。
核心原理
Nginx 将后端应用返回的响应内容(静态化动态页面、热点 API 接口结果等)缓存到本地磁盘 / 内存中,后续相同请求直接从缓存返回,无需转发给后端服务器,实现热点数据的加速访问。
核心特性
- 支持自定义缓存键、缓存过期时间、缓存维度
- 缓存命中 / 失效精细化控制,支持手动清理
- 缓存锁机制,防止缓存击穿
- 基于响应码的差异化缓存控制
核心配置示例
# http块全局缓存配置
http {
proxy_cache_path /var/cache/nginx
levels=1:2
keys_zone=my_cache:100m
max_size=10g
inactive=7d
use_temp_path=off;
upstream backend_app {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name cache.example.com;
# 启用缓存
location / {
proxy_cache my_cache;
proxy_cache_key $host$uri$is_args$args;
# 差异化缓存过期时间
proxy_cache_valid 200 304 1h;
proxy_cache_valid 301 302 1d;
proxy_cache_valid any 1m;
# 缓存状态头,便于排查
add_header X-Cache-Status $upstream_cache_status;
# 防缓存击穿
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
proxy_pass http://backend_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 敏感接口关闭缓存
location ~* /(login|pay|user|admin)/ {
proxy_cache off;
proxy_pass http://backend_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
关键缓存状态变量 $upstream_cache_status:HIT(命中)、MISS(未命中)、EXPIRED(过期)、BYPASS(绕过)。
适用场景
读多写少的业务场景、资讯网站、商品详情页、热点 API 接口缓存、减轻数据库与后端服务压力。
六、HTTPS 服务与 SSL/TLS 终端
Nginx 是目前最主流的 SSL/TLS 终端代理,是全站 HTTPS 的核心实现组件。
核心原理
Nginx 作为 SSL 终端,负责 SSL/TLS 握手、流量加密解密。客户端与 Nginx 之间为 HTTPS 加密传输,Nginx 与后端服务之间可通过内网 HTTP 明文传输,简化后端证书配置,降低后端加密解密的性能开销。
核心特性
- 支持 TLS 1.2/1.3,禁用不安全的老旧协议
- 支持 OCSP Stapling(OCSP 装订),提升 SSL 握手速度
- 原生支持 HTTP/2/HTTP/3,大幅提升 HTTPS 传输性能
- 支持 HSTS 强制 HTTPS、多域名 / 通配符证书
核心配置示例
http {
# SSL全局安全与优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 114.114.114.114 valid=300s;
resolver_timeout 5s;
# HTTPS站点配置
server {
listen 443 ssl http2;
server_name www.example.com;
# 证书配置
ssl_certificate /etc/nginx/ssl/www.example.com.pem;
ssl_certificate_key /etc/nginx/ssl/www.example.com.key;
# 安全头配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
location / {
proxy_pass http://backend_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP强制跳转HTTPS
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
}
适用场景
企业官网、电商平台、金融系统、小程序 / APP API 接口、所有需要加密传输的 Web 服务。
七、流量控制与限流
Nginx 提供企业级限流能力,是防突发流量、恶意请求、CC/DDOS 攻击的核心防线。
核心限流能力
1. 请求频率限流(漏桶算法)
基于 ngx_http_limit_req_module 模块,限制客户端单位时间内的请求数,超出请求直接拒绝,防止 CC 攻击与接口刷量。
# http块全局配置
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
listen 80;
server_name www.example.com;
# 全局限流
location / {
limit_req zone=req_limit burst=20 nodelay;
limit_req_status 429;
proxy_pass http://backend_app;
}
# 登录接口严格限流,防暴力破解
location /login/ {
limit_req zone=req_limit burst=5 nodelay;
limit_req_status 429;
proxy_pass http://backend_app;
}
}
}
2. 并发连接数限流
基于 ngx_http_limit_conn_module 模块,限制单个客户端 IP 的并发连接数,防止恶意连接占用服务器资源。
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
listen 80;
server_name download.example.com;
# 单IP最多5个并发连接
location /download/ {
limit_conn conn_limit 5;
limit_conn_status 503;
root /usr/share/nginx/download;
}
}
}
3. 带宽限制
限制单个请求的传输速率,防止大文件下载耗尽服务器带宽。
location /download/ {
root /usr/share/nginx/download;
limit_rate_after 100m; # 100M后开始限速
limit_rate 100k/s; # 限速100k/s
}
适用场景
防 CC/DDOS 攻击、接口防刷、登录接口防暴力破解、下载站点带宽控制、突发流量削峰。
八、安全与访问控制
Nginx 作为流量入口,是 Web 架构的第一道安全防线,提供丰富的原生安全防护能力。
核心安全能力
1. IP 黑白名单访问控制
基于 ngx_http_access_module 模块,实现 IP 级别的访问权限管控。
location /admin/ {
allow 192.168.1.0/24; # 允许内网网段
allow 10.0.0.0/8;
deny all; # 拒绝所有其他IP
proxy_pass http://backend_admin;
}
2. HTTP Basic Auth 身份认证
基于 ngx_http_auth_basic_module 模块,实现用户名密码基础认证,保护敏感资源。
# 前置操作:htpasswd -c /etc/nginx/conf.d/.htpasswd admin 生成密码文件
location /admin/ {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
proxy_pass http://backend_admin;
}
3. 恶意请求拦截
通过请求特征过滤爬虫、SQL 注入、XSS 等恶意请求。
# 屏蔽恶意爬虫User-Agent
if ($http_user_agent ~* (Scrapy|Curl|HttpClient|python|wget|spider)) {
return 403;
}
# 屏蔽非法请求方法
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
return 405;
}
# 屏蔽SQL注入、XSS恶意参数
if ($query_string ~* (union|select|insert|delete|update|drop|alert|script|<.*>)) {
return 403;
}
# 隐藏版本号,减少攻击面
http {
server_tokens off;
}
适用场景
网站安全防护、恶意请求拦截、敏感资源保护、防爬虫、防 CC 攻击。
九、内容压缩与优化
Nginx 提供 gzip 与 brotli 压缩能力,减少传输文件体积,提升页面加载速度,节省带宽成本。
1. Gzip 压缩(原生支持)
对文本类文件进行压缩,压缩比可达 60%-80%,主流浏览器全支持。
http {
gzip on;
gzip_vary on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6; # 1-9,6为性价比最优
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable "MSIE [1-6]\.";
}
2. Brotli 压缩(第三方模块)
Google 开发的新一代压缩算法,同等质量下比 gzip 小 20%-30%,需编译时添加 ngx_brotli 模块。
http {
brotli on;
brotli_vary on;
brotli_min_length 1k;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
适用场景
全类型 Web 站点,尤其是移动端站点、带宽有限的场景,提升页面加载速度,降低带宽成本。
十、虚拟主机
Nginx 支持在单台服务器上部署多个站点,通过域名、端口、IP 区分不同站点,极大提升服务器利用率。
1. 基于域名的虚拟主机(最常用)
通过 HTTP 请求头的 Host 字段区分站点,同 IP 同端口部署多个域名。
# 站点1
server {
listen 80;
server_name www.example.com;
root /usr/share/nginx/example1;
index index.html;
}
# 站点2
server {
listen 80;
server_name www.test.com;
root /usr/share/nginx/test;
index index.html;
}
2. 基于端口的虚拟主机
通过不同端口区分站点,多用于测试环境、内部系统。
# 生产环境80端口
server {
listen 80;
server_name localhost;
root /usr/share/nginx/prod;
}
# 测试环境8080端口
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/test;
}
3. 基于 IP 的虚拟主机
通过不同 IP 区分站点,服务器需配置多网卡 / 多 IP。
server {
listen 192.168.1.10:80;
server_name www.example.com;
root /usr/share/nginx/example1;
}
server {
listen 192.168.1.11:80;
server_name www.test.com;
root /usr/share/nginx/test;
}
适用场景
单服务器多站点部署、中小企业多站点托管、测试环境多环境隔离。
十一、健康检查
健康检查是保障服务高可用的核心能力,Nginx 提供原生被动健康检查,以及第三方模块的主动健康检查,自动剔除故障节点。
1. 原生被动健康检查(默认支持)
通过请求失败次数判断节点可用性,达到 max_fails 阈值后,在 fail_timeout 时间内自动剔除故障节点,超时后自动重试。
upstream backend {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}
2. 主动健康检查(第三方模块)
基于 nginx_upstream_check_module 模块,Nginx 主动定期向后端节点发送健康检查探针,根据响应结果判断节点状态,故障节点自动剔除,恢复后自动重新接入,比被动检查更精准。
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
# 健康检查配置:每3秒检查1次,2次成功标记可用,3次失败标记不可用
check interval=3000 rise=2 fall=3 timeout=2000 type=http;
check_http_send "GET /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
}
# 健康检查状态页面
location /status {
check_status;
access_log off;
allow 192.168.1.0/24;
deny all;
}
}
适用场景
高可用服务集群、核心业务系统、微服务架构,实现故障节点自动摘除与恢复。
十二、日志与监控
Nginx 提供完善的日志能力与状态监控模块,是运维排查问题、监控服务运行状态的核心依据。
1. 访问日志与错误日志
记录全量客户端请求信息与服务错误信息,支持自定义日志格式,适配数据分析与问题排查需求。
http {
# 自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time $upstream_response_time';
# 全局日志配置
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
server {
listen 80;
server_name www.example.com;
# 站点独立日志
access_log /var/log/nginx/example.access.log main;
error_log /var/log/nginx/example.error.log warn;
}
}
关键变量:$request_time(Nginx 处理请求总时长)、$upstream_response_time(后端服务响应时长),用于定位慢请求问题。
2. 运行状态监控
基于 ngx_http_stub_status_module 原生模块,提供 Nginx 核心运行指标,用于监控告警。
server {
listen 80;
server_name localhost;
location /nginx_status {
stub_status;
access_log off;
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
}
}
指标说明:
Active connections:当前活跃客户端连接数accepts handled requests:总接受连接数、总处理连接数、总请求数Reading/Writing/Waiting:正在读取请求的连接数、正在返回响应的连接数、空闲等待的长连接数
适用场景
运维监控、问题排查、流量分析、安全审计,可配合 Prometheus+Grafana 实现可视化监控。
十三、模块化扩展架构
Nginx 核心采用高度模块化设计,核心代码极度精简,所有功能均通过模块实现,具备极强的扩展能力:
- 核心模块:HTTP 核心模块、事件模块、配置模块等,支撑 Nginx 基础运行
- 标准模块:官方自带模块,如 proxy、rewrite、access、gzip 等,覆盖绝大多数基础场景
- 第三方模块:社区开源模块,如 ngx_brotli、nginx_upstream_check_module、lua-nginx-module 等,扩展高级能力
- 自定义模块:支持自研模块,定制化扩展 Nginx 功能
最典型的扩展生态是 OpenResty,基于 Nginx + LuaJIT 开发,通过 Lua 脚本实现 WAF、动态负载均衡、高级 API 网关等复杂能力。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)