Nginx(发音 "engine x")是一款高性能的HTTP / 反向代理服务器、负载均衡器、静态资源服务器,同时支持邮件代理、缓存、SSL 终结等能力,因轻量、高并发、低内存占用的特性,成为互联网架构中不可或缺的核心组件。以下是 Nginx 最核心的应用场景及落地实操:
一、核心应用场景 1:静态资源服务器(最基础)
Nginx 处理静态文件(HTML/CSS/JS/ 图片 / 视频)的性能远超 Tomcat/Java 容器,是静态资源分发的首选。
核心配置(nginx.conf)
nginx
http {
include mime.types; # 识别文件类型(如 .html/.jpg)
default_type application/octet-stream;
server {
listen 80; # 监听 80 端口
server_name static.example.com; # 域名(可替换为 IP)
# 静态资源根目录
root /usr/local/nginx/html;
index index.html index.htm;
# 优化静态资源缓存(浏览器缓存,减少重复请求)
location ~* \.(jpg|png|css|js)$ {
expires 7d; # 缓存 7 天
add_header Cache-Control "public, max-age=604800";
}
# 禁止访问隐藏文件(如 .htaccess)
location ~ /\.ht {
deny all;
}
}
}
关键优化
- 开启
sendfile on;(零拷贝,减少磁盘 IO 与内核交互); - 配置
gzip on;(压缩静态资源,减少传输体积); - 大文件(如视频)配置
client_max_body_size 100M;避免上传 / 访问限制。
二、核心应用场景 2:反向代理(解耦前端与后端)
反向代理是 Nginx 最核心的能力之一:客户端请求 Nginx,Nginx 转发到后端应用服务器(Tomcat/Java/Python),隐藏后端服务地址,同时实现请求过滤、负载均衡。
基础反向代理配置
nginx
server {
listen 80;
server_name api.example.com;
# 反向代理到后端 Tomcat 服务
location /api/ {
proxy_pass http://192.168.1.100:8080/; # 后端服务地址(末尾 / 需匹配路径)
proxy_set_header Host $host; # 传递真实域名
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 透传代理链 IP
proxy_connect_timeout 30s; # 连接超时
proxy_read_timeout 60s; # 读取超时
}
}
核心价值
- 隐藏后端服务 IP,提升安全性;
- 统一入口(如所有请求走 80/443 端口,后端服务可监听非标准端口);
- 可在 Nginx 层做请求过滤(如限制 IP、拦截非法请求)。
三、核心应用场景 3:负载均衡(分流后端压力)
当后端有多台应用服务器时,Nginx 可将请求分发到不同节点,提升系统并发能力,实现高可用。
负载均衡核心配置
nginx
http {
# 定义后端服务器集群(upstream 模块)
upstream backend_cluster {
# 负载均衡策略:
# 1. round_robin(默认):轮询分发
# 2. ip_hash:按客户端 IP 哈希,固定分发到同一节点(解决会话粘滞)
# 3. weight:权重分发(权重越高,接收请求越多)
server 192.168.1.100:8080 weight=5; # 权重 5
server 192.168.1.101:8080 weight=3; # 权重 3
server 192.168.1.102:8080 backup; # 备用节点(主节点故障时启用)
# 健康检查(nginx-plus 支持,开源版需结合第三方模块)
keepalive 32; # 保持长连接,减少握手开销
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend_cluster; # 转发到集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
常用负载均衡策略对比
| 策略 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| round_robin | 后端节点性能一致 | 简单、无状态 | 无法适配节点性能差异 |
| weight | 后端节点性能不同(如高配 / 低配) | 按需分配请求 | 需手动调整权重 |
| ip_hash | 需会话粘滞(如未做分布式会话) | 固定客户端到节点 | 节点故障时会话丢失 |
| least_conn | 后端节点连接数差异大 | 分发更均匀 | 略增加 Nginx 计算开销 |
四、核心应用场景 4:HTTPS 终结(SSL 证书配置)
Nginx 作为 SSL 终结点,处理 HTTPS 加密 / 解密,后端服务只需处理 HTTP 请求,降低后端性能消耗。
HTTPS 配置(Let's Encrypt 免费证书为例)
nginx
server {
listen 443 ssl http2; # 开启 HTTPS + HTTP2(提升传输效率)
server_name www.example.com;
# SSL 证书路径(替换为实际路径)
ssl_certificate /etc/nginx/cert/fullchain.pem;
ssl_certificate_key /etc/nginx/cert/privkey.pem;
# SSL 优化配置
ssl_protocols TLSv1.2 TLSv1.3; # 仅支持安全协议
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m; # 会话缓存,减少握手
# 强制 HTTP 跳转 HTTPS
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
# 反向代理到后端
location / {
proxy_pass http://backend_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# HTTP 跳转 HTTPS(80 端口)
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
五、核心应用场景 5:请求限流与防护(安全加固)
Nginx 可限制请求频率、拦截非法请求,防止恶意攻击(如 CC 攻击)。
1. 基于 IP 的限流
nginx
http {
# 定义限流规则:10r/s(每秒 10 个请求),缓存 100 个请求
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
location /api/ {
# 应用限流规则,超出则返回 503
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend_cluster;
}
}
}
2. 限制并发连接数
nginx
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
location /download/ {
limit_conn conn_limit 20; # 单 IP 最多 20 个并发连接
root /usr/local/nginx/download;
}
}
}
3. 拦截非法 User-Agent/IP
nginx
location / {
# 拦截爬虫/恶意 User-Agent
if ($http_user_agent ~* (scrapy|curl|wget|python)) {
return 403;
}
# 拦截黑名单 IP
deny 192.168.1.200;
allow 192.168.1.0/24;
deny all;
}
六、核心应用场景 6:URL 重写与路由(前端路由适配)
适配前端单页应用(Vue/React)的路由模式(如 History 模式),或实现 URL 美化、旧地址跳转。
前端路由适配(Vue History 模式)
nginx
server {
listen 80;
server_name fe.example.com;
root /usr/local/nginx/fe/dist; # 前端打包后的目录
index index.html;
# 适配 History 模式:所有路由请求转发到 index.html
location / {
try_files $uri $uri/ /index.html;
}
# 旧 URL 重写(如 /old-path → /new-path)
rewrite ^/old-path/(.*)$ /new-path/$1 permanent;
}
七、Nginx 进阶应用:缓存加速
Nginx 可缓存后端响应结果,减少后端重复请求,提升响应速度(适合读多写少的场景,如商品详情、新闻列表)。
缓存配置
nginx
http {
# 定义缓存路径:/var/nginx/cache,内存缓存 100M,磁盘缓存 10G,缓存 1 天
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=api_cache:100m max_size=10g inactive=1d use_temp_path=off;
server {
location /api/article/ {
proxy_pass http://backend_cluster;
proxy_cache api_cache; # 应用缓存
proxy_cache_key $host$request_uri; # 缓存键(按域名+URL 缓存)
proxy_cache_valid 200 304 1h; # 200/304 响应缓存 1 小时
proxy_cache_valid any 1m; # 其他响应缓存 1 分钟
proxy_cache_bypass $cookie_nocache $arg_nocache; # 带 nocache 参数则跳过缓存
add_header X-Proxy-Cache $upstream_cache_status; # 响应头标识是否命中缓存(HIT/MISS)
}
}
}
八、Nginx 部署与运维关键操作
1. 常用命令
bash
运行
# 启动
nginx
# 停止
nginx -s stop
# 优雅重启(不中断请求)
nginx -s reload
# 检查配置语法
nginx -t
# 查看版本
nginx -v
2. 日志管理
Nginx 日志分为
access.log(访问日志)和 error.log(错误日志),核心配置:nginx
http {
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;
error_log /var/log/nginx/error.log warn; # 仅记录 warn 及以上错误
}
3. 高可用部署
- 单机故障:结合 Keepalived 实现 Nginx 主备切换(虚拟 IP 漂移);
- 集群部署:使用 Nginx Plus 或开源方案(如 Kong/OpenResty)实现集群化管理。
核心总结
Nginx 的核心价值是 **「高性能、高可用、解耦架构」**,核心应用可总结为:
| 应用场景 | 核心价值 | 典型配置模块 |
|---|---|---|
| 静态资源服务器 | 高性能分发静态文件,降低后端压力 | root/expires |
| 反向代理 | 隐藏后端地址,统一入口 | proxy_pass |
| 负载均衡 | 分流后端请求,提升并发 / 高可用 | upstream |
| HTTPS 终结 | 统一处理 SSL,降低后端开销 | ssl_certificate |
| 限流 / 防护 | 防止恶意攻击,保障服务稳定 | limit_req/deny |
| 缓存加速 | 减少后端请求,提升响应速度 | proxy_cache |
Nginx 是互联网架构的「基础设施」,掌握以上场景可覆盖 90% 的业务需求,进阶可结合 OpenResty(Nginx + Lua)实现自定义逻辑(如灰度发布、动态路由)。