【问题标题】:Allow remote server to access API server on localhost允许远程服务器访问本地主机上的 API 服务器
【发布时间】:2018-05-28 11:56:27
【问题描述】:

我正在尝试使用我的 Raspberry Pi 进行一些家庭自动化。 现在我已经建立了一个Node+Express API服务器(地址http://192.168.100.100:3000,本地文件夹~/api),用于将信号发送到空调并从中获取信息。

除此之外,我还使用 Vuejs 构建了一个 webapp 来管理 AC,并设置了一个 Nginx 服务器来访问该 webapp(地址:http://192.168.100.100,本地文件夹 ~/controller/dist)。 一切都在本地网络上完美运行,但我想远程访问所有内容。所以我转发了80端口,我可以通过互联网访问webapp,但是它不起作用,因为它无法访问API服务器。

正常吗,我还要转发端口3000,或者有没有办法告诉应用程序在localhost上寻找API?

【问题讨论】:

标签: javascript node.js express nginx


【解决方案1】:

两者都应该在本地网络中工作,因为每个人都知道谁是谁。如果通信是服务器到服务器,那么两者都应该工作,因为它是相同的场景。但是如果客户端执行 Ajax 与服务器通信,您也应该转发端口 3000。因为请求不在本地上下文中(如果您不在网络中)。

服务器到服务器:本地主机 -> 本地主机

客户端(浏览器)到服务器:internet -> localhost

如果服务器(本地)向客户端(远程)执行请求,您可以避免转发。

【讨论】:

  • 谢谢,现在很清楚了:使用 ajax 就像 webapp 是“只是”API 服务器链接的收集器,当您调用端点时,调用从您的客户端开始,而不是远程服务器.否则,例如,当使用 PHP + MySql 时,从 PHP 服务器到 MySql 的调用发生在服务器到服务器,因此 sql 的地址是“localhost”。 (我只是指出这一点以检查我是否正确:)
  • @Camillo 是的,完全一样。
【解决方案2】:

您可以转发端口 3000,它应该可以工作。

另一种选择是使用ngrok。它允许您直接打开通往 API 的隧道(无论您的防火墙设置如何)。您所要做的就是注册一个免费 帐户,您就可以拥有一个无限期运行的隧道。唯一的缺点是您需要使用他们的shortUrl(例如https://asdasd12.ngrok.io,每次重新启动时都会更改。您可以付费摆脱它,并获得一个永久的子域(例如https://myniceapi.ngrok.io

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 2020-01-21
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多