Nginx:服务架构中不可或缺的基础组件

devtools/2025/2/24 22:50:46/

基本所有的服务架构中,Nginx 都是不可或缺的基础组件:

  • HTTP 负载均衡,将请求转发到后端 API 服务器。
  • 健康检查,将后端无法服务的节点移除。
  • 配置 HTTPS ,增强安全性。
  • 静态服务器,随着前后端分离,很多前端直接会将 Nginx 作为服务器。
  • 基于 Nginx + Lua 结合的解决方案 OpenResty ,可以构建出网关等服务,例如说 Kong 。
  • TCP 支持,可以负载均衡需要长连接的服务,例如说 Netty、Websocket、MySQL 等等。
  • ...

Nginx:服务架构中不可或缺的基础组件

在当今的互联网技术体系里,无论构建小型的网站应用,还是大型复杂的分布式系统,Nginx都像一位低调却至关重要的幕后英雄,默默支撑着各种服务的稳定运行,是几乎所有服务架构中都不可或缺的基础组件。下面,让我们深入且细致地了解Nginx这些强大的功能,对于初学者而言,这将是打开Nginx知识大门的钥匙。

1. HTTP 负载均衡

在一个繁忙的大型网站或应用系统中,想象一下节假日时热门景点的游客接待场景。大量的游客(用户请求)同时涌入,如果所有游客都集中在一个入口通道(一台后端API服务器)进入景区,这个通道必然会拥挤不堪,甚至堵塞瘫痪。Nginx的HTTP负载均衡功能,就如同景区精心规划的多个入口通道,以及合理安排游客分流的工作人员。

Nginx接收来自客户端(比如大家常用的浏览器)的HTTP请求后,会依据一系列精心设计的策略来分配这些请求。最常见的策略之一是轮询,就像按顺序依次引导游客进入不同通道一样,Nginx会把请求依次转发到后端多个API服务器上,确保每个服务器都有机会处理请求。

另一种策略是加权轮询,这就好比考虑到不同通道的宽窄、通行效率不同,给每个通道分配不同的权重。Nginx会根据后端服务器的性能差异,为性能更好的服务器分配更高的权重,让它处理更多的请求,以此更合理地利用服务器资源。

还有IP哈希策略,它根据客户端的IP地址进行计算,将同一个IP地址的请求始终转发到同一台后端服务器。这就像给来自同一个地区的游客安排固定的通道,方便景区对特定区域游客的管理。

以一个在线教育平台为例,后端有多个API服务器分别负责课程展示、学生管理、作业批改等业务。当学生们在浏览器上登录平台,查看课程、提交作业时,Nginx会根据负载均衡策略,把这些请求巧妙地分配到不同的服务器上,让整个平台高效运转,学生们能够流畅地学习。

2. 健康检查

在实际的网络环境中,后端服务器就像辛勤工作的员工,难免会因为各种突发状况(如硬件故障,就像员工生病;软件崩溃,类似员工突然情绪崩溃无法工作)而无法正常提供服务。如果Nginx还像不知情一样,继续将请求转发到这些“生病”的服务器上,那用户就如同找错了办事窗口,只能得到失败的回应,体验极差。

Nginx的健康检查功能就像是一位尽责的主管,会定期(比如每5分钟)向后端服务器发送一些简单的测试请求(类似主管询问员工是否能正常工作),通常是HTTP GET请求。如果某台服务器在一段时间内(比如连续3次测试都)没有正常响应,Nginx就会判定这台服务器“生病”了,然后迅速将它从可用服务器列表中移除,不再把新的请求派给它。

当这台服务器经过维修(运维人员修复问题)恢复正常后,Nginx会再次确认它能正常工作,然后重新将它纳入可用服务器列表,继续分配请求。这一过程保证了只有健康的“员工”(服务器)才能处理用户的请求,极大地提高了系统的稳定性和可靠性。

3. 配置 HTTPS ,增强安全性

随着互联网的普及,我们在网络上分享和传输的数据越来越多,也越来越敏感,比如个人的账号密码、银行卡信息、医疗记录等。这些数据就像我们的贵重物品,在传输过程中需要安全保障。HTTPS协议就像是一个坚固的保险箱,而Nginx则是负责把数据放入保险箱并安全运输的快递员。

HTTPS是在HTTP的基础上,通过加密技术来保证数据传输安全的协议。Nginx可以轻松地配置HTTPS,它能妥善处理SSL/TLS证书。当Nginx收到HTTP请求时,会使用SSL/TLS证书对数据进行加密,将普通的HTTP请求升级为HTTPS请求。这样,当数据在网络中传输时,即使不幸被不法分子截取,由于数据是加密的,他们也无法轻易解密和读取其中的内容,就像拿到了一个没有钥匙的保险箱。

例如,当我们在网上购物进行支付时,输入银行卡号和密码,这些关键信息在传输过程中就是通过HTTPS协议加密的,Nginx在幕后默默守护着这些信息的安全传输,让我们能够放心购物。

4. 静态服务器

在当今流行的前后端分离开发模式下,前端开发和后端开发就像两个分工明确的工匠,各自专注于自己的领域。前端工匠精心打造出精美的页面(HTML、CSS、JavaScript文件),以及丰富的图片、视频等静态资源,而后端工匠则专注于业务逻辑和数据处理。

Nginx在这里就像是一个专业的仓库管理员,能够高效地管理和分发这些静态资源。当用户在浏览器中访问网站时,Nginx会迅速响应对于静态资源的请求,直接从自己的“仓库”中取出这些静态资源返回给客户端,而不需要麻烦后端服务器来处理。这不仅大大减轻了后端服务器的工作负担,让后端服务器能够更专注于核心业务逻辑的处理,而且Nginx对静态资源的处理速度非常快,就像熟练的仓库管理员能迅速找到并交付货物,极大地提高了用户访问静态资源的速度。

比如,当我们打开一个时尚购物网站,看到精美的商品图片、炫酷的页面特效,这些大多是由Nginx作为静态服务器快速提供给我们的,让我们能更流畅地浏览商品。

5. 基于 Nginx + Lua 结合的解决方案 OpenResty ,可以构建出网关等服务,例如说 Kong

Nginx本身已经功能强大,但就像一把瑞士军刀,还可以通过添加各种工具来拓展它的能力。与Lua语言结合形成的OpenResty解决方案,就像是给瑞士军刀装上了更多实用的工具,大大扩展了Nginx的应用场景。

Lua是一种小巧灵活、运行效率极高的脚本语言,它可以在Nginx这个“舞台”上尽情施展才华。利用OpenResty,我们能够构建出功能超级强大的网关服务,Kong就是其中的典型代表。

网关在整个服务架构中,就像是一座城堡的大门,所有进出城堡(系统)的请求都要经过它。它承担着身份验证(检查进入城堡的人是否有通行证)、权限控制(决定进入城堡的人能去哪些区域)、流量限制(防止过多的人同时涌入城堡造成混乱)等重要职责。

通过使用OpenResty和Lua脚本,我们就像拥有了一位能工巧匠,可以根据具体的业务需求,自由地定制网关的功能。比如,在一个大型的电商微服务架构中,Kong作为网关,能够对各个微服务的请求进行统一的身份验证,只有合法的用户才能访问商品信息;同时,对不同用户的访问权限进行精细控制,普通用户只能浏览商品,而商家用户则可以进行商品上架、下架等操作;还能对突发的流量进行限制,防止恶意的高并发请求冲垮系统,确保整个电商平台的安全稳定运行。

6. TCP 支持,可以负载均衡需要长连接的服务,例如说 Netty、Websocket、MySQL 等等

除了在HTTP协议领域表现出色,Nginx在TCP协议方面同样有着出色的表现,就像一位全能运动员,在多个项目中都能取得优异成绩。它能够对需要长连接的服务进行负载均衡。

以Netty为例,它是一个高性能的网络编程框架,就像一个高效的通信桥梁搭建者,常用于开发各种需要快速数据传输的网络应用程序。Websocket则是一种在单个TCP连接上进行全双工通信的协议,就像一条双向车道,能让数据在客户端和服务器之间实时、双向地流动,常用于实现实时聊天、在线游戏等实时通信功能。MySQL是一种广泛使用的关系型数据库,客户端与数据库之间的连接通常是长连接,就像一条稳定的供应链,确保数据的稳定传输和交互。

Nginx可以接收来自客户端的TCP连接请求,然后根据负载均衡策略,将这些连接请求合理地分配到后端的多个相关服务上。这就像交通调度员合理安排车辆行驶路线,避免单个服务器因为连接过多而陷入拥堵,出现性能瓶颈。

例如,当有大量玩家同时连接到使用Netty开发的在线游戏服务器时,Nginx会把这些连接请求巧妙地分配到多个游戏服务器上,保证每个服务器的负载均衡,让玩家们能够流畅地进行游戏,享受无卡顿的游戏体验。

综上所述,Nginx凭借其丰富多样且强大实用的功能,成为了服务架构中不可或缺的核心基础组件,在互联网的各个角落都发挥着至关重要的作用。希望通过以上深入且细致的讲解,能帮助初学者全面、深入地理解Nginx的强大魅力和价值。


http://www.ppmy.cn/devtools/161446.html

相关文章

《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战

前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…

Unity 位图字体

下载Bitmap Font Generator BMFont - AngelCode.com 解压后不用安装直接双击使用 提前设置 1、设置Bit depth为32 Options->Export options 2、清空所选字符 因为我们将在后边导入需要的字符。 Edit->Select all chars 先选择所有字符 Edit->Clear all chars i…

Web项目测试专题(七)安全性测试

概述: 安全性测试旨在确保Web应用在设计和实现过程中能够抵御各种安全威胁,保护用户数据和系统资源。 步骤: 身份验证和授权:测试用户登录、权限管理和会话管理机制,确保只有授权用户能够访问特定资源。 数据加密…

Java 阻塞队列:让并发更“懂事”

阻塞队列的常见方法 阻塞队列的一些常用方法就是让你在多线程操作时轻松控制数据流。让我们看几个经典的方法: put(E e) 这个方法会将元素 e 放入队列中。如果队列已满,它会阻塞当前线程直到队列有空间可用。 大家好,今天我们来聊一聊 Jav…

【落羽的落羽 数据结构篇】栈和队列

文章目录 一、栈1. 概念2. 栈操作2.1 定义栈结构2.2 栈的初始化2.3 入栈2.4 出栈2.5 取栈顶元素 3. 栈的使用实例 二、队列1. 概念2. 队列操作2.1 定义队列结构2.2 入队列2.3 出队列2.4 销毁队列 三、用队列实现栈四、用栈实现队列 一、栈 1. 概念 栈(stack&#…

flink operator v1.10部署flink v1.19.2

1 概述 flink集群能对接kubernetes、yarn等集群管系统,本文介绍flink对接kubernetes。 flink kubernetes operator(网址:https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.10/docs/concepts/overview/&#xf…

骁勇善战的量化利器:多因子模型【量化理论】

我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲alpha策略制定后的测试问题 风险模型雏形 股票因子受多种因素影响,其价格由多种因素决定,所谓的多因子策略就是要发掘诸如此类的因子,以一种合理的方…

鸿蒙-状态管理V1

目录 前言状态管理V1State装饰器初始化观察能力小坑 Prop装饰器 和 Link装饰器Observed装饰器和ObjectLink装饰器使用示例小结 前言 随着鸿蒙Next的推广,做鸿蒙开发的人是越来越多,提问和寻求帮助的人也是越来越多,就我自己回答的问题而言&a…