【发布时间】:2021-06-29 14:15:19
【问题描述】:
给定两台服务器 A 和 B,其中 A 通过公共 URL 暴露在互联网上,而 B 与 A 位于同一网络上;如何让服务器 A 向 B 发送操作?
一个非常简单的例子是让 A 醒来 B。
现在,我有一个基本的 HTML 页面,其中有一个按钮可以触发对具有 shell_exec('wakeonlan ...') 的 PHP 文件的 AJAX 请求,另一个链接到 div 的 AJAX-to-PHP 每 5 秒更新一次以告诉我服务器是否B 打开或关闭。
我在这里有点盲目,因为我无法找到有关这种设置的信息,显然我想将我的功能扩展到简单的网络唤醒之外。
这可以通过 LAMP 服务器实现吗,还是我需要更复杂的东西?
【问题讨论】:
-
您还想准确发送哪些其他操作?如果服务器 B 被 wakeonlan 命令唤醒,那么一旦它完全启动并运行,服务器 A 就可以通过 B 提供的任何服务和协议向它发送命令。你将如何做到这一点取决于你想要做什么。
-
@ADyson 几乎任何东西;如果 B 是另一个 Linux 系统,而 C 是 Windows 系统,我希望能够查询服务器、执行程序或从 C 获取文件……对不起,我要求的内容太宽泛了吗?例如,我想知道如何与 A 本地的服务器进行通信,但不依赖于
shell_exec。我可以依赖哪些服务? -
那么 HTTP 可能会有意义 - 应用您已经在 A 中使用的相同模式。即当前您向 A 发出 http 请求,然后运行 shell_exec。以同样的方式,A 可以向 B 发出 HTTP 请求,然后 B 可以运行 SQL 查询或运行 shell 命令或任何您想要的。所以如果 B 上有一个网络服务器,你可以这样做。我想还有十几种其他方法可以实现它,但 HTTP 是你已经熟悉的现成方法。
-
@ADyson 好的,但是我如何使用 HTTP 从 A 请求到 B?如果我在发出请求时使用 B 的本地 IP 地址,那么位于 A 和 B 网络之外的用户的机器是否会尝试对该 IP 执行该操作?
-
否,因为您使用 PHP 从服务器 A 发出请求。服务器发出请求,而不是浏览器。将服务器 A 视为中继服务器或代理服务器——你从浏览器向服务器 A 发出命令,然后服务器 A 向服务器 B 发出命令——就像你现在使用 Wake on LAN 命令所做的那样,除了在 A 和 B 之间使用 http 而不是唤醒协议
标签: php html jquery apache lamp