【问题标题】:Redirect APIs calls from frontend to backend on different machines in Node [closed]在Node中的不同机器上将API调用从前端重定向到后端[关闭]
【发布时间】:2021-06-07 22:33:36
【问题描述】:

我有一个 Node 应用程序,它应该在一个 Docker 容器上运行前端,在另一个容器上运行后端。前端和后端都使用 Express。 目前我正在尝试将从前端客户端调用的 API 重定向到后端。

示例:在 38.127.211.116 上运行的前端调用 api /api/get-price/toy/1 并且此 api 应转发到在 87.105.146.57 上运行的后端。

我使用前端服务器中的代理设法做到了这一点,我使用了一个名为“http-proxy-middleware”的 npm 包。 目前我的代码看起来像这样(路径 ?api 下的所有内容都被转发到后端):

.use('/api', createProxyMiddleware({
    target: process.env.NODE_ENV === "prod" ? "someValue" : https://${devIpAddress}:${process.env.BACKEND_PORT}/`,
    // changeOrigin: true,
   secure: process.env.NODE_ENV === "prod" ? true : false // is it safe to have false in prod?
}))

我有几个问题,因为我不完全理解不同方法的含义:

  1. 代理与 CORS: 这种方法(从前端到后端的代理)或从前端到后端的直接调用允许后端中的 CORS 更好吗? 有哪些优点和缺点?

  2. 代理中的安全选项: 我可以从文档中阅读:“如果您想验证 SSL 证书,请将安全设置为 true/false”。如果我总是使用 false,也在 prod 中,有什么缺点?我会有安全问题吗?如果是,是哪一个? 因为有了代理,我的后端地址是隐藏的(?),但是如果我只有一台机器,每个用户都可以看到并调用我所有的 API,那么验证调用者的意义何在?

  3. 代理中的原点选项: 启用更改来源有什么好处?

  4. 身份验证: 该网站的一些页面将需要用户身份验证。对于 API,我认为该过程将非常简单,因为调用将被重定向到后端,并且响应将根据用户凭据以正确的响应传回。 我对前端的用户身份验证处理更感兴趣。因为我必须提供 html 页面,并且这些页面应该只提供给登录的用户。但是带有凭据的数据库在后端,那么这里最好的策略是什么? 我正在考虑在共享公共 Express 文件夹的代码之前放置一个中间件,并在用户请求需要登录的页面时向后端发送 http 请求。如果响应是肯定的,则请求将继续显示页面继续,否则它将退出。 但我想知道这是否是正确的方法。比如:

.use("/admin", ()=>{
    // pseudo code
     const result = httpCallToBackend();
     if(!result) exit;
 }) // if positive go to next instruction - show html page
.use(express.static(process.env.STATIC_FOLDER_PATH, { extensions: ["html"] }))

【问题讨论】:

    标签: node.js docker express proxy backend


    【解决方案1】:

    意见问题,所以这是我的......

    1. 代理与 CORS。一般来说,我会建议从浏览器直接调用 API 并根据需要使用 CORS。如果前端和后端服务器不在同一位置(如您的情况所示),直接调用尤其重要。通过代理,您在服务器之间增加了额外的网络开销,并为用户增加了额外的跃点。除非您有一些需要它的业务需求,否则没有太多理由使用代理。

    2. 安全。使用代理时,您将直接从您的一台服务器与另一台服务器进行通信。有些人可能觉得在这种情况下不需要额外的安全性,可以将安全设置为 false。同样,如果您的服务器不在同一地点,那么我肯定会保留它。

    3. 更改原点。仅当您在使用源来定义应用程序以将调用定向到的多租户虚拟服务器上时,这一点才重要。对于容器化,这在最近是非常不寻常的。

    4. 身份验证。这是代理可能更好的原因之一。使用代理,您将能够在单个服务器上需要的任何路由上设置授权中间件。就个人而言,我认为这还不够。我会让前端服务器调用后端服务器以获取登录用户信息,然后您可以在两台服务器上独立进行身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      相关资源
      最近更新 更多