将 GET 请求从联机服务器发送到本地服务器


Sending GET Requests from Online Server to Local Server?

所以情况是这样的:我有一堆Arduinos和Raspberry Pis以及本地网络上的ubuntu服务器。arduinos 和 pis 通常使用 PHP GET & POST 请求与本地服务器进行通信。

现在,这个本地服务器有时会从云中的远程服务器(也使用 PHP GET)"获取"一些东西来响应来自 Arduinos 和 Pis 的本地请求。

现在问题来了:本地服务器通过 GET 与远程服务器通信没有问题,但如果我希望云中的服务器向本地服务器发送 GET 怎么办?

这部分让我有点困惑,因为本地服务器位于常规 LAN 上,并通过发布动态 IP 的本地商业 ISP 通过路由器连接到互联网。

如何将 PHP GET 从"在线"服务器发送到本地服务器?

请注意,两台服务器都在 Ubuntu 14.04 上运行 Apache/PHP/MySQL。

提前感谢一吨!

您需要两个步骤才能完成此操作。

步骤 1 - 使路由器将外部请求转发到 LAN 服务器

步骤 2 - 使外部服务器知道当前的动态 WAN IP

第 1 步:

路由器必须配置为将 WAN 请求转发到 LAN 服务器。假设您使用普通的家用路由器,您通常会将浏览器指向路由器 ip 并登录路由器。现在您必须找到配置转发的位置(不幸的是,此功能的命名因路由器而异)。

虽然您通常可以定义一个"公开主机",只有所有外部请求都会转到该主机,但如果您只是将特定端口转发到服务器,则在安全性方面会更好。当您要使用HTTP协议时,这里的标准端口将是80(http)和443(https)。因此,假设您将HTTPS与默认端口一起使用,典型的转发将是:

路由器 WAN IP,端口 443 -

-> 服务器 LAN IP,端口 443

这会将端口 443

上路由器的任何外部请求转发到端口 443 上的内部服务器。

现在您的服务器应该能够接收这些请求,但您仍然需要知道路由器当前的动态 WAN IP。

第 2 步:

由于路由器的 WAN IP 不时更改,您需要以某种方式向外部服务器宣布该 IP。

一种简单的方法是使用外部服务,该服务将为您提供一个URL,该URL将解析为您当前的IP。这通常被称为 DDNS 或动态 DNS。一个非常著名的DDNS提供商是 https://dyn.com/dns/- 但还有很多其他的,你甚至可以找到免费的。向此类提供商注册后,您将获得一个外部服务器可以使用的 URL,而不是 IP。

现在,您仍然必须告知DDNS提供商您当前的动态WANIP。最简单的方法再次涉及您的路由器。检查其配置的DDNS设置,通常路由器确实支持此功能,通常甚至预先配置了一些特定的提供商。使用从 DDNS 提供商处获得的凭据设置路由器。

现在一切都准备好了。您应该能够使用从 DDNS 提供商处获得的 URL 向内部服务器发送请求,而路由器会转发此类请求并通知 DDNS 提供商任何 IP 更改。

警告一句 - 您刚刚将本地服务器暴露在互联网上。因此,您必须像对待互联网上的任何服务器一样对待它以确保其安全,包括仔细配置、安装安全更新等。

您必须在路由器上打开一个端口,并指定路由器应将请求引导到的位置。假设您的外部IP是:80.82.71.24,转到此IP地址(fx:http://80.82.71.24)将指向您的路由器。然后路由器决定如何处理此请求,通常请求会超时/拒绝。但是在路由器上,如果您指定此特定请求(可能是:tcp/udp)(到指定端口)应指向某个内部IP(本地服务器IP),则可以执行所需的操作。

但是要做到这一点,您需要在路由器上阅读 - 首先,看看是否可以登录它。您能否指定您使用的路由器以及您的互联网连接是您的还是共享的(例如校园、学校等)?

顺便说一句,为全世界开放端口不是一个好主意,所以也许您应该考虑只允许您的云服务器 ip 访问该特定端口。