代码之家  ›  专栏  ›  技术社区  ›  user8839735

代理具有相同URL模式的多个主机

  •  3
  • user8839735  · 技术社区  · 6 年前

    我正在使用 http-proxy-middleware 代理我的API调用

    如何代理多个目标主机?我已经仔细研究了这个问题,但仍然无法理解。

    https://github.com/chimurai/http-proxy-middleware/issues/12 -允许我使用代理表,但我应该设置什么链接 target ?因为我有多个目标。

    我正在考虑通过模式匹配来代理多个主机,但另一个问题会出现,因为我有几个主机具有几乎相同的URL链接。

    实例

    尝试了以下一些解决方案,但不起作用

    解决方案1

    const proxyOptions = proxy({
      target: ["https://website1.com", "https://website2.com", "https://api.website3.com"],
      changeOrigin: true,
      loglevel: "debug"
    });
    

    解决方案2

    const proxyTable = {
      "/api": ["https://website1.com", "https://website2.com", "https://api.website3.com"]
    };
    
    const proxyOptions = proxy({
      target: "http://localhost:3000",
      router: proxyTable,
      changeOrigin: true,
      loglevel: "debug"
    });
    

    解决方案3

    server.use(
          proxy("/api", { target: "https://website1.com", changeOrigin: true }),
          proxy("/api", { target: "https://website2.com", changeOrigin: true }),
          proxy("/api", { target: "https://api.website3.com", changeOrigin: true })
        );
    

    装载代理

    server.use("/api", proxyOptions)
    

    感谢您研究此问题!

    1 回复  |  直到 6 年前
        1
  •  1
  •   user8839735 user8839735    6 年前

    我设法用 pathRewrite

    const website1 = proxy({
      target: "https://website1.com",
      changeOrigin: true,
      pathRewrite: {
        "^/website1": "/api"
      },
      loglevel: "debug"
    });
    
    const website2 = proxy({
      target: "https://website2.com",
      changeOrigin: true,
      pathRewrite: {
        "^/website2": "/api"
      },
      loglevel: "debug"
    });
    
    const website3 = proxy({
      target: "https://api.website3.com",
      changeOrigin: true,
      pathRewrite: {
        "^/website3": "/api"
      },
      loglevel: "debug"
    });
    

    装载服务器

    const server = express();
    
    server.use("/website1", website1);
    server.use("/website2", website2);
    server.use("/website3", website3);
    

    然而,这将给我的网站提供很多我不需要的页面 http://localhost:3000/website1 等等。

    有没有办法隐藏这些页面或显示其他内容,而不是我正在使用的网站主页。

    对不起,我还在学习节点。js请对我耐心点。