所以情况就是这样:我在本地网络上有一堆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。
提前感谢!
答案 0 :(得分:0)
您必须在路由器上打开一个端口,并指定路由器应该将请求引导到的位置。让我们假设您的外部IP是:80.82.71.24,转到此IP地址(fx:http://80.82.71.24)将导致您的路由器。然后路由器决定如何处理此请求,通常请求将超时/拒绝。但是在路由器上,如果你指定这个特定请求(可能是:tcp / udp)(到指定端口)应该指向某个内部ip(本地服务器ip),那么它可以做什么你要。
但要做到这一点,你需要阅读你的路由器 - 首先,看看你是否可以登录它。您能否指定您使用的路由器以及您的互联网连接是您的还是共享的(例如校园,学校等)?
顺便说一下,为全世界打开端口不是一个好主意,所以也许您应该考虑只允许您的云服务器ip访问该特定端口。
答案 1 :(得分:0)
您需要两个步骤才能完成此任务。
步骤1 - 使路由器将外部请求转发到LAN服务器
第2步 - 让外部服务器知道当前的动态WAN ip
路由器必须配置为将WAN请求转发到LAN服务器。假设您使用普通的家用路由器,通常将浏览器指向路由器ip并登录路由器。现在你必须找到配置转发的位置(不幸的是,此功能的命名因路由器而异)。
虽然您通常可以定义所有外部请求所在的“公开主机”,但如果您只是将特定端口转发到服务器,则在安全性方面更好。当您打算使用HTTP协议时,这里的标准端口将是80(http)和443(https)。因此,假设您将HTTPS与默认端口一起使用,典型的转发将是:
路由器WAN ip,端口443 - >服务器LAN ip,端口443
这会将端口443上的任何外部请求转发到端口443上的内部服务器。
现在您的服务器应该能够接收这些请求,但您仍然需要知道路由器当前的动态WAN IP。
当您的路由器的WAN IP不时更改时,您需要以某种方式宣布该IP到您的外部服务器。
一种简单的方法是使用外部服务,该服务将为您提供一个URL,该URL将解析为您当前的IP。这通常称为DDNS或动态DNS。一个众所周知的DDNS提供商是https://dyn.com/dns/ - 但还有很多其他的,你甚至可以找到免费的。注册此类提供程序后,您将获得一个外部服务器可以使用的URL而不是ip。
现在您仍然需要让DDNS提供商了解您当前的动态WAN IP。最简单的方法是再次执行此操作涉及您的路由器。检查其配置是否有DDNS设置,通常路由器确实支持此功能,通常甚至有一些特定的提供商已预先配置。使用从DDNS提供商处获得的凭据设置路由器。
现在一切都已确定。您应该能够使用从DDNS提供商处获得的URL向内部服务器发送请求,而您的路由器都会转发此类请求并通知DDNS提供商任何IP更改。
警告 - 您刚刚将本地服务器暴露在互联网上。因此,您必须像对待互联网上的任何服务器一样对待它以保证其安全,包括仔细配置,安装安全更新等。