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

news/2025/2/21 11:38:56

基本所有的服务架构中,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.niftyadmin.cn/n/5860787.html

相关文章

MySQL 视图入门

一、什么是 MySQL 视图 1.1 视图的基本概念 在 MySQL 中,视图是一种虚拟表,它本身并不存储实际的数据,而是基于一个或多个真实表(基表)的查询结果集。可以把视图想象成是一个预定义好的查询语句的快捷方式。当你查询…

玩机日记 12 群晖部署AList并配置SSL,安装opkg,使用rclone挂载到本地

目录 1、部署alist,配置ssl 安装alist 参考官方文档添加网盘 配置ssl 开启webdav访问 2、安装opkg 修改环境变量 添加计划任务 3、安装配置rclone挂载alist 安装rclone,新建remote 安装fuse3 挂载AList 添加计划任务 1、部署alist&#xff0…

【Blender】二、建模篇--05,阵列修改器与晶格形变

阵列修改器是bender里面一个比较常用的修改器,所以我们单独开口来讲,我们会先从几片树叶出发,然后我们用阵列修改器把这几片树叶变成这样的造型和这样的造型。这两个造型分别就代表着阵列修改器最常用的两种偏移方法,我们现在就开始我们先来做几个树叶。 1.树叶建模 首先…

npm、pnpm和yarn有什么区别

1. 性能和速度 npm:在较早的版本中,速度较慢,尤其是在安装大型依赖集时。自npm 5以后的版本引入了缓存机制,性能有所提升。yarn:由Facebook开发,主要目标是提高安装速度。使用了缓存和并行安装(…

Matplotlib 高级图表绘制与交互式可视化(ipywidgets)

目录: ipywidgets 介绍 1. 什么是 ipywidgets 直接开始: 动态调整正弦波频率 随机散点图 启用交互式模式 使用滑块和下拉菜单调整图表样式 使用布局管理器创建复杂界面 使用动画创建动态图表 最后: 综合示例:动态仪表盘 ipywidgets 介绍 1. 什么是 ipywidgets i…

Vue 中组件通信的方式有哪些,如何实现父子组件和非父子组件之间的通信?

一、父子组件通信&#xff08;垂直通信&#xff09; 1. Props 传值&#xff08;父 → 子&#xff09; 实现方案&#xff1a; <!-- Parent.vue --> <template><Child :user"userData" /> </template><script setup> import { ref } …

[kubelet-check] It seems like the kubelet isn‘t running or healthy.

执行k8s时报错&#xff1a; [kubelet-check] It seems like the kubelet isn’t running or healthy. [kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed with error: Get "http://localhost:10248/heal ** 解决办法如下&a…

Lineageos 22.1(Android 15)Launcer简单调整初始化配置

一、前言 Launcer的初始化配置主要在如下的xml文件夹下&#xff0c;默认读取的5x5 这里我们把device_profiles调整一下&#xff0c;然后新建一个default_workspace_my.xml作为我们自己的配置就行。 二、配置 注意Lineageos 的Launcer是在lineageos/packages/apps/Trebuchet…