如何使用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 如下:
- Public URL: https://api.mycompany.com/products
- 内部 URL:https://productservice.internal.com:3000
请注意 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.
我正在研究使用 http-proxy-middleware / node-http-proxy 作为反向代理。有谁知道这是否真的可行?
我已经设置 http-proxy-middleware 以便我可以通过它代理请求(结果显示在 iframe 中),我还可以修改请求 headers 和html 结果。具体来说,我正在设置 host/origin headers 并重写结果以更改嵌入式链接,以便它们也通过代理。
但是,有些链接是js生成的,重写javascript回复似乎很难正确完成。
有没有办法不用重写链接就可以做到这一点?即,是否有任何方法可以将 iframe 配置为自动通过代理发送所有请求?
或者这可能不太可能,我需要使用像 Squid 这样的完整代理?
谢谢!
反向代理的使用应该对客户端和您的应用程序代码 100% 透明,零代码更改。所以可能是设计问题,我可以给你讲清楚需求。
URL 设计
作为一个 API 的例子,我可以为 API 设计 URLs 如下:
- Public URL: https://api.mycompany.com/products
- 内部 URL:https://productservice.internal.com:3000
请注意 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.