Nginx 核心应用场景与实操指南

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)实现自定义逻辑(如灰度发布、动态路由)。
阅读剩余
THE END