掌桥专利:专业的专利平台
掌桥专利
首页

一种基于反向代理集成Web系统的方法

文献发布时间:2024-04-18 19:52:40



技术领域

本发明涉及反向代理技术领域,尤其涉及一种基于反向代理集成Web系统的方法。

背景技术

一个软件系统可能由多套独立的系统集成,这些系统可能来自其它的第三方系统,第三方系统已交付,没法进行自定义开发,此时又需要集成该系统。

中国申请号为202011312503.4的发明专利公开了基于反向代理服务实现DevOps自动化的方法,利用反向代理服务,在DevOps持续集成流程中拦截Git仓库交互过程请求的URL,针对拦截的URL执行协同处理服务操作,配置DevOps持续集成的Jenkins服务,能够提供快速搭建DevOps持续集成构建环境的工具集以便后续快速安装,以非侵入源代码的方式,利用反向代理技术,通过拦截特定服务应用协同操作,实现自动化。但该技术对于用户个性化服务和系统安全性仍然有待改进。

发明内容

有鉴于此,本发明提供一种基于反向代理集成Web系统的方法,集成多个业务子系统,既包括自己开发的系统,也包括直接采购的第三方子系统,且不用暴露任何子系统地址真实访问地址,各个子系统的身份认证集中到一个入口,提高系统的安全性,一处控制,各个子系统都适用。

本发明的技术方案是这样实现的:本发明提供一种基于反向代理集成Web系统的方法,包括:

S1配置反向代理服务器,将反向代理服务器作为中间层,接收用户的请求并代理到主系统;

S2在反向代理服务器上配置反向代理规则,将主系统的请求代理到第三方系统;

S3在反向代理服务器上进行用户身份认证;

S4用户身份认证成功后,反向代理服务器将用户认证信息传递至后端Web服务器。

在上述技术方案的基础上,优选的,步骤S1包括:

选择Nginx作为反向代理服务器,并对Nginx进行安装和配置;

在Nginx的配置文件中,搜索反向代理相关的配置项,在配置项中制定主系统和第三方系统的地址和端口;

其中,主系统地址和端口为允许用户访问的主系统的地址和端口,第三方系统的地址和端口为目标集成的第三方系统的地址和端口。

在上述技术方案的基础上,优选的,步骤S2中,反向代理规则为URL映射规则或重定向规则;

其中:

URL映射规则为在反向代理服务器的配置文件中添加URL映射规则,将主系统的URL映射到第三方系统的URL;

重定向规则为在反向代理服务器的配置文件中添加重定向代理规则,将主系统的请求重定向到第三方系统的特定页面。

在上述技术方案的基础上,优选的,在Nginx的配置文件中定义两个location块,分别处理主系统的前端页面和后端接口地址,其中:

前端页面:在一个location块配置根路径/,将请求的根路径映射到/var/local/prod/h5目录下的index.html文件;

后端接口地址:在另一个location块配置以/web/开头的路径,将这些路径的请求代理到本系统的http://localhost:8880/地址,同时,在location块添加响应头,根据响应头对跨域请求进行配置,允许跨域请求访问该接口。

在上述技术方案的基础上,优选的,步骤S3中,在反向代理服务器上进行用户身份认证的方式为基本身份认证或令牌身份认证,其中:

基本身份认证为:用户在每次请求时提供用户名和密码,反向代理服务器将用户名和密码与预先配置的用户信息进行匹配,若匹配成功,则允许此次请求通过,若不成功,则返回401Unauthorized响应;

令牌身份认证为:用户在进行身份验证后,反向代理服务器将发送一个令牌给用户,用户在每次请求时将令牌作为身份凭据发送至反向代理服务器,反向代理服务器验证令牌的有效性,若令牌有效,则验证通过,否则,返回401Unauthorized响应。

在上述技术方案的基础上,优选的,反向代理规则为URL映射规则,在Nginx的配置文件中配置反向代理服务器,进行用户身份认证,包括:

配置监听端口9999,并将请求映射至主系统;

定义一个内部接口/auth,利用内部接口处理用户身份认证请求,内部接口使用Nginx的内部指令internal;

配置错误处理页面,当用户身份认证失败时,返回401Unauthorized响应;

通过设置变量$auth_request_uri,将请求转发到主系统的自定义逻辑处理接口/web/open/getVmUrl,并将请求参数$args传递至该自定义逻辑处理接口,以对所有以/开头的请求进行处理;

使用auth_request/auth指令,将请求发送到内部接口/auth进行用户身份认证;

使用auth_request_set指令,将内部接口返回的权限校验码和第三方系统的真实URL保存至变量$new_url中;

配置错误页面,当用户身份认证失败时,返回401Unauthorized响应;

使用proxy_pass指令,将请求转发到第三方系统的真实URL。

在上述技术方案的基础上,优选的,步骤S4包括:

反向代理服务器将用户身份认证的信息作为请求头的一部分传递给后端Web服务器;

后端Web服务器从请求头中获取用户身份认证的信息,并进行相应的处理。

在上述技术方案的基础上,优选的,步骤S4还包括:

根据用户身份认证的信息,后端Web服务器接收/open/getVmUrl路径的HTTP请求,分别设置参数HttpServletRequest request和HttpServletResponse response表示接收到的HTTP请求和要发送的HTTP响应;

利用自定义的验证逻辑验证用户是否有权限访问,若没有权限,则返回401Unauthorized响应,若有权限,则执行自定义的获取逻辑来获取第三方系统的真实URL;

通过response.setHeader方法将获取到的第三方系统的真实URL设置到响应的头部进行HTTP响应。

在上述技术方案的基础上,优选的,所述方法还包括:利用反向代理服务器对用户会话进行管理,确保在用户与后端Web服务器之间的通信中保持会话的一致性。

在上述技术方案的基础上,优选的,反向代理服务器对用户会话进行管理的过程为:

当用户进行身份认证或与应用建立会话时,反向代理服务器生成一个唯一的会话标识符;

在用户的每次请求中,反向代理服务器将会话标识符作为参数、请求头或Cookie的形式传递给后端Web服务器;

后端Web服务器接收到会话标识符后,将其与用户的会话状态相关联;

反向代理服务器在用户与后端Web服务器之间维护会话的一致性;

反向代理服务器对过期的会话进行处理和销毁。

本发明的方法相对于现有技术具有以下有益效果:

(1)本发明集成多个业务子系统,既包括自己开发的系统,也包括直接采购的第三方子系统,且不用暴露任何子系统地址真实访问地址,简化了系统架构,降低了复杂性,并提供了更好的性能和安全性;

(2)本发明通过配置反向代理服务器作为中间层,可以将用户的请求从前端直接代理到主系统,从而实现请求的转发和路由。这样可以将主系统与用户隔离开来,提高系统的可扩展性和安全性;

(3)本发明通过在反向代理服务器上配置反向代理规则,可以将主系统的请求代理到第三方系统。这样可以实现系统之间的集成和数据共享,为用户提供更丰富的功能和服务;

(4)本发明在反向代理服务器上进行用户身份认证可以确保只有经过身份验证的用户才能访问主系统和第三方系统。这可以提供对系统资源的保护,并防止未经授权的访问和滥用;

(5)本发明通过反向代理服务器可以将用户的认证信息传递给后端Web服务器。这样后端服务器就能够根据用户的身份来提供个性化的服务,并在会话中保持用户的状态和数据;

(6)本发明通过反向代理服务器对用户会话的管理可以提供持久性、一致性和安全性,确保用户能够获得个性化的服务,并保护系统资源免受未经授权的访问和滥用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例的方法流程图;

图2为本发明实施例的实现流程图。

具体实施方式

下面将结合本发明实施方式,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。

如图1所示,本发明提供一种基于反向代理集成Web系统的方法,包括:

S1配置反向代理服务器,将反向代理服务器作为中间层,接收用户的请求并代理到主系统;

S2在反向代理服务器上配置反向代理规则,将主系统的请求代理到第三方系统;

S3在反向代理服务器上进行用户身份认证;

S4用户身份认证成功后,反向代理服务器将用户认证信息传递至后端Web服务器。

