Nginx 基于异步非阻塞 + 零拷贝实现静态文件高性能处理。它采用 sendfile 系统调用,直接在内核态将文件数据从磁盘拷贝到网卡,跳过用户态,减少 CPU 开销。同时开启文件缓存(open_file_cache),缓存文件描述符、大小、修改时间,避免重复磁盘 IO。配合 gzip 压缩、浏览器缓存(expires)、线程池异步处理,大幅降低响应时间。Nginx 单线程事件驱动模型,无需为每个请求创建线程,能轻松支撑万级并发静态文件访问,比传统 Web 服务器性能提升数倍,是业界首选的静态资源服务器。
反向代理是 Nginx 接收客户端请求,转发给后端服务并返回结果,客户端无感知后端节点。负载均衡基于 upstream 模块,将请求分发给多个后端实例,分摊压力。工作流程:客户端请求到达 Nginx;反向代理模块解析请求,根据规则匹配后端服务;负载均衡策略(轮询、权重等)选择目标节点;转发请求并接收响应,返回给客户端。反向代理隐藏后端节点,提升安全;负载均衡避免单点故障,提升并发能力,两者结合是微服务网关的核心能力。
Nginx 配置文件是分层块结构,核心分全局块、events 块、http 块、server 块、location 块。全局块:配置 worker 进程数、用户、PID 等。events 块:配置连接模型、最大连接数。http 块:配置日志、压缩、缓存、upstream 等全局 HTTP 参数。server 块:定义虚拟主机,监听端口、域名。location 块:匹配请求路径,配置代理、重写、访问控制。主要指令:worker_processes、listen、server_name、location、proxy_pass、upstream、gzip、expires 等,配置指令层级严格,子块继承父块参数。
Nginx 采用多进程异步非阻塞模式处理 HTTP 请求。master 进程管理 worker 进程,worker 进程(单线程)通过 epoll 事件模型监听连接。客户端建立连接后,worker 进程异步接收请求头、解析请求;匹配 server 和 location,执行对应逻辑(静态文件 / 代理 / 重写);处理完成后,异步构建响应头、响应体,发送给客户端;最后关闭或保持长连接。全程无阻塞,一个 worker 可同时处理数千请求,CPU 利用率极高,相比同步阻塞模型,并发能力呈指数级提升。
Nginx 通过openssl 库实现 SSL/TLS 加密,配置需指定证书文件、私钥文件、加密协议。工作流程:客户端发起 HTTPS 请求,Nginx 与客户端完成 TLS 握手,协商加密套件、交换密钥;握手成功后,双方用对称密钥加密传输数据;Nginx 解密客户端请求,转发给后端,再加密响应返回。配置指令:ssl_certificate、ssl_certificate_key、ssl_protocols、ssl_ciphers。TLS 加密保证传输数据不被窃听、篡改,是 HTTPS 的核心安全保障。
Nginx 采用epoll(Linux)/kqueue(BSD) 异步事件驱动模型,彻底告别传统多线程阻塞模式。worker 进程单线程运行,将所有连接注册到事件监听器,无需阻塞等待请求;当连接有读 / 写事件时,内核主动通知 worker 进程处理。一个进程可同时管理数万并发连接,仅在有事件时才执行操作,CPU 无空转。相比每个请求一个线程的模型,减少了线程切换、内存开销,CPU 利用率接近 100%,这是 Nginx 高并发的核心原因。
Nginx 的错误处理通过error_page 指令自定义错误码页面,如 404、500 跳转至指定页面或后端接口。日志分访问日志和错误日志:访问日志记录客户端请求、状态码、响应时间等,用于流量统计;错误日志记录服务启动、运行异常、请求错误,用于故障排查。日志可配置格式、存储路径、切割策略(按天 / 大小),配合 logrotate 自动归档,避免磁盘爆满。日志和错误处理是运维监控、故障定位的核心手段,生产环境必须开启。
Nginx 基于红黑树实现高精度定时器,管理所有超时事件。每个连接、请求都会绑定超时时间(如 keepalive_timeout、proxy_connect_timeout),加入红黑树排序。worker 进程每次处理完事件后,检查红黑树中到期的定时器,执行超时逻辑:关闭无效连接、终止超时请求、释放资源。定时器高效、低开销,精准处理连接超时、代理超时、读写超时,避免资源泄漏,保证高并发下服务稳定运行。
Nginx 自研内存池(Memory Pool) 实现高效内存管理,避免频繁 malloc/free 和内存碎片。请求处理前,创建专属内存池;请求过程中,所有内存分配从池中申请,无需单独释放;请求结束后,一次性销毁整个内存池。同时针对小内存、大内存分池管理,复用内存块,减少系统调用。内存池配合无锁设计(单 worker 进程),无并发竞争,内存分配 / 释放速度极快,彻底解决高并发下的内存碎片、分配效率低的问题。
Nginx 采用高度模块化、松耦合的设计,核心框架仅提供事件、内存、进程管理,所有功能(HTTP、代理、缓存、限流)均以模块实现。模块分核心模块、标准模块、第三方模块,启动时按需加载。模块通过钩子函数注册到请求处理流程,在不同阶段(解析、处理、响应)执行逻辑。模块间无直接依赖,可独立编译、卸载。这种设计让 Nginx 扩展性极强,用户可自定义模块,适配各类业务场景,保持核心精简高效。
Nginx 通过内存池 + 严格的生命周期管理从根源避免内存泄露。所有内存分配绑定请求 / 连接的内存池,生命周期结束后整体释放,无单独内存遗漏。worker 进程单线程运行,无多线程并发内存操作,避免锁导致的内存泄漏。同时 Nginx 代码极简,无冗余内存分配,官方版本几乎无内存泄漏。生产中可通过调整内存池大小、限制最大连接数、定期重启 worker 进程,进一步规避风险,保证高并发下内存占用稳定。
Nginx 请求处理分多阶段流水线:1. 客户端建立 TCP 连接,worker 进程接收连接;2. 解析 HTTP 请求头,匹配 server 块(域名 / 端口);3. 匹配 location 块(请求路径),执行对应配置;4. 处理请求:静态文件读取、反向代理、重写、限流等;5. 生成 HTTP 响应,发送给客户端;6. 处理完成,释放内存池,保持长连接或关闭。全程异步非阻塞,多阶段模块化处理,高效且灵活,支撑各类请求场景。
配置 HTTPS 需在 server 块开启 ssl,指定证书、私钥,监听 443 端口。安全强化:禁用 SSLv3、TLS1.0/1.1,仅开启 TLS1.2/1.3;配置强加密套件,禁用弱算法;开启 HSTS(强制 HTTPS),防止协议降级;配置 OCSP Stapling,加速证书验证;开启 ssl_prefer_server_ciphers,优先服务端加密套件。同时配置 HTTP 自动跳转 HTTPS。全套配置可抵御中间人攻击、窃听、篡改,达到 A 级安全标准。
Nginx 负载均衡策略丰富:轮询(默认):平均分发,适用于后端节点配置一致、无状态服务。权重轮询:按权重分配流量,适用于节点配置不同的场景。IP 哈希:客户端 IP 固定映射节点,解决会话共享问题。最少连接:分发到连接数最少的节点,适用于长连接服务。fair:按响应时间分配,适用于性能差异大的后端。url_hash:按 URL 哈希分发,适用于缓存服务。不同策略适配不同业务,灵活满足高可用、会话保持、性能优化需求。
静态文件优化核心是减少 IO、压缩、缓存:开启 sendfile 零拷贝,内核直传文件;开启 gzip/brotli 压缩,减小传输体积;配置 expires/cache-control,开启浏览器缓存;启用 open_file_cache 缓存文件元数据;使用 tcp_nopush、tcp_nodelay 优化网络传输;部署 CDN 回源,就近访问。同时拆分静态资源,使用长连接,减少连接开销。多重优化后,静态文件加载速度可提升 5~10 倍,大幅降低服务端压力。
upstream 模块定义后端服务节点池,实现动态内容代理。配置步骤:http 块内定义 upstream 组,添加后端服务 IP: 端口,配置负载均衡策略;location 块中用 proxy_pass 转发请求到 upstream 组;配置 proxy_set_header 传递真实 IP、主机名等请求头。可配置节点健康检查、超时时间、失败重试。upstream 模块将动态请求转发给 Tomcat、Spring Boot 等后端服务,Nginx 仅做转发,分离动静资源,提升整体架构性能。
limit_req 模块基于令牌桶算法实现请求限流,抵御 DDoS 和恶意刷接口。配置定义限流规则:指定 key(如 IP、URL),设置每秒请求数、突发队列数。请求超过速率时,直接返回 503 错误,拒绝服务。可针对 IP、接口路径精细化限流,区分正常流量和恶意流量。配合 limit_conn 限制并发连接数,双重防护。限流规则实时生效,低开销、高性能,是 Nginx 防攻击的核心模块。
WebSocket 基于 HTTP 握手,需 Nginx 开启长连接、升级协议支持。配置关键:location 匹配 WebSocket 路径;设置 proxy_http_version 1.1;添加 proxy_set_header Upgrade $http_upgrade、Connection "Upgrade",完成协议升级;配置 proxy_read_timeout 为长超时时间(避免空闲断开)。Nginx 会保持 WebSocket 长连接,转发双向数据,实现 WebSocket 反向代理,适配聊天、实时通知等场景。
Nginx 用allow/deny 指令实现 IP 黑白名单控制。在 location/server 块配置:allow 192.168.1.0/24(允许内网);deny all(拒绝其他 IP)。支持单个 IP、网段、全部 IP。可结合 geo 模块定义 IP 组,批量管理黑白名单。IP 控制精准拦截非法访问,保护内网服务、管理后台,配置简单、生效快,是基础安全防护的必备配置。
Nginx 用rewrite 模块(正则匹配)处理重写 / 重定向,基于 PCRE 正则引擎,高效匹配规则。重写规则按顺序执行,支持 break、last、redirect、permanent 标记。大量规则优化:将高频规则放在前面;用精确匹配替代正则;合并重复规则;开启 rewrite_log 调试。Nginx 正则匹配高效,单 worker 可处理数万规则,支持路径重写、域名跳转、伪静态等场景,灵活适配路由需求。
Nginx 高可用基于Keepalived+ 主从集群实现。部署两台 Nginx 节点,配置相同业务规则;Keepalived 绑定虚拟 IP(VIP),主节点对外提供服务;主节点宕机,Keepalived 自动将 VIP 切换到从节点,秒级切换无感知。同时 Nginx upstream 配置后端节点健康检查,自动剔除故障节点。双机热备 + 健康检查,彻底避免单点故障,保证 7×24 小时服务可用,是生产环境标准高可用方案。
Nginx 用proxy_cache 模块缓存动态内容,减少后端请求。配置:http 块定义缓存路径、大小、过期时间;location 块开启 proxy_cache,指定缓存 key(如 URL、参数);配置缓存忽略条件、缓存状态码。Nginx 缓存后端动态响应,重复请求直接返回缓存,无需转发后端。可按接口、参数精细化缓存,支持缓存清理、过期策略,大幅降低后端服务压力,提升动态接口响应速度。
SSL 性能优化核心是减少握手开销、硬件加速:开启 ssl_session_cache 缓存会话,避免重复握手;启用 TLS1.3,减少握手次数;配置 ssl_prefer_server_ciphers,选择高效加密套件;开启硬件加速(CPU AES 指令);启用 OCSP Stapling,减少证书验证时间;关闭不必要的日志。优化后 TLS 握手时间减少 80%,CPU 开销降低 50%,在保证安全的同时,接近 HTTP 的性能。
gzip 压缩通过减少传输体积提升速度,配置:http 块开启 gzip on;指定压缩类型(text/html/js/css);设置压缩级别(1~9,推荐 6);配置最小压缩文件大小;禁用 IE 低版本兼容。优化:开启 gzip_static 预压缩文件;针对大文件压缩;排除图片、视频等已压缩格式。gzip 压缩比可达 70%,大幅降低带宽消耗,提升页面加载速度,是 Web 性能优化的标配。
Nginx 安全配置覆盖访问控制、协议安全、漏洞防护:开启 HTTPS+ 强 SSL 配置;IP 黑白名单限制访问;隐藏 Nginx 版本号;禁用危险 HTTP 方法(PUT/DELETE);开启限流防 DDoS;配置 XSS、CSRF 防护头;限制请求体大小,防文件上传攻击;开启日志审计;设置文件权限,禁止目录遍历。全方位防护可抵御常见攻击,保证服务安全稳定,生产环境必须严格配置。
location 指令匹配请求 URL 路径,决定请求处理逻辑。匹配规则:精确匹配(=)优先级最高;前缀匹配(^)次之;正则匹配(/*)按顺序匹配;最后通用匹配(/)。匹配成功后,执行对应配置(代理、静态文件、重写)。location 支持嵌套、继承,路径匹配精准灵活,可针对不同接口、路径做差异化处理,是 Nginx 配置的核心指令。
keepalive_timeout 设置HTTP 长连接超时时间,客户端与 Nginx 建立连接后,超时时间内无请求则关闭连接。长连接避免重复 TCP 三次握手 / 四次挥手,减少连接开销,提升并发性能。超时时间过短,长连接失效;过长,占用连接资源。推荐设置 30~60 秒。长连接是 Nginx 高并发的关键优化,大幅降低网络开销,提升服务吞吐能力。
Linux 默认文件描述符限制过低,Nginx 高并发需优化:系统级修改 /etc/security/limits.conf,设置 nofile 为 65535;Nginx 配置 worker_rlimit_nofile 65535,指定进程最大文件描述符;设置 worker_connections 65535,单 worker 最大连接数。文件描述符是 TCP 连接、文件的唯一标识,优化后可支撑数万并发连接,避免“too many open files”错误,保证高并发下服务稳定。
server_name 指令匹配客户端请求域名,实现单 Nginx 托管多站点。配置多个 server 块,每个 server 指定不同 server_name(如 www.a.com、www.b.com)和根目录。客户端请求到达时,Nginx 根据 Host 头匹配对应 server 块,处理请求。支持泛域名(*.a.com)、正则域名,灵活适配多站点、子域名场景。单服务器托管数十个站点,节省硬件资源,是虚拟主机的标准方案。
error_page 指令绑定 HTTP 错误码与处理页面,如 error_page 404 /404.html;error_page 500 /500.html;可跳转至静态页面或后端接口。支持精准错误码、错误码区间,配置响应码替换。自定义错误页提升用户体验,隐藏服务端异常信息,增强安全性。可配置不同站点、路径的专属错误页,灵活适配业务需求。
Nginx 高并发基于四大核心设计:多进程 master-worker 架构,充分利用多核 CPU;epoll 异步非阻塞事件模型,单线程处理万级连接;内存池管理,无内存碎片、高效分配;零拷贝技术,减少 IO 开销。同时优化长连接、文件描述符、CPU 亲和性,避免进程切换。Nginx 单服务器可轻松支撑 10 万 + 并发连接,远超传统 Web 服务器,是高并发场景的首选。
Nginx动静分离架构:静态文件(html/js/css/img)直接由 Nginx 读取,零拷贝 + 缓存 + 压缩,高性能处理;动态请求(接口)通过 proxy_pass 转发给后端 Tomcat、Spring Boot 服务,upstream 负载均衡分摊压力。动静分离让 Nginx 专注高效 IO,后端专注业务逻辑,整体架构吞吐高、响应快、易扩展,是微服务、Web 应用的标准架构。
Nginx 是异步非阻塞、轻量、高并发,适合静态资源、反向代理、高并发场景,内存占用低、扩展性强。Apache 是同步多线程、稳定、兼容,模块丰富、适合动态内容,并发能力弱、内存开销大。Nginx 无阻塞设计支撑万级并发,Apache 线程模式并发有限。现代架构中,Nginx 作为前端代理,Apache 作为后端动态服务,互补使用;纯高并发场景,Nginx 全面替代 Apache。
Nginx 性能优化分系统、配置、业务三层:系统层:优化文件描述符、CPU 亲和性、内核参数(tcp_syncookies、somaxconn)。配置层:开启 worker 进程多核绑定、epoll 模型、长连接、零拷贝、gzip、缓存。业务层:动静分离、限流、缓存动态内容、SSL 优化。优化后 Nginx 性能提升数倍,支撑高并发、低延迟,生产环境需按业务场景定制优化方案。