从在线服务器向本地服务器发送 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 通过路由器连接到 Internet。

如何从“在线”服务器向本地服务器发送 PHP GET?

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

提前致谢!

您必须在路由器上打开一个端口,并指定路由器应将请求引导至何处。假设您的外部 ip 是:80.82.71.24,转到此 ip 地址 (fx: http://80.82.71.24) 将导致您的路由器。然后路由器决定如何处理这个请求,通常请求会超时/拒绝。但是在路由器上,如果你指定这个特定的请求(可能是:tcp/udp)(到指定的端口)应该指向某个内部ip(本地服务器ip),那么就可以做你想做的.

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

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

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

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

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

第 1 步:

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

虽然您通常可以定义一个 "exposed host" 只有所有外部请求都到达的地方,但如果您只将特定端口转发到您的服务器,则在安全性方面会更好。由于您要使用 HTTP 协议,此处的标准端口为 80 (http) 和 443 (https)。因此,假设您使用带默认端口的 HTTPS,典型的转发将是:

路由器 WAN ip,端口 443 --> 服务器 LAN ip,端口 443

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

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

第 2 步:

由于您的路由器的 WAN ip 会不时更改,您需要以某种方式将该 ip 公布给您的外部服务器。

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

现在您仍然需要让 DDNS 提供商知道您当前的动态 WAN ip。再次执行此操作的最简单方法涉及您的路由器。检查其 DDNS 设置的配置,通常路由器支持此功能,通常甚至预先配置了一些特定的提供商。使用从 DDNS 提供商处获得的凭据设置路由器。

现在一切都准备就绪。您应该能够使用从 DDNS 提供商那里获得的 URL 向您的内部服务器发送请求,而您的路由器既会转发此类请求,也会将任何 ip 更改通知 DDNS 提供商。

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