发布时间:2026/8/25 12:31:09
Nginx集群部署及运维 高可用负载均衡与反向代理集群 · 生产级部署指南版本:Nginx 1.26.x(Stable)方案:Keepalived + Nginx 双机热备一、什么是 Nginx1.1 概述Nginx(Engine-X)是一款开源的高性能 HTTP 服务器、反向代理服务器及邮件(IMAP/POP3/SMTP)代理服务器。由俄罗斯工程师 Igor Sysoev 于 2004 年首次发布,采用 C 语言编写,以高并发、低内存消耗、高稳定性著称。截至 2026 年,Nginx 是全球使用最广泛的 Web 服务器之一,市场份额超过 34%。1.2 核心功能功能分类能力说明典型场景HTTP 服务器静态文件服务、虚拟主机、HTTPS/TLS 终结静态网站托管、前端 SPA 部署反向代理请求转发、Header 改写、WebSocket 代理、gRPC 代理微服务网关、API 聚合负载均衡Round Robin / IP Hash / Least Connections / Random / 一致性哈希后端服务流量分发缓存加速磁盘级缓存、代理缓存、FastCGI 缓存CDN 边缘节点、API 响应缓存SSL/TLS证书管理、OCSP Stapling、HTTP/2、HTTP/3(QUIC)HTTPS 加密、证书卸载安全防护限速、限连接、IP 黑白名单、防盗链、WAF 集成DDoS 防护、API 限流流媒体MP4/FLV 流、HLS 切片代理、RTMP(三方模块)视频点播 / 直播TCP/UDP 代理四层 Stream 模块,支持 TCP/UDP 协议代理数据库代理、MQTT 代理1.3 Nginx vs 其他 Web 服务器特性NginxApache HTTPDHAProxyEnvoy并发模型事件驱动(epoll)多进程/多线程事件驱动事件驱动(非阻塞)静态文件性能★★★★★★★★★★★(不支持)★★★反向代理/LB★★★★★★★★★★★★★★★★★★动态模块支持Lua (OpenResty)原生 PHP/CGI有限脚本WASM/Lua配置复杂度低中中高(YAML/xDS)HTTP/3 支持✅(1.25+)实验性❌✅生态/社区非常活跃成熟成熟快速成长适用场景Web + LB + 网关传统 Web/PHP纯 L4/L7 LB云原生 Service Mesh💡 版本选择建议Mainline(主线版):包含最新特性,如 HTTP/3 完整支持,适合新项目尝鲜。Stable(稳定版):经过充分测试,适合生产环境。本手册基于Nginx 1.26.x Stable。OpenResty:基于 Nginx + LuaJIT,支持在 Nginx 内编写 Lua 脚本,适合需要动态逻辑的场景。如需复杂 WAF / API 网关能力可选用。二、基本原理与架构2.1 事件驱动架构Nginx 采用Master-Worker 多进程 + 事件驱动架构。Master 进程负责管理 Worker 进程、读取配置、绑定端口;Worker 进程处理实际的客户端请求,每个 Worker 使用非阻塞 I/O(Linux 上为 epoll)可同时处理数万个并发连接。↑ 客户端连接(HTTP/HTTPS/TCP/UDP)由 Worker 直接处理Shared Memory 跨 Worker 共享:缓存键、限速区、SSL 会话、upstream 状态进程角色说明进程数量职责Master1读取/验证配置、创建/管理 Worker、绑定监听端口、热升级(reload/upgrade)Worker= CPU 核数处理客户端请求、执行反向代理/负载均衡、读写缓存、SSL 卸载Cache Manager1周期性检查缓存条目,删除过期/超量缓存文件Cache Loader1(启动时)Nginx 启动时加载磁盘缓存元数据到共享内存,运行完成后退出2.2 请求处理流程Nginx 请求处理 11 个阶段(Phase)post-read → server-rewrite → find-config → rewrite → post-rewrite→ preaccess → access → post-access → precontent → content → log每个阶段由对应模块链依次执行,content 阶段产生响应,log 阶段记录访问日志2.3 反向代理与负载均衡原理Nginx 作为反向代理时,客户端请求先到达 Nginx,Nginx 根据配置的upstream块选择一台后端服务器转发请求,并将后端响应返回给客户端。整个过程对客户端透明。负载均衡算法对比算法指令原理适用场景轮询(默认)(无需指定)按顺序逐一分发请求后端性能均匀加权轮询weight=N按权重比例分发后端性能不均IP 哈希ip_hash按客户端 IP 哈希固定到某台后端Session 粘滞最少连接least_conn分发给当前连接数最少的后端长连接 / 请求耗时差异大一致性哈希hash $request_uri consistent按指定 Key 一致性哈希缓存命中率优化随机random随机选择后端简单场景 / 配合two方法2.4 健康检查机制Nginx 开源版的被动健康检查:当后端返回错误或超时(由proxy_next_upstream定义),Nginx 标记该后端为不可用,在fail_timeout时间内不再分发请求。主动健康检查需要nginx_upstream_check_module三方模块或 Nginx Plus。upstream backend { server 10.0.2.11:8080 max_fails=3 fail_timeout=30s; server 10.0.2.12:8080 max_fails=3 fail_timeout=30s; server 10.0.2.13:8080 max_fails=3 fail_timeout=30s; } # 被动健康检查参数: # max_fails=3 → 连续 3 次失败则标记为 down # fail_timeout=30s → 标记 down 后 30s 内不再分发,30s 后重试 # proxy_next_upstream → 哪些错误触发切换到下一台后端2.5 Keepalived + VRRP 高可用原理单台 Nginx 存在单点故障风险。生产环境通过Keepalived实现 Nginx 双机热备:两台 Nginx 服务器运行 Keepalived,通过VRRP(虚拟路由冗余协议)协商一个虚拟 IP(VIP)。MASTER 节点持有 VIP 并对外提供服务,BACKUP 节点持续监听 VRRP 心跳。当 MASTER 故障时,BACKUP 在秒级内接管 VIP,实现无缝切换。三、服务部署详细步骤3.1 集群规划本手册以2 节点 Keepalived + Nginx 高可用负载均衡集群为例,后端挂载 3 台应用服务器。节点IP 地址角色Keepalived 状态运行服务lb-0110.0.1.11Nginx 负载均衡MASTER (priority=100)Nginx + Keepalivedlb-0210.0.1.12Nginx 负载均衡BACKUP (priority=90)Nginx + KeepalivedVIP10.0.1.100虚拟 IP(浮动)——app-0110.0.2.11:8080后端应用—Tomcat / Node.js / Goapp-0210.0.2.12:8080后端应用—Tomcat / Node.js / Goapp-0310.0.2.13:8080后端应用—Tomcat / Node.js / Go端口规划端口用途说明80HTTP对外 HTTP 入口(重定向到 443)443HTTPSTLS 终结 + 反向代理8080后端应用后端服务监听端口10050Prometheus Metricsstub_status / vts 指标暴露112VRRP 协议Keepalived 心跳(协议号,非端口)3.2 环境准备(两台 LB 节点均执行)3.2.1 系统依赖安装# CentOS / RHEL / Rocky Linux yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel \ openssl openssl-devel libxml2 libxml2-devel libxslt libxslt-devel \ gd gd-devel GeoIP GeoIP-devel perl-devel perl-ExtUtils-Embed # Ubuntu / Debian apt update apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev \ libssl-dev libxml2-dev libxslt1-dev libgd-dev libgeoip-dev \ libperl-dev libpam0g-dev3.2.2 创建 Nginx 运行用户groupadd -r nginx useradd -r -g nginx -s /sbin/nologin -d /var/cache/nginx -M nginx # 创建必要目录 mkdir -p /var/cache/nginx/{client_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp} mkdir -p /var/log/nginx mkdir -p /etc/nginx/{conf.d,ssl} mkdir -p /var/www/html chown -R nginx:nginx /var/cache/nginx /var/log/nginx /var/www/html3.2.3 系统参数优化# 编辑 /etc/sysctl.conf,追加以下内容 cat /etc/sysctl.conf 'EOF' # ===== Nginx 性能优化 ===== # 最大文件描述符数 fs.file-max = 1048576 # TCP 连接相关 net.core.somaxconn = 65535 net.core.netdev_max_backlog = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_max_tw_buckets = 1048576 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 3 # 允许绑定非本地 IP(Keepalived VIP 漂移所需) net.ipv4.ip_nonlocal_bind = 1 # TCP 缓冲区 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 EOF # 生效 sysctl -p # 文件描述符限制 cat /etc/security/limits.conf 'EOF' nginx soft nofile 1048576 nginx hard nofile 1048576 root soft nofile 1048576 root hard nofile 1048576 * soft nproc 65535 * hard nproc 65535 EOF # 临时生效 ulimit -n 10485763.3 Nginx 安装方式一:源码编译安装(推荐,可定制模块)# 下载 Nginx 源码 cd /usr/local/src wget https://nginx.org/download/nginx-1.26.2.tar.gz tar -xzf nginx-1.26.2.tar.gz cd nginx-1.26.2 # 配置编译参数(包含常用模块) ./configure \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --modules-path=/usr/lib64/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --user=nginx \ --group=nginx \ --with-compat \ --with-file-aio \ --with-threads \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_v3_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_xslt_module=dynamic \ --with-http_image_filter_module=dynamic \ --with-http_geoip_module=dynamic \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_slice_module \ --with-http_stub_status_module \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_ssl_preread_module \ --with-mail \ --with-mail_ssl_module \ --with-pcre-jit \ --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2' # 编译安装 make -j$(nproc) make install # 验证版本 nginx -V nginx -v # 预期输出: # nginx version: nginx/1.26.2 # built by gcc ... # built with OpenSSL ... # TLS SNI support enabled # configure arguments: --prefix=/etc/nginx ...(上述配置参数)方式二:官方 yum 仓库安装(快速部署)# 添加 Nginx 官方仓库 cat /etc/yum.repos.d/nginx.repo 'EOF' [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basear

