REST API 企业应用程序中的节点端口

REST API Node port in an enterprise application

我有一个 Angular 应用程序与 Node / Express REST API 通信。

API 在端口 82 上运行。

我们公司向 BanksTelevisionConstruction 等企业和大型组织出售此应用程序的许可证。

许多这样的组织都有严密的安全网络,有时不允许 API 所在的端口 运行,这意味着他们无法访问内容,直到 IT部门已开放此端口

在某些情况下,组织的政策是他们不会打开特定端口,这会导致销售损失,这非常糟糕!

问题是我无法更改端口,因为对于每个组织来说,哪些端口是打开的,哪些是关闭的是不同的。

所以我的问题是我该如何解决这个问题?我是因为他们的安全系统而注定要失去客户,还是有解决办法?我在想我不是唯一遇到这个问题的人...

如果在您的客户的服务器上使用 Web 服务器,他们只需要在您的后端添加代理,运行 在任何空闲端口

像这样的 nginx

    location ^~ /nodeapp/ {
        proxy_pass      http://127.0.0.1:82/;
    }

因此,客户端的所有 url http://website.org/nodeapp/anything 转到您的 nodejs 实例 /anything。您的应用可通过打开的 80 端口访问

如果不允许使用和更改现有 web 服务器的配置,那么唯一的选择是使用 args 设置 nodejs 监听端口 --port 4000 并显式打开该端口到外部网络

如果我写这篇文章,我会在配置文件中包含端口以及所有其他应用程序范围的定义(credentials/api 键等)。您的客户应该有专职人员为您的节点应用 运行 所在的任何端口设置一些代理路由,并且您的 API 应该通过调用配置文件来引用该端口(我很确定大多数 node/express 文档都是故意这样做的)。

通过这样做,API 它 运行 在哪个端口上并不重要,并且由客户端定义和支持他们允许在其网络上使用的端口。

编辑: 刚刚在另一个答案中看到您的评论,您正在托管 API 并且他们正在连接到它。在这种情况下, 会更容易(和更好的行业惯例)在端口 80 上公开您的 API。如果您已经在 80 上安装了 Apache 运行 ,那么您需要在您自己的基础架构中将您的 API 从它 运行 的端口代理到同一端口上的端点(与您可以拥有多个站点 运行 的方式相同端口 80,因为它们具有不同的 URL)

像这样:

<VirtualHost *:80>
  ...
  ServerName api.somehost.com
  ProxyPass / http://127.0.0.1:82/ Keepalive=On
  ProxyPassReverse / http://127.0.0.1:82/
  ProxyPreserveHost On
  ....
</VirtualHost>

因此,当您的客户端将 REST 调用指向您的 api.somehost.com 时,它会通过端口 80 进入您的基础设施,并在端口 82 上路由到您的 API 运行。确保您已启用代理模块 (a2enmod proxy)