Skip to content

Nginx 简介

主要用途和特点

Nginx是一个高性能 Web 服务器 / 反向代理服务器 / 邮件代理服务器。主要特点是高并发、高稳定、占用内存少。因为其轻量和强大的扩展能力,成为世界上最流行的Web服务器之一。 主要用途有:

场景说明
静态资源服务直接高效地返回 HTML/CSS/JS/图片等静态文件
反向代理接收客户端请求,转发到后端服务(Tomcat、Node.js、Go、Python…)
负载均衡多台后端服务器之间自动分配流量(支持轮询、权重、最少连接等策略)
SSL/TLS 终结在 Nginx 终结 HTTPS,后端走 HTTP,减轻后端压力
缓存缓存静态或动态页面,加快响应速度
限流/防盗链控制流量、按 IP 限制、按 Referer 限制等
WebSocket 支持可以反代 WebSocket 服务
邮件代理支持 IMAP/POP3/SMTP 代理

工作原理

  • 事件驱动(异步非阻塞 I/O) 每个 worker 进程用 epoll/kqueue 等机制同时处理成千上万个连接,不需要像传统服务器(Apache prefork)那样为每个连接开线程或进程。

  • 多进程模型

    • 一个 master 进程:负责加载/管理配置、监听信号
    • 多个 worker 进程:真正处理网络请求(数量一般 = CPU 核心数)
  • 零拷贝(sendfile) 直接在内核态把文件发送到 socket,减少内存拷贝开销。


配置文件结构

Nginx的配置文件使用的是一门微型编程语言,且Nginx的运行过程是声明式的,而不是过程式的。这与传统的编程语言有很大差异。Nginx内部自有一套配置指令的执行顺序。

Nginx 的配置文件一般在 /etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf

基本结构:

nginx
# 全局块(进程数、日志等)
worker_processes auto;

events {
    worker_connections 1024; # 每个 worker 最大连接数
}

http {
    # 全局 http 配置(mime-type、日志、gzip、缓存等)

    server {
        listen 80;                # 监听端口
        server_name example.com;  # 站点域名

        location / {
            root /var/www/html;   # 静态文件目录
            index index.html;
        }

        location /api/ {
            proxy_pass http://127.0.0.1:3000;  # 反向代理
        }
    }
}

核心概念:

  • http{}:HTTP 服务器全局配置块
  • server{}:一个虚拟主机
  • location{}:匹配 URI 的块,可以对不同路径设置不同策略

常见模块

内置模块

  • 核心模块:HTTP 核心、事件、配置解析
  • HTTP 模块:静态文件服务、gzip、access_log、rewrite、proxy、fastcgi、uwsgi、scgi、memcached
  • Stream 模块(TCP/UDP 代理):反代 MySQL、Redis 等
  • Mail 模块:IMAP/POP3/SMTP 代理

第三方模块(可编译进 Nginx)

  • ngx_http_echo_module(echo 输出)
  • ngx_http_lua_module(嵌入 Lua 脚本)
  • ngx_pagespeed(Google 出品,自动优化页面资源)
  • nginx-rtmp-module(推流/拉流直播)