CN115296959A - 一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 - Google Patents
一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 Download PDFInfo
- Publication number
- CN115296959A CN115296959A CN202210879149.6A CN202210879149A CN115296959A CN 115296959 A CN115296959 A CN 115296959A CN 202210879149 A CN202210879149 A CN 202210879149A CN 115296959 A CN115296959 A CN 115296959A
- Authority
- CN
- China
- Prior art keywords
- nginx
- gateway
- request
- lua
- lua script
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/66—Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
Abstract
本发明提供了一种使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法,利用Nginx+Lua技术,在网关中增加以下模块:校验白名单模块、鉴权模块、权限校验模块、重写请求头模块、路由负载均衡模块,响应于客户端发起的请求,网关具有校验白名单、鉴权、权限校验、重写请求头、路由负载均衡功能。本发明所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法可使网关性能提升了几倍,同样配置下Spring Cloud Gateway的压测qps在2000多左右,而Nginx+Lua脚本实现的网关能到1万多,还解决了内存堆积的问题。
Description
技术领域
本发明属于通用后端技术领域,尤其是涉及一种使用Nginx+Lua脚本替代SpringCloud Gateway网关的方法。
背景技术
在微服务架构中,目前使用最多的网关应该要数Spring Cloud Gateway了,相比较zuul和其他java类的网关,Spring Cloud Gateway还是有一定优势的,但是却也有几个缺点,一个缺点就是性能问题,由于是使用的java开发,虽然Spring Cloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty,但是性能相比较于Nginx这类C语言产品还是差一大截的;另一个缺点就是Spring CloudGateway存在着内存溢出风险,在传输大一点的数据的时候,例如文件或者大字符串,Spring Cloud Gateway会存在内存一直堆高,导致JVM老年代内存飙升,从而导致full gc影响性能。
发明内容
有鉴于此,为克服上述缺陷,本发明旨在提出一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法。
为达到上述目的,本发明的技术方案是这样实现的:
一方面,本发明提供了一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法,利用Nginx+Lua技术,在网关中增加以下模块:校验白名单模块、鉴权模块、权限校验模块、重写请求头模块、路由负载均衡模块,响应于客户端发起的请求,网关具有校验白名单、鉴权、权限校验、重写请求头、路由负载均衡功能。
进一步的,利用Nginx+Lua技术,在网关中增加以下模块,包括:
在Nginx配置文件中通过Lua脚本配置对应的url;
创建两个lua文件,分别为file_gateway_access.lua、file_gateway_content.lua;
其中,在file_gateway_access.lua文件中对请求进行拦截,并执行对应的操作。
进一步的,在Nginx配置文件中通过Lua脚本配置对应的url,包括:
把请求直接转发到lua脚本文件中处理。
进一步的,在Nginx配置文件中通过Lua脚本配置对应的url,包括:直接在nginx配置文件中编写lua脚本直接执行,即在location模块中编写lua代码来执行逻辑。
进一步的,具体包括如下步骤:
1、根据请求头得到的用户ip,访问url信息获取在系统配置的访问权限,从redis获取配置的白名单信息是否合法;
2、校验token和访问权限,通过请求头获取到token信息,并且根据token信息获取用户信息以及用户配置的访问权限等信息来判断请求是否合法,合法则放行,路由到下一步content中去,然后再调用后台微服务进行请求处理;
3、用户信息写入请求头方便后续应用使用,从redis拿到用户信息并且把用户信息重新写入请求头,方便后面的服务使用;
4、从redis查询应用信息,然后通过请求转发到@file_server做负载均衡转发请求至后端服务。
第二方面,本发明提供了一种电子设备/服务器,包括处理器,以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,所述处理器在执行所述指令时,实现上述第一方面所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法。
第三方面,本发明提供了一种可读取存储介质,用于存储计算机程序,所述计算机程序在被处理器执行时,实现上述第一方面所述的使用Nginx+Lua脚本替代Spring CloudGateway网关的方法。
相对于现有技术,本发明所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法具有以下优势:
本发明所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法可使网关性能提升了几倍,同样配置下Spring Cloud Gateway的压测qps在2000多左右,而Nginx+Lua脚本实现的网关能到1万多,还解决了内存堆积的问题。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面将参考附图并结合实施例来详细说明本发明。
本实施例提供了一种使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法,如图1所示,需要在网关中实现的功能如下:校验白名单,鉴权,重写请求头,路由负载均衡。那么我们只需要通过Nginx+Lua实现这些功能就可以满足我们的使用,因为Lua脚本是在Nginx中执行的,所以性能方面不用担心,会跟随Nginx的性能,也不会有内存堆积和溢出的风险。
上述功能实现方法如下:
首先在Nginx配置文件中配置对应的url需要通过Lua脚本,有几种方式可以配置,一种是把请求直接转发到lua脚本文件中处理;另一种是直接在nginx配置文件中编写lua脚本直接执行,也就是在location模块中编写lua代码来执行我们的逻辑。这里我们采用单独lua文件执行的方式来实现。
主要分两个处理逻辑,对应两个主要lua文件,一个file_gateway_access.lua,一个file_gateway_content.lua。
在file_gateway_access.lua文件中我们对请求进行拦截,并且做一系列操作:
如图1所示,具体执行流程如下:
第一步先实现白名单功能,根据请求头里得到的用户ip,访问url等信息获取在系统配置的访问权限,从redis获取配置的白名单信息是否合法;
第二步最后校验token和访问权限,一般我们的token信息都是跟随请求的请求头或者cookie到服务器,那我们就可以通过请求头获取到token信息,并且根据token信息获取用户信息以及用户配置的访问权限等信息来判断请求是否合法,合法则放行,路由到下一步content中去,然后再调用后台微服务进行请求处理;
第三步再实现用户信息写入请求头方便后续应用使用,从redis拿到用户信息并且把用户信息重新写入请求头,方便后面的服务使用;
第四步从redis查询应用信息,然后通过请求转发到@file_server做负载均衡转发请求至后端服务,完成。
本实施例提供了一种电子设备/服务器,包括处理器,以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,所述处理器在执行所述指令时,实现上述实施例所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法。
本实施例提供了一种可读取存储介质,用于存储计算机程序,所述计算机程序在被处理器执行时,实现上述实施例所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和系统,可以通过其它的方式实现。例如,以上所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。上述单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法,其特征在于:利用Nginx+Lua技术,在网关中增加以下模块:校验白名单模块、鉴权模块、权限校验模块、重写请求头模块、路由负载均衡模块,响应于客户端发起的请求,网关具有校验白名单、鉴权、权限校验、重写请求头、路由负载均衡功能。
2.根据权利要求1所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法,其特征在于,利用Nginx+Lua技术,在网关中增加以下模块,包括:
在Nginx配置文件中通过Lua脚本配置对应的url;
创建两个lua文件,分别为file_gateway_access.lua、file_gateway_content.lua;
其中,在file_gateway_access.lua文件中对请求进行拦截,并执行对应的操作。
3.根据权利要求2所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法,其特征在于:在Nginx配置文件中通过Lua脚本配置对应的url,包括:
把请求直接转发到lua脚本文件中处理。
4.根据权利要求2所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法,其特征在于,在Nginx配置文件中通过Lua脚本配置对应的url,包括:直接在nginx配置文件中编写lua脚本直接执行,即在location模块中编写lua代码来执行逻辑。
5.根据权利要求1所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法,其特征在于,具体包括如下步骤:
1、根据请求头得到的用户ip,访问url信息获取在系统配置的访问权限,从redis获取配置的白名单信息是否合法;
2、校验token和访问权限,通过请求头获取到token信息,并且根据token信息获取用户信息以及用户配置的访问权限等信息来判断请求是否合法,合法则放行,路由到下一步content中去,然后再调用后台微服务进行请求处理;
3、用户信息写入请求头方便后续应用使用,从redis拿到用户信息并且把用户信息重新写入请求头,方便后面的服务使用;
4、从redis查询应用信息,然后通过请求转发到@file_server做负载均衡转发请求至后端服务。
6.一种电子设备/服务器,包括处理器,以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于,所述处理器在执行所述指令时,实现权利要求1-5任一所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法。
7.一种可读取存储介质,用于存储计算机程序,其特征在于,所述计算机程序在被处理器执行时,实现权利要求1-5任一所述的使用Nginx+Lua脚本替代Spring Cloud Gateway网关的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210879149.6A CN115296959A (zh) | 2022-07-25 | 2022-07-25 | 一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210879149.6A CN115296959A (zh) | 2022-07-25 | 2022-07-25 | 一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115296959A true CN115296959A (zh) | 2022-11-04 |
Family
ID=83824986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210879149.6A Pending CN115296959A (zh) | 2022-07-25 | 2022-07-25 | 一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115296959A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106998369A (zh) * | 2017-05-26 | 2017-08-01 | 努比亚技术有限公司 | 灰度发布方法、网关拦截器及计算机可读存储介质 |
WO2019052526A1 (zh) * | 2017-09-14 | 2019-03-21 | 北京金山云网络技术有限公司 | Api调用系统、方法、装置、电子设备及存储介质 |
CN110933097A (zh) * | 2019-12-05 | 2020-03-27 | 美味不用等(上海)信息科技股份有限公司 | 面向多服务网关的限流与自动扩缩容方法 |
CN110944000A (zh) * | 2019-12-05 | 2020-03-31 | 美味不用等(上海)信息科技股份有限公司 | 基于多Agent集群OpenResty网关特征防刷方法 |
CN113595925A (zh) * | 2021-07-06 | 2021-11-02 | 中企云链(北京)金融信息服务有限公司 | 一种智能网关动态限流实现方法 |
CN114039759A (zh) * | 2021-11-02 | 2022-02-11 | 中国软件与技术服务股份有限公司 | 一种面向信创领域的高性能网关鉴权方法与系统 |
CN114389900A (zh) * | 2022-03-23 | 2022-04-22 | 广东睿江云计算股份有限公司 | 一种基于OpenResty异常流量捕获与拦截的方法和系统 |
-
2022
- 2022-07-25 CN CN202210879149.6A patent/CN115296959A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106998369A (zh) * | 2017-05-26 | 2017-08-01 | 努比亚技术有限公司 | 灰度发布方法、网关拦截器及计算机可读存储介质 |
WO2019052526A1 (zh) * | 2017-09-14 | 2019-03-21 | 北京金山云网络技术有限公司 | Api调用系统、方法、装置、电子设备及存储介质 |
CN110933097A (zh) * | 2019-12-05 | 2020-03-27 | 美味不用等(上海)信息科技股份有限公司 | 面向多服务网关的限流与自动扩缩容方法 |
CN110944000A (zh) * | 2019-12-05 | 2020-03-31 | 美味不用等(上海)信息科技股份有限公司 | 基于多Agent集群OpenResty网关特征防刷方法 |
CN113595925A (zh) * | 2021-07-06 | 2021-11-02 | 中企云链(北京)金融信息服务有限公司 | 一种智能网关动态限流实现方法 |
CN114039759A (zh) * | 2021-11-02 | 2022-02-11 | 中国软件与技术服务股份有限公司 | 一种面向信创领域的高性能网关鉴权方法与系统 |
CN114389900A (zh) * | 2022-03-23 | 2022-04-22 | 广东睿江云计算股份有限公司 | 一种基于OpenResty异常流量捕获与拦截的方法和系统 |
Non-Patent Citations (2)
Title |
---|
八二零: "服务网关---基于Nginx+lua+Redis的服务降级设计(一)", pages 1 - 6, Retrieved from the Internet <URL:https://blog.csdn.net/qq_35723073/article/details/87930011> * |
方志朋: "Openresty最佳案例|第9篇:Openresty实现的网关权限控制", pages 1 - 3, Retrieved from the Internet <URL:http://blog.csdn.net/forezp/article/details/78616779> * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111625452B (zh) | 流量回放方法和系统 | |
CN111240763A (zh) | 配置更新方法、装置、设备及存储介质 | |
US8010973B2 (en) | Class loader for managing a network | |
US20030172172A1 (en) | Method and system of performing transactions using shared resources and different applications | |
CN111610979B (zh) | 一种经过持久化和耦合度优化的api网关及其方法 | |
US11595299B2 (en) | System and method of suppressing inbound payload to an integration flow of an orchestration based application integration | |
CN106384290A (zh) | 保单处理系统、方法及装置 | |
KR20080043517A (ko) | 통신 소프트웨어 구조에서의 도메인 프로파일 파싱 장치 및그 방법 | |
CN109150608A (zh) | 用于语音对话平台的接口服务升级方法及系统 | |
CN106464584A (zh) | 根据程序设计接口提供路由器信息 | |
CN108710503A (zh) | 一种软件版本的管理方法、使用方法及系统 | |
US8566279B1 (en) | Enhanced data collection techniques | |
JP7382282B2 (ja) | マルチテナントプラットフォームでのソリューションをプロビジョニング、アップグレード、及び追跡するシステム及び方法 | |
CN115296959A (zh) | 一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 | |
US20110060788A1 (en) | System and method for automatically providing metadata elements on a web page or web site | |
US20120324430A1 (en) | Aliasing buffers | |
CN115934537A (zh) | 接口测试工具生成方法、装置、设备、介质及产品 | |
US20190207801A1 (en) | System and Method for Rule-Based Simple Network Management Protocol Agent | |
CN115840559A (zh) | 动态配置的异构接口数据转换方法、装置、设备及介质 | |
CN113132241B (zh) | Acl模板动态配置方法及装置 | |
CN100543720C (zh) | 利用离散单元快速构建业务处理流程的方法及系统 | |
CN114285859A (zh) | 中间层区块链服务的数据处理方法、装置、设备及存储介质 | |
US11159381B2 (en) | Verification of software-defined networking (SDN) policies for specific topologies | |
JP7073813B2 (ja) | 制御プログラム、制御方法および情報処理装置 | |
WO2021083061A1 (zh) | 虚拟网络功能的软件镜像的处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |