假设我有两台本地机器A、B,另外还有一个远程服务器C,本来如果我想访问C上的一些资源,我可以使用:https://domain_of_C/some_resources
现在的要求是,我需要首先使用以下命令与机器 B 通信:https://IP_address_of_B/some_resources
,然后机器 B 应该能够将请求转发到远程服务器 C,并将正确的响应返回给机器 A。
我有一个问题,如何让机器 B 盲目地传递数据,包括 SSL 会话本身?我不知道这是否可能。
答案1
这是一个反向代理情况,并受到 nginx、apache 和 IIS 等主要 Web 服务器的支持。
在每个服务器中,您都可以定义一个路径,例如“/application” - 这样它就无需查找相应的本地目录并传递文件,也无需调用脚本解释器,而是与另一个 Web 服务器通信。然后它会转发收到的答复。
如果您指定 HTTPS 站点,它将通过 HTTPS 与“后端”网络服务器通信,就像它是网络浏览器一样。对于大多数网络服务器,您可以控制将“前端”请求中的哪些标头复制到后端请求,让网络服务器修改或过滤它们,或者添加其他标头。
A 甚至不知道 C 的存在,而这正是您想要的。理想情况下,C 应该只能由 B 访问,如果您对此 100% 有信心,那么您可以在 B 和 C 之间放弃 HTTPS,以获得一些性能,前提是这对您的硬件和负载很重要(当您每秒收到数千个请求时,这可能会很重要)。例如,如果您的“后端”网络服务器确实在同一台机器或虚拟机上,并且正在监听 127.0.0.1,则 HTTPS 可能有点过头了。
Nginx 以速度快而闻名,经常用于缓存。Nginx 与反向代理到其他 Web 服务器(如 Apache)的路径的组合很常见,也经常使用。
如果您想要更加精细,并且您的 Web 应用程序设计为支持它,则可以为单个路径指定多个后端 Web 服务器来执行负载平衡或故障转移。
配置反向代理取决于特定的网络服务器,但应该可以通过“nginx 反向代理”等轻松搜索。