分享实录 | 将 NGINX 打造成功能强大的 API 网关(上)

news2025/4/28 5:57:36

原文作者:易久平

原文链接:分享实录 | 将 NGINX 打造成功能强大的 API 网关(上)

NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

大家好,很高兴加入此次 NGINX 深潜之旅。接下来我将给大家分享如何将 NGINX 打造成 API 网关。今天我将从以下两个部分进行分享,第一部分给大家梳理一下什么是 API 网关,第二部分着重给大家分享一下为什么 NGINX 比较适合做 API 网关。

 

1.什么是 API 网关

上图是 Gartner 在 2022 年发布的调查报告,它展示了 2019 年到 2022 年各企业 API 使用情况变化。目前各企业使用 API 的情况发生了很大变化,无论是自研 API、使用公有云 API,或者是使用合作伙伴 API 的企业都有了很大的增长,最令我们感到惊讶的是,有很多企业预计未来会对外提供自己研发的 API,这说明 API 在经济环境中的发展变得越来越重要。

这也可以理解为现在企业发展已经离不开 API,因为企业数字化转型,导致 API 越来越重要。正是因为数字化转型,我们的应用架构也在不断的发生变化,从单体架构到微服务架构,从微服务架构到无服务架构,也衍生出了 SaaS 、PaaS 等各类公有云平台。

随着数字化转型的进程不断推进,API 在技术演进过程中的角色和形态也在不断发生变化。早期 API 更主要的作用是用来做信息访问,在微服务架构里面,API 的作用更多是为了加速创新,让业务迭代速度更快,更能匹配业务发展的节奏。

现在,API 被赋予了更重要的作用——提升用户体验,尤其是在数字化转型进程中,当越来越多的生活轨迹放到线上后,用户体验变得非常重要,这也导致了 API 无处不在,无论是公有云,私有云,还是边缘云,在不同的环境下都可能有 API 的存在,这也导致 API 的管理变得更加艰难。

无论是什么形式的服务,无论是用什么语言开发的微服务,亦或是单体应用服务,它可能对外提供了一个 API,在其中有可能存在一个 API 网关来承接 API 入口的职责。客户端请求从通过互联网再经过 API 网关,再把请求转发到真正提供 API 行为的业务服务端。

那么 API 网关在这个过程充当什么样的角色?我们可以这样理解,API 网关主要核心职责就是作为 API 对外的统一入口。有了 API 网关,我们可以把某一类业务领域的通用能力上移到 API 网关上。API 网关具体的功能职责如下:

  • 身份验证:验证是否允许客户端访问

  • 访问授权:验证客户端可以访问哪些资源

  • 流量加解密:TLS 卸载、mTLS

  • 流量控制:通过限流限速、限带宽、请求校验、内容改写等来控制通过网关的流量

  • 流量调度:基于请求及客户端按条件匹配或比例路由请求到后端服务

  • 日志记录:创建日志以监控和查看 API 流量

  • 指标监控:对 API 流量做精细化指标监控实时观测运行状态

总结起来,API网关的核心功能主要包括以下几个方面:

  • 对 API 调用进行身份验证:使用 Basic Auth, OAuth 2.0/OIDC, JSON Web Tokens (JWT), 或自有认证方式进行身份认证;

  • 控制资源访问权限:使用 JWT、API Keys 或其他授权方式来管理访问权限;

  • 路由与管理 API 流量:支持内容改写、限流、七层转发等流量路由与控制策略;

  • 保护后端服务:使用 TLS 加密流量、管理 CORS 策略、允许特定请求方法或部署 WAAP;

  • 获取 API 流量的可观测性:自定义日志格式,并导出监控指标到 Prometheus, Grafana, Splunk, Datadog 等;

  • 支持常见协议:API 网关支持 HTTP/2、gRPC、WebSocket 等常见协议。

另外 API 网关除了核心功能需求外,还需要考虑非核心功能需求的情况,比如:

  • 配置灵活:网关配置灵活,可快速支持关键业务场景;

  • 与平台无关:可部署在任何地方 - 在云中、本地或边缘;

  • DevOps 友好:可轻松集成到现有 CI/CD 流水线中;

  • 流量可见性:访问和导出指标和日志以观测和监控 API 流量。

对于 API 网关每个人都有自己的理解,针对实际应用部署情况,API 网关在某些场景下叫流量网关,某些场景下叫微服务网关或者业务网关,今天的分享更多的是从应用场景来考虑这个问题。

目前来看,API 网关大部分的应用情况可能都围绕以下几种:单体应用、微服务、微服务 BFF、K8s 集群、K8s 集群 KIC。

在选择的时候,除了考虑应用架构的形态以外,还需考虑作为一个 API 网关,或者是所谓流量网关,它到底需要代理什么样的后台应用,它是跨业务系统调度,还是需要跨 K8s 群进行调度,这个时候选择是不一样的。另外还需考虑 API 网关属于哪些团队进行维护,它到底是属于运维团队还是应用团队?

