Nginx 核心功能

Nginx 核心功能

Nginx 是一款开源、高性能、轻量级的 HTTP 服务器、反向代理、负载均衡器、TCP/UDP 代理及邮件代理服务器

一、核心架构

  1. Master 进程 :以 root 权限运行,负责读取配置文件、管理 Worker 进程(启动 / 重启 / 平滑重载)、处理系统信号(如 reload/stop)、打开日志文件,不直接处理用户请求。
  2. Worker 进程 :以普通用户(如 www-data)运行,是请求处理的核心单元;数量通过 worker_processes 配置(推荐设为 CPU 核心数或 auto),多核环境下可充分利用 CPU 资源,避免上下文切换开销。
  3. 事件驱动模型 :基于 epoll(Linux)、kqueue(BSD)等高效事件机制,单 Worker 进程可同时处理数万并发连接,内存占用极低(静态文件场景下每个连接仅约 2.5KB)。
  4. 共享内存:用于缓存、会话保持、限流、日志共享等,实现多 Worker 进程间的数据协同NGINX开源社区。

二、HTTP 核心服务功能

1. 静态资源服务(基础能力)

  • 高效提供 HTML、CSS、JS、图片、视频等静态文件,支持自动索引(autoindex)、目录浏览、索引文件(index)配置。
  • 内置文件描述符缓存(open_file_cache),减少文件打开 / 关闭开销,大幅提升静态资源访问速度。
  • 支持 FLV/MP4 视频流式传输,可实现断点续传与范围请求(byte-rangenginx.org

2. 虚拟主机

  • 支持 基于域名server_name)和 基于 IP 的虚拟主机,单台 Nginx 可同时托管多个独立网站,共享端口与资源。
  • 每个虚拟主机独立配置根目录、日志、访问规则、SSL 证书等,实现站点隔离nginx.org

3. 请求处理与路由

  • 基于 location 块实现 URI 精准匹配(前缀、正则、精确匹配),灵活分发请求至不同处理逻辑。
  • 内置 rewrite 模块,支持正则表达式实现 URI 重写、重定向(3xx 状态码),适配 URL 规范与业务路由需求nginx.org
  • 支持 HTTP/1.1 长连接(keepalive)、请求流水线(pipelining),减少连接建立开销,提升吞吐nginx.org

4. 动态请求代

  • 支持 FastCGI、uWSGI、SCGI、memcached 等协议,可将动态请求转发至 PHP-FPM、Python(Django/Flask)、Node.js 等后端应用服务器。
  • 提供 fastcgi_passuwsgi_pass 等指令,实现动态请求的高效转发与参数传递。

三、反向代理

反向代理是 Nginx 最核心的应用场景,作为 "流量入口" 接收客户端请求,转发至后端服务并返回响应,核心功能如下:

  1. 请求转发 :通过 proxy_pass 指令将请求转发至后端服务器(HTTP/HTTPS),隐藏后端真实 IP,提升安全性。
  2. 请求 / 响应处理 :支持修改请求头(如传递客户端真实 IP X-Real-IP/X-Forwarded-For)、响应头过滤、内容替换nginx.org
  3. 缓存加速 :内置代理缓存(proxy_cache),缓存后端响应,减少重复请求,降低后端压力,提升访问速度。
  4. 故障容错:后端服务器异常时,自动跳过故障节点,将请求转发至健康节点,保障服务可用性。

四、负载均衡

基于反向代理扩展,实现多后端服务器的流量智能分发,核心功能:

  1. 分发策略
    • 轮询(默认):请求依次分发至后端节点。
    • 加权轮询(weight):按节点权重分配流量,适配性能差异服务器。
    • IP 哈希(ip_hash):同一客户端 IP 始终转发至同一后端,实现会话保持。
    • 最少连接(least_conn):将请求分发至当前连接数最少的节点,均衡负载。
    • 通用哈希(hash):基于 URI、请求参数等自定义维度哈希分发。
  2. 健康检查 :通过 max_failsfail_timeout 等指令检测后端节点状态,自动剔除故障节点,恢复后重新加入集群。
  3. 会话保持 :结合 ip_hash 或第三方模块(如 sticky),确保用户会话绑定至固定后端,避免会话丢失。

五、安全与访问控制

  1. SSL/TLS 加密 :支持 HTTPS 服务,配置 SSL 证书(ssl_certificate/ssl_certificate_key),支持 TLS 1.2/1.3、SNI(多域名证书共享)、HTTP/2、HTTP/3(QUIC),保障传输安全。
  2. 访问控制
    • IP 黑白名单:通过 allow/deny 指令限制客户端 IP 访问。
    • 基础认证:auth_basic 实现 HTTP 账号密码验证。
    • 子请求验证:通过 auth_request 对接外部认证服务(如 OAuth、JWT)nginx.org
  3. 限流与防攻击
    • 连接数限制:limit_conn 限制单 IP 并发连接数。
    • 请求速率限制:limit_req 限制单 IP 单位时间请求数,防 CC 攻击。
    • Referer 验证:valid_referers 防止盗链nginx.org
  4. 错误处理:自定义 3xx-5xx 错误页面,实现友好的错误重定向与用户提示nginx.org

六、性能优化功能

  1. 内容压缩gzip 模块自动压缩文本资源(HTML/CSS/JS),减少传输体积,提升加载速度。
  2. 文件缓存open_file_cache 缓存文件描述符与元数据,proxy_cache 缓存代理响应,降低 I/O 开销。
  3. 零拷贝传输 :支持 sendfile 指令,实现内核态直接文件传输,减少用户态与内核态数据拷贝,提升静态文件传输效率。
  4. 连接复用:长连接、请求流水线减少 TCP 连接建立开销,提升并发处理能力nginx.org
  5. 线程池thread_pool 处理磁盘 I/O 等阻塞操作,避免 Worker 进程阻塞,保障事件循环高效运行NGINX开源社区。

七、TCP/UDP 四层代理

除 HTTP 七层代理外,Nginx 支持 TCP/UDP 四层流量转发,核心功能:

  1. 通用代理 :通过 stream 块配置,转发 MySQL、Redis、SSH、DNS 等 TCP/UDP 服务流量。
  2. 负载均衡:支持 TCP/UDP 流量的轮询、加权轮询、IP 哈希等分发策略。
  3. SSL 终止:为 TCP 流量提供 SSL 加密 / 解密,实现四层安全传输。
  4. 访问控制:基于客户端 IP 限制连接,限制单 IP 并发连接数。

八、邮件代理服务

支持 SMTP、POP3、IMAP 邮件协议代理,核心功能:

  1. 邮件客户端请求转发至后端邮件服务器,隐藏后端真实地址。
  2. 支持 SSL/TLS 加密,保障邮件传输安全。
  3. 提供用户认证、访问控制、连接管理等能力。

九、模块化与扩展能力

  1. 模块化架构 :核心模块(core/events/http/stream)+ 可选模块(gzip/ssl/rewrite/proxy),按需加载,避免冗余。
  2. 动态模块加载 :支持 load_module 指令动态加载第三方模块(如 nginx-rtmp-modulelua-nginx-module),扩展功能(如直播、Lua 脚本逻辑)。
  3. njs 脚本支持:内置 JavaScript 运行时,可通过 njs 实现复杂请求处理、逻辑判断、数据转换等定制化能力。
  4. 嵌入式 Perl:支持 Perl 脚本扩展,适配特定业务逻辑需求nginx.org

十、运维与管理功能

  1. 平滑重载nginx -s reload 不中断服务更新配置,Worker 进程优雅重启,保障业务连续性NGINX开源社区。
  2. 热升级USR2 信号实现二进制文件热替换,完成版本升级无 downtimeNGINX开源社区。
  3. 日志管理 :自定义访问日志(access_log)、错误日志(error_log)格式,支持缓冲写入、快速日志轮换、Syslog 输出,便于监控与排查nginx.org
  4. 信号控制 :支持 TERM(强制停止)、QUIT(优雅停止)、HUP(重载配置)、USR1(重新打开日志)等信号,灵活管理服务状态NGINX开源社区。

十一、核心配置指令

nginx

复制代码
# 核心配置(nginx.conf)
user www-data;
worker_processes auto; # 自动匹配CPU核心数
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;

events {
    worker_connections 1024; # 单Worker最大连接数
    use epoll; # Linux高效事件模型
}

http {
    include mime.types;
    default_type application/octet-stream;

    # 日志格式
    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;

    sendfile on; # 开启零拷贝
    keepalive_timeout 65; # 长连接超时

    # 负载均衡后端组
    upstream backend {
        server 192.168.1.10:8080 weight=3;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080 backup; # 备用节点
    }

    # 虚拟主机
    server {
        listen 80;
        server_name example.com;

        # 静态资源服务
        location /static/ {
            root /var/www;
            expires 7d; # 缓存7天
        }

        # 反向代理+负载均衡
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # SSL配置(443端口)
        listen 443 ssl;
        ssl_certificate /etc/nginx/cert/example.crt;
        ssl_certificate_key /etc/nginx/cert/example.key;
        ssl_protocols TLSv1.2 TLSv1.3;
    }
}

十二、核心应用场景

  1. 静态网站托管:高效服务 HTML、图片、视频等静态资源,适合博客、官网、CDN 节点。
  2. API 网关:作为微服务入口,实现请求路由、负载均衡、认证、限流、监控。
  3. 反向代理与高可用:隐藏后端服务,实现故障转移,保障核心业务 7×24 可用。
  4. 四层流量转发:代理 MySQL、Redis、DNS 等服务,实现跨网络访问与负载均衡。
  5. 邮件服务代理:为企业邮件系统提供安全、稳定的代理层。
相关推荐
C+++Python3 小时前
Linux/C++多进程
linux·运维·c++
最贪吃的虎3 小时前
GitHub推送又超时了?试试SSH
运维·ssh·github
SeSs IZED3 小时前
【Nginx 】Nginx 部署前端 vue 项目
前端·vue.js·nginx
XZY0283 小时前
如何使用grpc
运维·服务器
rleS IONS3 小时前
SQL2000在win10上安装的方法
运维·服务器
zly35003 小时前
centos7 sshd无法启动
linux·运维·服务器
编程大师哥5 小时前
Linux 命名管道(FIFO)通信 超清晰讲解
linux·运维·服务器
Smile_2542204185 小时前
linux服务器清理磁盘
linux·运维·服务器
KivenMitnick5 小时前
Claude Code--Ubuntu Linux超详细配置教程(附每步的可能报错及解决方法)
linux·运维·ubuntu