NGINX MASTER CLASS

从原理到实战,打造高性能 Web 架构的终极指南

开始学习

第一部分:Nginx 核心概念解析

什么是 Nginx?

Nginx (Engine X) 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。它以其稳定性、丰富的功能集、简单的配置文件和低系统资源消耗而闻名。

高性能

采用事件驱动(Event-driven)架构,能够支持数万并发连接。

低内存

在 10,000 个非活跃 HTTP 保持连接下,仅消耗约 2.5MB 内存。

热部署

Master-Worker 模式允许在不停止服务的情况下升级软件或修改配置。

核心架构:Master-Worker 模型

Nginx 启动后会产生一个 Master 进程和多个 Worker 进程。Master 负责管理 Worker(如加载配置、平滑重启),而 Worker 负责处理实际的客户端请求。

Master 管理进程 Worker 1 Worker 2 Worker 3 Worker 4 Client Requests (Non-blocking I/O)

第二部分:核心功能与应用场景

1. 静态内容服务

Nginx 处理静态文件(HTML, CSS, Images)的速度极快。这是最基础的用法。

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html; # 指定根目录
        index index.html;
    }
}

2. 反向代理 (Reverse Proxy)

Nginx 接收客户端请求,并将其转发给后端的应用服务器(如 Node.js, Python, Java)。客户端只知道 Nginx,不知道后端的具体结构。

User Nginx Port 80 App Server 1 :3000 App Server 2 :3001
location /api {
    proxy_pass http://localhost:3000; # 转发请求
    proxy_set_header Host $host;
}

3. 负载均衡 (Load Balancing)

当后端有多台服务器时,Nginx 可以将流量分发给它们,提高系统的可用性和扩展性。默认使用轮询(Round Robin)算法。

Req 1 Req 2 Req 3 Nginx Upstream Server A Server B Server C
upstream myapp {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

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

第三部分:关键配置指令与语境

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf。它的结构是分块(Block)的。

main (global context) http { ... } server { ... } listen 80; server_name ... location / { ... } root /var/www; index index.html; location /api { ... } proxy_pass ...;

server

定义一个虚拟主机。可以根据端口或域名来区分。

location

根据请求的 URI 进行匹配,决定如何处理请求(是读取文件还是转发)。

upstream

定义一组后端服务器,用于负载均衡。

第四部分:实用命令与调试

常用命令

# 启动 Nginx
sudo systemctl start nginx

# 测试配置文件语法是否正确(非常重要!)
sudo nginx -t

# 重载配置(不中断服务)
sudo nginx -s reload

# 停止服务
sudo systemctl stop nginx

调试建议

当出现问题时(如 404, 502 错误),首先检查日志。

  • 访问日志: /var/log/nginx/access.log - 记录谁访问了什么。
  • 错误日志: /var/log/nginx/error.log - 记录启动错误或处理请求时的异常。

常见错误:502 Bad Gateway

通常意味着 Nginx 无法连接到后端应用服务器。请检查后端服务是否启动,端口是否正确。