如图2所述,本发明的一种实施方式的流程为:1)以Nginx作为反向代理服务器,该服务器位于Web系统的前端,接收来自用户的请求并将其转发给后端的Web服务器。将主系统的访问URL配置在Nginx中,实现主系统的前台页面和后台接口地址统一都由Nginx代理转发;2)前端页面采用监听80端口下/,后端接口采用监听80端口下/web,第三方系统的真实URL采用监听第三方系统请求端口9999。

根据上述配置的反向代理服务器Nginx,在接收到用户请求之后,对用户的身份进行认证。它可以使用多种身份认证机制,如用户名和密码、令牌、单点登录(SSO)等。根据认证结果,反向代理服务器可以决定是否继续将请求转发给后端Web服务器;Nginx配置文件中加入需要整合集成的第三方系统配置。在该配置中加入校验接口。实现访问主系统代理地址的时候,转发至第三方系统,从而在后端访问到第三方系统数据,前端客户端无感知,且屏蔽了第三方系统访问地址;一旦用户身份认证成功,反向代理服务器会将认证信息传递给后端Web服务器。这可以通过HTTP头部或其他方式进行传递,以便后端服务器可以使用认证信息来验证用户身份并提供相应的服务;反向代理服务器可以管理用户会话,以确保在用户与后端服务器之间的通信中保持会话的一致性。它可以生成会话标识符,并在用户每次请求时将会话标识符传递给后端服务器。后端服务器可以根据会话标识符来跟踪用户的会话状态,并提供个性化的服务。

具体地,本发明一具体实施例中,步骤S1包括:

选择Nginx作为反向代理服务器,并对Nginx进行安装和配置;

在Nginx的配置文件中,搜索反向代理相关的配置项,在配置项中制定主系统和第三方系统的地址和端口;

其中,主系统地址和端口为允许用户访问的主系统的地址和端口,第三方系统的地址和端口为目标集成的第三方系统的地址和端口。

以一具体例子进行说明:

1.安装Nginx:根据操作系统的不同,可以使用适当的包管理器(如apt、yum或brew)来安装Nginx。例如,在Ubuntu上可以运行以下命令进行安装:

sudo aptupdate

sudo apt install nginx

2.配置Nginx:Nginx的主要配置文件是nginx.conf,可以在该文件中进行反向代理相关的配置。可以使用文本编辑器(如vi或nano)打开该文件进行编辑:

sudo nano/etc/nginx/nginx.conf

3.在配置文件中搜索反向代理相关的配置项:在nginx.conf文件中,可以搜索以下关键词来找到反向代理相关的配置项:

proxy_pass

这个配置项用于指定反向代理的目标地址。通常,可以在该配置项后面指定主系统和第三方系统的地址和端口。

4.配置主系统和第三方系统的地址和端口:根据实际情况,可以在找到的proxy_pass配置项后面指定主系统和第三方系统的地址和端口。例如:

这样配置后,当用户请求/main-system路径时,Nginx会将请求代理到指定的主系统地址和端口;当用户请求/third-party-system路径时,Nginx会将请求代理到指定的第三方系统地址和端口。

5.保存并退出配置文件:在完成配置后,保存并退出nginx.conf文件。

6.重新加载Nginx配置:为了使配置生效,需要重新加载Nginx。可以运行以下命令来重新加载Nginx配置:

sudo systemctl reload nginx

完成上述步骤后,Nginx就会按照配置将用户的请求代理到主系统和第三方系统。用户访问/main-system路径时,请求会被代理到主系统的地址和端口;用户访问/third-party-system路径时,请求会被代理到第三方系统的地址和端口。

Nginx作为反向代理服务器,能够根据用户请求的路径将请求代理到不同的系统。这样可以实现系统之间的集成和数据共享,并提供统一的访问入口。用户可以通过访问Nginx服务器来访问主系统和第三方系统,而无需直接暴露主系统和第三方系统的地址和端口。同时,Nginx还可以提供负载均衡、缓存和安全性等功能,提高系统的性能和安全性。

步骤S2中,反向代理规则为URL映射规则或重定向规则;

其中:

URL映射规则为在反向代理服务器的配置文件中添加URL映射规则,将主系统的URL映射到第三方系统的URL;

重定向规则为在反向代理服务器的配置文件中添加重定向代理规则,将主系统的请求重定向到第三方系统的特定页面。

