在前面的场景中,要实现内网应用能够被外网访问,一般有两种方式:

将应用部署到可被外网访问的服务器,通常为 DMZ 区服务器 使用反向代理服务器,将外网请求代理转发到内网的应用服务器

其中,将内网应用部署到可被外网访问的服务器上的方法,通常受限于可提供的硬件环境、安全控制等方面的问题,并不是解决该类问题的首选方案。因此,通常会在可被外网访问的服务器上部署反向代理服务器,使用代理转发来解决。

目前最常用的软件反向代理服务器有 Apache 和 Nginx 。通过配置文件设置,就可以将特定的链接向应用服务器转发。例如 Nginx 可通过以下简单的配置,即可实现代理转发:

server

{

listen 80;

server_name domain.com;

location /app1 {

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://192.168.10.38:3000/app1;

}

access_log logs/domain.com.access.log;

}

在以上实例中,Nginx 配置完成后,即可将 http://domain.com/app 的所有请求代理转发到 http://192.168.10.38:3000/app1 地址,这样就可以实现针对 app1 的从外网访问内网应用的代理转发功能。此时 app1 对于外网的访问地址就变成了 http://domain.com/app 。

通过使用代理服务器, 所有的应用将拥有统一域名 ,而通过 二级目录区分 不同的应用。

在 Apache 中同样可以采用类似的策略进行代理转发,本文中主要以 Nginx 作为实例。

在多个接入多个应用的情况下,只要按照上述实例中的配置,为不同的应用分配不同的二级目录,即可实现向不同应用进行代理转发。这样就可以解决文章开始提出的问题。

但是这一解决方案也存在问题:

当需要新增/修改/删除应用的代理转发配置时,需要人工修改配置文件,并重启代理转发服务器,这将导致服务的暂时不可用。 当接入应用较多时,配置文件将越来越大,对用人工维护造成极大的不便。 当代理转发服务器进行集群化部署时,每次对配置文件的更新,都需要更新所有代理转发服务器,并进行重启,这将增大维护的风险。

针对以上的问题,需要对该访问进行进一步改进。

使用动态代理

如果能够使反向代理服务器动态的通过集中的配置数据更新针对应用的代理配置,就可以解决上述方案中存在的问题。

经过研究分析,本文中提出 动态代理 方案,流程如下:

当请求进入反向代理服务器时,反向代理服务器将分析进入的请求 URL ,识别 URL 中的二级目录(用于区分不同的应用),然后使用该二级目录作为应用标识,到代理配置数据数据中进行查询,获得代理地址的返回结果,然后将该请求转发到对应的应用服务器。

同时,管理人员可以通过特定的管理端,对代理配置数据进行 CRUD 操作,方便管理人员对代理应用配置的实时管理。

通过以上流程,即可实现在不中断服务的情况下,动态修改代理配置。同时也可以确保集群化的反向代理服务器同步更新,都可以获得最新的配置数据。

使用动态代理方案,即可以解决在文章开头提出的问题。

基于 Nginx 实现动态代理

为了实现动态代理方案,需要在反向代理服务器中增加定制的功能。针对这一目的,研究了目前主流的反向代理服务器 Apache 和 Nginx ,结论如下:

Apache 和 Nginx 均可以增加定制的模块以实现定制的功能。但是 Apache 目前必须使用 C 语言按照 Apache 的要求编写模块,这对于开发者要求相对较高。而 Nginx 同样可以使用 C 语言开发扩展模块,但除此之外,目前已有针对 Nginx 开发的 Lua 语言解释器模块,即可以在 Nginx 的配置文件中直接调用 Lua 语言开发的脚本程序,这种方式极大的降低了定制功能开发的难度。因此,采用 Nginx 作为反向代理服务器,使用 Lua 语言作为定制功能开发语言,进行动态代理功能实现。

同时,由于反向代理服务器需要处理大量的代理请求,因此会频繁的读取反向代理配置数据。基于这一情况,选用 Redis 作为数据库,利用其高性能的数据读写,支撑代理配置数据的频繁访问。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。

因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。

既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)

项目供你选择,真正体系化!**

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取) [外链图片转存中…(img-Xr7pcICL-1712558485153)]

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: