如何使用http-proxy-middleware / node-http-proxy 作为反向代理?

How to use http-proxy-middleware / node-http-proxy as a reverse proxy?

我正在研究使用 http-proxy-middleware / node-http-proxy 作为反向代理。有谁知道这是否真的可行?

我已经设置 http-proxy-middleware 以便我可以通过它代理请求(结果显示在 iframe 中),我还可以修改请求 headers 和html 结果。具体来说,我正在设置 host/origin headers 并重写结果以更改嵌入式链接,以便它们也通过代理。

但是,有些链接是js生成的,重写javascript回复似乎很难正确完成。

有没有办法不用重写链接就可以做到这一点?即,是否有任何方法可以将 iframe 配置为自动通过代理发送所有请求?

或者这可能不太可能,我需要使用像 Squid 这样的完整代理?

谢谢!

反向代理的使用应该对客户端和您的应用程序代码 100% 透明,零代码更改。所以可能是设计问题,我可以给你讲清楚需求。

URL 设计

作为一个 API 的例子,我可以为 API 设计 URLs 如下:

请注意 API 的 public URL 实际上是反向代理中的路由。

互联网客户端只会使用 public URL。如果内部 API 曾经 returns URLs 到互联网客户端,则需要将其配置为使用 public URL.

反向代理

最成熟的选项可能是基于 nginx 的选项,它提供声明式路由以及通过插件编写您喜欢的任何逻辑的能力。 Curity guides 中有大量示例,可能会让您了解一些用例

主流的选择是使用 proxy-pass 指令路由到内部 URL。相同的模式应该适用于您提到的节点 RP,但对于简单的任务,不需要自定义逻辑。

Header 配置在 RP 中很常见,例如确保组件接收原始客户端的 IP 地址,而不是 RP 的 IP 地址,但这通常是可选的。

后端组件行为不当

也许这是问题的根源 - 如果网站 returns 内部 URL,例如重定向或图像 URLs,那么它是错误的。许多技术栈都会有 属性 解决这个问题,例如 BaseUrl

这似乎是有可能的,只是在一定程度上。 http-proxy-middleware 可以配置为编辑响应 headers 并重写响应 body,以便可以重写链接以使用代理 URL。 XmlHttpRequest 和 fetch() 请求也可以被拦截以重写请求以使用代理 URL.