相关新闻

2026/8/25 12:26:09

Linux CPUFreq DVFS OPP 超详细解析:P-State调频架构、调速器对比、内核流程、原理图+实操命令

系列前置回顾 本专栏前三篇已完成底层闭环基础: CPU架构+三级缓存:硬件性能上限基础 CPUIdle C-State:解决CPU空闲待机功耗 Thermal 热管理:解决高温降频与硬件保护 但有一个核心缺口一直没补: CPU在工作状态(C0态)时,如何动态调频率、调电压,实现性能和功耗平衡? 答…

2026/8/25 12:26:09

.NET 2026生态位解析:高性能企业级开发与云原生实践指南

“2026年学.NET还有前途吗?” 这可能是最近两年技术社区里最纠结、也最容易被误解的问题之一。一方面,你看到铺天盖地的Java、Go、Python招聘,似乎.NET已沦为“小众”;另一方面,微软正以前所未有的力度推进.NET的现代化…

2026/8/25 12:26:09

用SpringBoot写一个生产级接口,我整理了这些细节

别急着把Controller写得像快递分拣员,也别一上来就堆砌各种设计模式。生产级接口和教学Demo之间,差的不是代码量,而是对细节的敬畏。一个接口从“能跑”到“扛得住”,中间隔着一整条关于稳定性、可观测性、安全性和性能的认知鸿沟…

2026/8/25 15:01:48

Agentic AI爆发拐点已至,企业如何开展业务变革?

人工智能技术飞速进化着, AI正从一个能回答问题、辅助提效的“工具”, 逐渐演变成新一代生产关系的主体之一, 即AI Agent智能体。过去生产关系把人当作绝对主体, 技术围绕人来服务;而在未来的AI时代, 是人与AI Agent智能体协同工作, 一起完成价值创造。这也表明, 企…

2026/8/25 15:01:48

中国技术大败局TBL-20260809-047深度解剖报告V2.1 决策迭代版

中国技术大败局TBL-20260809-047深度解剖报告V2.1 决策迭代版技术溯源说明本报告依托合肥气链科技有限公司道息实验室 QiLinkOS 开源专利分析体系,采用矩规双螺旋归因模型完成客观研判,其分析基准专利:CN2026109829751;全部数据公…

2026/8/25 15:01:48

071、逻辑数据库与报表(了解)

071、逻辑数据库与报表(了解) 那天用户报了个奇怪的错误:用SE36创建的逻辑数据库,在报表里写GET customer,死活不进入事件块,但程序能跑,就是没数据。查了半天,发现有人在逻辑数据库的selection screen里偷偷加了NO database selection,把标准的选择条件全屏蔽了。这…

2026/8/25 14:56:46

DataGrid数据量大滚动卡顿?正确开启UI虚拟化的完整方案

工业上位机的历史报警、数据查询、参数列表,动辄几千几万条数据,直接塞进DataGrid,滚动起来一卡一卡,甚至程序无响应。很多人知道要用UI虚拟化,但属性加上了,卡顿却没改善,最后只能做分页,牺牲用户体验。 绝大多数情况下,不是虚拟化没用,而是没开对,或者踩了隐性坑…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…