以一具体例子进行说明:

1.打开Nginx的配置文件:使用文本编辑器打开Nginx的配置文件,例如:

sudo nano/etc/nginx/nginx.conf

2.在配置文件中添加反向代理规则:在配置文件中找到server块,并在其中添加以下配置:

在上述配置中,定义两个location块,分别处理主系统的前端页面和后端接口地址,其中:

前端页面:在一个location块配置根路径/,将请求的根路径映射到/var/local/prod/h5目录下的index.html文件;

后端接口地址:在另一个location块配置以/web/开头的路径,将这些路径的请求代理到本系统的http://localhost:8880/地址,同时,在location块添加响应头,根据响应头对跨域请求进行配置,允许跨域请求访问该接口。

3.保存并退出配置文件。

4.重新加载Nginx配置:运行以下命令重新加载Nginx配置:

sudo systemctl reload nginx

完成上述步骤后,Nginx会将用户请求代理到主系统,并将主系统的请求代理到第三方系统。

当用户访问反向代理服务器的根URL(例如http://localhost/)时,Nginx会返回本系统的前台页面。当用户访问反向代理服务器的/web/路径时,Nginx会将请求代理到主系统的http://localhost:8880/地址,并将主系统的请求代理到第三方系统。

通过这样的配置,反向代理服务器充当了中间层,接收用户的请求并代理到主系统。同时,它还配置了反向代理规则,将主系统的请求代理到第三方系统,实现了系统之间的集成和数据共享。

具体地,本发明一实施例中,步骤S3中,在反向代理服务器上进行用户身份认证的方式为基本身份认证或令牌身份认证,其中:

基本身份认证为:用户在每次请求时提供用户名和密码,反向代理服务器将用户名和密码与预先配置的用户信息进行匹配,若匹配成功,则允许此次请求通过,若不成功,则返回401Unauthorized响应;

令牌身份认证为:用户在进行身份验证后,反向代理服务器将发送一个令牌给用户,用户在每次请求时将令牌作为身份凭据发送至反向代理服务器,反向代理服务器验证令牌的有效性,若令牌有效,则验证通过,否则,返回401Unauthorized响应。

以一具体例子进行说明:

1.打开Nginx的配置文件:使用文本编辑器打开Nginx的配置文件,例如:

sudo nano/etc/nginx/nginx.conf

2.在配置文件中添加反向代理规则和用户身份认证配置:在配置文件中找到server块,并在其中添加以下配置:

在上述配置中,listen 9999表示Nginx监听的端口为9999。location/auth用于定义内部接口处理用户身份认证请求,使用了Nginx的内部指令internal。location@error401定义了当用户身份认证失败时返回401Unauthorized响应的错误处理页面。location/用于拦截所有第三方系统的URL,并进行用户身份认证和代理转发。

3.保存并退出配置文件。

4.重新加载Nginx配置:运行以下命令重新加载Nginx配置:

sudo systemctl reload nginx

完成上述步骤后,Nginx会在端口9999上监听请求,并根据配置进行用户身份认证和代理转发。

当用户访问反向代理服务器的根URL(例如http://localhost:9999/)时,Nginx会将请求转发到主系统,并在转发前进行用户身份认证。用户身份认证请求会被代理到内部接口/auth进行处理。如果用户身份认证失败,Nginx会返回401Unauthorized响应。如果用户身份认证成功,Nginx会将请求转发到第三方系统的真实URL。

通过这样的配置,Nginx作为反向代理服务器充当了中间层,接收用户的请求并进行用户身份认证。

具体地,本发明一实施例中,步骤S4包括:

反向代理服务器将用户身份认证的信息作为请求头的一部分传递给后端Web服务器;

后端Web服务器从请求头中获取用户身份认证的信息,并进行相应的处理。

步骤S4还包括:

根据用户身份认证的信息,后端Web服务器接收/open/getVmUrl路径的HTTP请求,分别设置参数HttpServletRequest request和HttpServletResponse response表示接收到的HTTP请求和要发送的HTTP响应;

利用自定义的验证逻辑验证用户是否有权限访问,若没有权限,则返回401Unauthorized响应,若有权限,则执行自定义的获取逻辑来获取第三方系统的真实URL;

通过response.setHeader方法将获取到的第三方系统的真实URL设置到响应的头部进行HTTP响应。

以一具体例子进行说明:

1.在Nginx配置文件中添加转发请求头的配置:在Nginx的配置文件中,找到反向代理服务器的配置块(即上述提供的配置示例)。在该配置块中的location/段落中,添加以下配置:

proxy_set_headerAuthorization$http_authorization;

上述配置将用户身份认证的请求头Authorization传递给后端Web服务器。

2.修改后端Web服务器中getVmUrl方法的实现,以获取请求头中的用户身份认证信息。在验证用户权限和获取第三方系统URL的逻辑中,添加以下配置:

上述配置通过request.getHeader("Authorization")获取请求头中的用户身份认证信息,并根据自定义逻辑进行处理。如果用户权限验证失败,设置响应状态码为401。如果验证成功,可以根据需要设置其他响应头或执行其他逻辑。

3.保存并重新加载Nginx配置:保存Nginx配置文件并重新加载配置,运行以下命令:

sudo systemctl reload nginx

完成上述步骤后,Nginx会将用户身份认证的请求头Authorization传递给后端Web服务器。后端Web服务器可以通过request.getHeader("Authorization")获取该信息,并根据需要进行用户身份认证和处理。

当用户请求经过Nginx反向代理服务器转发到后端Web服务器时,Nginx会将用户身份认证的请求头Authorization传递给后端Web服务器。后端Web服务器可以通过request.getHeader("Authorization")获取该信息,并根据自定义逻辑进行用户身份认证和处理。根据处理结果,后端Web服务器可以设置适当的响应状态码和响应头,以及执行其他业务逻辑。

具体地,本发明一实施例中,所述方法还包括:

利用反向代理服务器对用户会话进行管理,确保在用户与后端Web服务器之间的通信中保持会话的一致性。

反向代理服务器对用户会话进行管理的过程为:

当用户进行身份认证或与应用建立会话时,反向代理服务器生成一个唯一的会话标识符。

具体地,这个会话标识符可以是一个随机字符串或其他唯一的标识符。

在用户的每次请求中,反向代理服务器将会话标识符作为参数、请求头或Cookie的形式传递给后端Web服务器。

具体的传递方式取决于应用程序和反向代理服务器的配置。

作为参数传递:会话标识符可以作为URL的一部分或查询参数的形式传递给后端Web服务器。例如,http://backend-server.com/path?session_id=abcd1234。

作为请求头传递:会话标识符可以作为请求头的一部分传递给后端Web服务器。例如,Authorization:Bearer abcd1234。

作为Cookie传递:会话标识符可以设置为Cookie的值,并随每个请求一起发送给后端Web服务器。例如,Set-Cookie:session_id=abcd1234。

后端Web服务器接收到会话标识符后,将其与用户的会话状态相关联。

具体地,可以在服务器端使用会话存储机制(如内存、数据库或缓存)来存储和管理会话状态。通过会话标识符,后端Web服务器可以识别用户并维护其会话状态。

反向代理服务器在用户与后端Web服务器之间维护会话的一致性。

具体地,反向代理服务器会将会话标识符传递给后端Web服务器的每个请求,确保后端服务器能够正确识别并处理用户的会话。这样,无论用户的请求经过哪个后端服务器,会话状态都能够保持一致。

反向代理服务器对过期的会话进行处理和销毁。

具体地,可以根据会话的过期时间或其他条件来判断会话是否已过期。一旦会话过期,反向代理服务器可以清除会话标识符,并在后续请求中不再传递该会话标识符。后端Web服务器也可以相应地处理过期的会话状态。

通过以上过程,反向代理服务器能够对用户会话进行管理,确保在用户与后端Web服务器之间的通信中保持会话的一致性。这样,应用程序可以跨多个后端服务器进行扩展,并且用户的会话状态可以在不同的服务器之间共享和保持一致。

以上所述仅为本发明的较佳实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种航空发动机附件机匣传动轴端部轴承外环测温方法
  • 一种用于发动机附件机匣传动轴端部轴承外环的测温方法
技术分类

06120116334443