API 网关在某种层面上职责不一样,比如流量网关更多被赋予的是全局稳定和流量调度职责,但是业务网关或者微服务网关注的是某个业务能否更好地对外提供业务服务,当然也存在两者叠加的这种情况。所以今天的分享更多的是针对于 API 网关需要实现某些功能,具体的部署情况需要我们针对实际的业务进行考虑。

2.为什么 NGINX 比较适合做 API 网关

先来看一组数据,目前为止 NGINX 有 4 亿线上部署实例,为 Web Server 的第一位。根据 NGINX 社区调查显示,97% 的用户部署 NGINX 开源版本,但是大家忽略了一点,有 30% 的用户是将 NGINX 作为 API 网关进行部署。

因为 NGINX 提供开源免费版和商业闭源版,从功能层面讲,除了数据面的能力以外,还有控制面和管理面的能力。NGINX 有很多的官方模块和配置指令,同时还有很多的第三方开源模块,这些指令可以作用在不同的领域,有可能放在 HTTP 上下文下面,也可能放在 Server 内,也可能放在 Location 下面。

这么多的指令,再加上不同的上下文,它在排列组合以后可以做出很多的场景。这些场景其实主要包括了以下几种,如:软负载、反向代理、API 网关、 Web 服务缓存,还有安全等等。

NGINX 的性能十分优秀,根据第三方机构 GigaOm 的测试数据显示,NGINX 的延迟和吞吐能力相比于其他的产品有很大的优势。这是因为 NGINX 的源代码结构和优化做的十分不错,多进程架构也十分优秀,官方更倾向于使用原生的 C 语言开发模块和功能,总体来说 NGINX 的性能十分优秀。

众所周知,作为流量入口,API 网关的流量请求,无论是面向客户端的统计,还是面向服务端的统计都十分重要,可能都需要去关注它的稳定性和可观测性。随着版本的更替,NGINX 提供了超过 200 个监控指标,这些监控指标可以通过 Prometheus 式的格式发布并且被采集,使得它们可以通过 Grafana 统一的展示。

除上述安全性功能以外,NGINX 还支持 WAAP 安全防护体系,也就是 Web 应用与 API 的防护。NGINX 提供了 NGINX APP Protect 模块,它可以同 NGINX 一起部署,简单理解为只要有 NGINX 部署的地方就可以实现安全防护能力叠加。

整个 NAP 是按照 WAAP 的思路构建的。WAAP 是基于传统的WAF,扩展了 7 层的 DoS 防护和机器人防护,也扩展了 API 安全的能力。


NGINX 唯一中文官方社区 ,尽在nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源:

开源社区官网:https://www.nginx.org.cn/

微信公众号:https://mp.weixin.qq.com/s/XVE5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/853787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DP(状态机模型)

大盗阿福 阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。 这条街上一共有 N 家店铺,每家店中都有一些现金。 阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动&#x…

Mac安装nvm教程及使用

nvm 是 node 版本管理器,也就是说一个 nvm 可以管理多个 node 版本(包含 npm 与 npx),可以方便快捷的安装、切换 不同版本的 node。 1、直接通过brew安装 执行命令:brew install nvm PS: 如果没有安装br…

JDK 8 升级 JDK 17 全流程教学指南

JDK 8 升级 JDK 17 首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点 遇到问题别放弃仔细阅读报错,精确到每个单词每一行,不是自己项目的代码也要点进去看看源码到底是为啥报错明确你项目引入的包&#x…

什么是碳中和认证申请气候友好证绿色标?

碳中和认证几乎所有卖家都适用,需要的资料比较简单,几乎所有的产品及所有的站点都可以做。 一、“碳中和”认证是什么? 碳中和认证是通过计算碳排放,减少碳排放,进而减少使地球变暖的温室气体的数量的一个认证。是亚…

Qt多线程编程

本章介绍Qt多线程编程。 1.方法 Qt多线程编程通常有2种方法: 1)通过继承QThread类,实现run()方法。 2)采用QObject::moveToThread()方法。 方法2是Qt官方推荐的方法,本文介绍第2种。 2.步骤 1)创建Worker类 这里的Worker类就是我们需要…

CSS:盒子模型 与 多种横向布局方法

目录 盒子模型块级盒子内联级盒子内联块级盒子弹性盒子display 改变模型区域划分text 内容区padding 填充区border 边框区margin 外边距直接设置盒子大小 布局横向布局方法一 float 浮起来方法二 内联块级元素实现方法三 弹性盒子模型 盒子模型 块级盒子 独占一行&#xff0c…

打破雇佣思想 云畅科技CIO曾颖博士浅析零雇工模式

作者简介 INTRO 曾 颖 工商管理博士 云畅科技高级合伙人、CIO 产业咨询&企业数字化转型落地专家 2018年,“零雇工”企业组织创新2018全球创新创业教育高峰论坛在西安举行,我当时作为上海沐新众创空间的导师和分会场“企业家如何创建零雇工…

4G型无线液位变送器是什么?

4G型无线液位变送器采用了四代无线通讯技术,与普通液位计相比,免去了布线的烦恼,无需时刻监控现场,在大幅提高工作效率和减少人力成本的同时,还可以随时随地获取监测数据。 4G型无线液位变送器的功能优势:…

Unico-GUI软件关于ST传感器机器学习(MLC)基本操作步骤

准备工作 UNICO-GUI软件用于意法半导体产品组合(加速度计、陀螺仪、磁力计和环境传感器)中所有MEMS传感器的评估板。它可用于Linux(基于Debian) / Mac OS X / Windows平台。 Unico-GUI - MEMS evaluation kit software package …

hcip的重发布实验(2)

题目 拓扑图 IP地址和环回的配置 R1 <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sysname r1 [r1]int l0 [r1-LoopBack0]ip add 1.1.1.1 24 [r1-LoopBack0]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 Aug 9 2023 10:38:48-08:…

文件上传漏洞(webshell)和文件包含漏洞

一、防护 1、防护 1、判断文件后缀&#xff0c;为图片的话才让上传成功。 2、解析文件内容&#xff08;文件幻数&#xff09;判断文件头和文件尾部是否一致 幻数 常见的 3、隐藏按钮&#xff08;带上code唯一值&#xff09; 4、二次渲染&#xff08;类似拿着你的图片&#xff…

最大子数组和【力扣53】

一、解题思路 Max[i]表示&#xff1a;以nums[i]为开头的所有连续子数组和的最大值。 由此可以推出Max[i-1]和Max[i]的关系&#xff1a; 若Max[i]>0&#xff1a;Max[i-1]nums[i-1]Max[i]&#xff1b; 否则&#xff1a;Max[i-1]nums[i-1]&#xff1b; 则ansMAX&#xff0…

Mr. Cappuccino的第59杯咖啡——简单手写SpringIOC框架

简单手写SpringIOC框架 环境搭建基于XML方式项目结构项目代码运行结果 基于注解方式项目结构项目代码运行结果 简单手写SpringIOC框架核心原理基于XML方式原理项目结构项目代码运行结果 基于注解方式原理项目结构项目代码运行结果 环境搭建 基于XML方式 项目结构 项目代码 p…

何时使用MongoDB而不是MySql

什么是 MySQL 和 MongoDB MySQL 和 MongoDB 是两个可用于存储和管理数据的数据库管理系统。MySQL 是一个关系数据库系统&#xff0c;以结构化表格格式存储数据。相比之下&#xff0c;MongoDB 以更灵活的格式将数据存储为 JSON 文档。两者都提供性能和可扩展性&#xff0c;但它…

CGI, FastCGI, WSGI, uWSGI, uwsgi分别是什么?

CGI 1、通用网关接口&#xff08;Common Gateway Interface/CGI&#xff09;,CGI描述了服务器&#xff08;nginx,apache&#xff09;和请求处理程序&#xff08;django,flask,springboot web框架&#xff09;之间传输数据的一种标准. 2.所有bs架构软件都是遵循CGI协议的 3.一…

day10 快速排序 方法重载 和 方法递推

方法重载 斐波拉契数列问题 使用重载思想解决 public static int method(int n){if (n 2 ){return 1 ;}return (n-1)*2method(n-1);}public static int f(int n){if (n 1){return 1;}if (n 2){return 2;}return f(n-1)f(n-2);} 快速排序 思维很简单&#xff0c;类似二…

selenium获取b站视频标题

一、下载selenium 1. 下载对应版本的浏览器驱动 2. 安装selenium 3.把浏览器驱动放到使用的python内核的script目录中 二、测试效果模拟登录b站 from selenium import webdriver from selenium.webdriver.common.by import By import timebrowser webdriver.Chrome() # 打…

使用MyBatis操作数据库

hi,大家好,今天为大家带来MyBatis操作数据库的知识 文章目录 &#x1f437;1.根据MyBatis操作数据库&#x1f9ca;1.1查询操作&#x1f347;1.1.1无参查询&#x1f347;1.1.2有参查询 &#x1f9ca;1.2删除操作&#x1f9ca;1.3修改操作&#x1f9ca;1.4增加操作&#x1f9ca;…

quill 富文本编辑器 @提及

使用插件quill-mention&#xff0c;实现在quill 富文本编辑器使用或#提及用户。 1. 安装 npm install quill-mention --save2. 官方给的示例quill-mention import "quill-mention";const atValues [{ id: 1, value: "Fredrik Sundqvist" },{ id: 2, va…

产线信息化、智能化|汽车座椅产线中的RFID技术方案

引言 在今天的快速发展的制造业中&#xff0c;信息化和智能化已经成为不可或缺的部分。信息化和智能化能够极大地提高生产效率、减少浪费&#xff0c;降低成本&#xff0c;提升产品的质量。汽车座椅产线信息化和智能化是汽车座椅产线升级的重要方向&#xff0c;RFID技术方案在…