Nginx集群部署及运维

发布时间:2026/10/18 18:03:01

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/10/17 18:40:12

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

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

2026/10/18 2:21:45

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

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

2026/10/18 10:53:40

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

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

2026/10/19 4:45:12

本地大模型部署工具实测对比:Ollama、LM Studio、LocalAI

如果你最近想把大模型部署到自己电脑上,八成绕不开这三款软件:Ollama、LM Studio(标题里写的LMstdio应该是笔误,官网实际叫LM Studio)和LocalAI。我在同一台机器上把这三款都装上、跑通、拉模型、压测,前后…

2026/10/19 4:45:12

CNN-GRU-Attention负荷预测实战:混合神经网络原理与工程实现

负荷预测是个老话题,尤其到了调度和交易环节,预测误差直接关系到要不要多备一组机组、少签一笔偏差考核。传统方法折腾过 ARIMA、指数平滑之后,我慢慢把重心移到了深度学习上。最近在做的这个项目,用的就是 CNN-GRU-Attention 混合…

2026/10/19 4:45:12

ROC曲线最佳截断值计算:R语言实战与业务权衡

先抛一个我经常被问到的业务问题:模型训练完了,AUC也看着不错,但模型给每个样本输出的是一个0到1之间的概率,那到底该拿哪个数当分界线?很多人顺手就选0.5,结果到了业务会上,对方问能不能把门槛…

2026/10/19 4:45:12

数据库系统实验三通关指南:从建表到查询优化的完整实践

软件学院数据库系统实验做到第三个,很多人一下就紧张起来了。前两次实验可能还在教你熟悉客户端、建库建表、跑通最基本的增删改查,到了实验三,画风通常就变了:老师不再给一条一条的步骤,而是甩给你一个场景&#xff0…

2026/10/19 4:45:12

别再追风口了,真正拉开差距的是能力结构的变化

开头部分: 这些年我见过太多人把“风口”两个字挂在嘴边。短视频火了就去拍短视频,直播带货火了就研究直播话术,大模型一出来又开始焦虑个人价值会被替代。真正走到后面的人,极少是那些追着风跑的人,反而是在某个我们看…

2026/10/19 4:40:12

逻辑回归与最大熵模型:从对数线性模型到IIS/BFGS求解

《统计学习方法》第二版刷到第六章的时候,很多人会突然卡住:前面几章还能靠着直觉理解,到逻辑回归和最大熵模型这里,公式密度一下子提上来,课后习题也不知道从哪里下手。尤其是“最大熵模型”这个概念,名字…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/19 0:04:56

悟空开源无代码平台实战:从实体建模到应用设计避坑指南

简介:基于悟空开源无代码平台的多种应用设计源码,面向希望在不编写代码的情况下快速搭建CRM、HRM、财务系统、ERP、SRM等业务应用的企业与技术人员,通过拖放式界面和内置模板即可完成应用定制与部署。压缩包共697个文件,约10.74MB…

2026/10/19 0:04:56

基于.NET9的多租户权限系统:数据权限与动态API落地实践

简介:这份资源是一套面向 .NET 与 Vue 全栈开发者的中台权限管理系统,后端基于 .Net9,前端采用 Vue3 Element Plus,并配套 uniapp uviewui 移动端方案,实现前后端分离。系统覆盖多租户隔离、数据权限、动态 Api、任务…

2026/10/19 0:04:56

场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

简介:面向毕业设计场景的场地预约小程序完整项目,基于微信小程序SSMMySql技术栈开发,适合计算机相关专业学生作为选题参考、功能扩展或二次开发起点。系统实现场地类型管理、场地管理、预约管理、取消申请与押金退回等功能,分为管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