Nginx的概念及其工作原理

705 阅读3分钟

一、Nginx 是什么?

  • 定义:Nginx 是一款 高性能的 HTTP 和反向代理服务器,同时支持邮件代理、TCP/UDP 负载均衡等功能。
  • 核心优势
    • 高并发:基于事件驱动的异步非阻塞架构(如 epoll 模型),可轻松应对数万并发连接。
    • 低资源消耗:内存占用低,静态资源处理效率极高。
    • 模块化设计:支持通过模块扩展功能(如缓存、SSL、负载均衡)。

二、Nginx 核心应用场景

场景说明配置示例
反向代理隐藏真实服务器,转发请求到后端服务。反向代理配置示例
负载均衡将请求分发到多个后端服务器,提升系统吞吐量和容灾能力。负载均衡配置示例
静态资源服务器直接托管 HTML、CSS、图片等静态文件,降低应用服务器压力。静态资源配置示例
SSL 终端统一处理 HTTPS 加密/解密,后端服务无需支持 SSL。SSL 配置示例
API 网关路由、限流、缓存、日志等统一管理。结合 limit_req(限流)、access_log(日志)等模块配置。

三、Nginx 工作原理

1. 进程模型

  • Master 进程
    管理 Worker 进程,读取配置文件、平滑重启、日志管理等。
    ps aux | grep nginx  # 查看进程,通常 1 个 Master + 多个 Worker
    
  • Worker 进程
    实际处理请求的进程,彼此独立,避免竞争资源。数量通常等于 CPU 核心数。

2. 事件驱动模型

  • 异步非阻塞:Worker 进程通过 epoll(Linux)或 kqueue(Mac)等机制,非阻塞处理多个请求,避免线程切换开销。
  • 多阶段处理:将请求处理分为多个阶段(如解析头、读取 body、过滤响应),通过状态机高效流转。

3. 请求处理流程

  1. 客户端发起请求到 Nginx。
  2. Master 进程分配 Worker 处理连接。
  3. Worker 解析请求头,匹配 serverlocation 配置。
  4. 执行代理、重定向或静态文件响应。
  5. 返回响应给客户端,保持连接复用(HTTP/1.1 Keep-Alive)。

四、关键配置示例

1. 反向代理配置示例

server {
    listen 80;
    server_name example.com;

    location /api {
        proxy_pass http://backend-server:8080;  # 转发到后端服务
        proxy_set_header Host $host;            # 传递原始请求头
        proxy_set_header X-Real-IP $remote_addr;
    }
}

2. 负载均衡配置示例

http {
    upstream backend {
        server 192.168.1.2:8000 weight=3;  # 权重 3,处理更多请求
        server 192.168.1.3:8000;
        server 192.168.1.4:8000 backup;    # 备用服务器,当主节点宕机时启用
    }

    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

3. 静态资源配置示例

server {
    listen 80;
    server_name static.example.com;

    location / {
        root /data/www/static;  # 静态文件根目录
        index index.html;
        expires 7d;            # 设置缓存过期时间
    }
}

4. SSL 配置示例

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/server.crt;  # 证书路径
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        proxy_pass http://backend-server;
    }
}

五、Nginx vs Apache

对比项NginxApache
并发模型事件驱动、异步非阻塞,高并发性能优异。多线程/多进程,高并发时资源消耗较大。
静态资源处理高效,适合静态内容和高并发场景。依赖模块优化,动态内容处理更灵活。
配置语法简洁,基于块的声明式配置。基于指令的复杂配置。
扩展性模块需在编译时添加,灵活性较低。动态加载模块(DSO),扩展性强。

六、面试回答示例

“Nginx 是一款高性能的反向代理服务器,采用事件驱动的异步非阻塞架构,适合高并发场景。核心功能包括反向代理、负载均衡、静态资源托管和 SSL 终端。它通过 Master 管理多个 Worker 进程,每个 Worker 使用 epoll 高效处理请求。实际项目中常用它隐藏后端服务、分发流量或缓存静态文件。”


快速记忆口诀

Nginx 高性能,事件驱动异步行。
反向代理负载均,静态资源它最灵。
Master 管 Worker,epoll 模型效率赢。
配置简洁模块化,高并发下稳如钉。