从 Internet 服务器(公共)调用 Intranet(私有)服务器上的 .php 页面

Posted

技术标签:

【中文标题】从 Internet 服务器(公共)调用 Intranet(私有)服务器上的 .php 页面【英文标题】:Call .php page on Intranet (Private) Server from Internet Server (Public) 【发布时间】:2014-04-02 21:17:42 【问题描述】:

所以我什至不确定这是否可能,我在上面找不到任何东西。

我有一个定制的在线订购系统,客户可以从中订购熟食。此页面位于 Server1 上,它是面向公众的服务器。

在内部公司服务器 Server2 上,创建了一个 php 页面,该页面构造了“订单表单”(在数据库中查找未打印的订单),然后将结果/参数发送到 perl 文件,该文件打印/发送表单到指定地点(多个地点接送)。

我有一个在 Server2 上运行的计划任务,它运行 php 文件。

我想要做的是能够在一个人提交订单时从 Server1 启动 Server2 上的那个 php 文件。我希望它在正常的计划任务之外运行。

我不能使用 cURL,因为内部 server2 没有可以发送到的 URL,因为它只是内部的。

有什么想法或变通方法/黑客可以做到这一点?

编辑:(流程)

当用户提交订单时,Server1(公共 Web 服务器)在 Server3(内部数据库服务器)中为订单创建条目。 Server2 php 文件(计划任务)查询 Server3 数据库中未打印的订单并打印出来。

【问题讨论】:

您应该能够将 cURL 与服务器的 IP 地址一起使用 - IP 地址可以是 URL 的一部分 :) 我当然希望您不能 cURL 到“内部”服务器。如果可以的话,它不是内部的,而且你有巨大的安全问题。 是的,内部服务器没有外部可用的 IP 地址。所以没有什么可以卷曲到:( 您不能(原则上)从面向公众的服务器上触摸内部服务器。最大的问题是你能从内部服务器访问面向公众的服务器吗?如果可以的话,然后在公共服务器上设置一个类似 api 的应用程序来为提交的订单提供服务,然后你的内部服务器将轮询你的公共服务器 api 并使用它返回的信息来做你想做的事情。 现在,内部服务器上的 php 页面已经在某种程度上做到了。当订单被放置在外部公共服务器上时,它会在提交但未打印时进入数据库中的表。内部服务器上的 php 页面每 xx 分钟查询一次数据库中已提交但未打印的订单,随后处理并将它们发送到 perl 脚本以进行打印。 【参考方案1】:

在您的设置中,Server2 始终可以访问 Server1,但反之则不行。您希望将数据从 Server1“推送”到 Server2,这是不可能的。我可以想到 2 类解决方案:

    轮询。在 Server1 上创建一个“私有”php 文件,其中包含新订单列表。 Server2 将定期检查或“轮询”此列表并接收新订单。为了安全起见,您应该使用 HTTPS 并使用秘密共享密钥或密码。 Server2 收到订单后可以发出 POST 请求,让 Server1 知道订单已处理完毕。

    公共互联网上的第 3 方服务或 API,因此两个服务器都可以访问。我想到了一些服务。

    Pusher:http://pusher.com/docs/server_libraries Pusher 允许向防火墙后面的设备实时“推送”通知。 Dropbox:https://www.dropbox.com/developers/core/sdks/other Server1 可以创建一个订单“文件”并将其放入私人保管箱文件夹中。然后,Server2 可以在订单完成后读取和删除该文件。

还有其他类似pusher的服务也可以解决你的需求:http://www.quora.com/What-are-alternatives-to-pusher-com

【讨论】:

啊,实际上两个服务器都没有直接相互访问。 Server1(公共 Web 服务器)在 Server3(内部数据库服务器)中为订单创建条目。 Server2 查询 Server3 数据库中未打印的订单并打印它们。我想我应该指定得更好。我一定会考虑你的建议。如果没有,它必须按原样工作(无论如何它每 5 分钟运行/检查一次),只是我的主管希望它在每次有人提交时也处理(每 5 分钟任务之外)。

以上是关于从 Internet 服务器(公共)调用 Intranet(私有)服务器上的 .php 页面的主要内容,如果未能解决你的问题,请参考以下文章

保护 Azure 存储免受公共 Internet 访问

MobileFirst:在公共 IP - 无法从应用程序调用适配器

在 Windows 服务上调用公共方法

如何从互联网访问虚拟主机?

pdf中的Internet公共IP地址和django静态文件

使用 terraform 将公共 GKE 更改为私有 GKE 集群