1

我已将一个网站迁移到 Amazon ec2,该网站连接到我们正在使用的服务,该服务安装在另一台服务器(而不是 Amazon)上。对该服务的 API 的访问受 IP 限制,并通过使用 PHP 中的 *http_build_query* 和 *stream_context_create* 发送 XML 数据来完成。

如果我想从新服务器连接到服务,我需要先让供应商添加新 IP。我通过向他们发送弹性 IP 来做到这一点,但它不起作用。在尝试调试时,我注意到 $_SERVER['SERVER_ADDR'] 的输出是 ec2 实例的私有 IP。我假设另一端的服务器正在接收相同的数据,因此它会尝试对私有 IP 进行身份验证。我已经要求供应商也允许从私有 IP 进行访问——它还没有实现,所以我不确定这是否能解决问题,但据我了解他们的 API 的工作方式,它会尝试将数据解析回与之联系的 IP,这应该是不可能的,因为服务器位于亚马逊云之外。

我可能会在这里错过一些非常明显的东西。我向rc.local (在我的 ec2 实例上运行 CENT 操作系统)添加了一个命令,该命令在启动时使用ec2-associate-address将弹性 IP 与服务器相关联,这似乎有助于使 MySQL 连接到另一个外部服务器工作,但是上面提到的API没有运气。

排除一件事 - API 是通过 HTTPS 访问的,在安全组中启用了端口 80 和 443(以及一个 mysql 端口)并进行了测试。域和 SSL 运行良好。

任何提示都非常感谢 - 我已经搜索了很多,但到目前为止找不到任何有用的东西。

4

1 回答 1

0

听起来两个 IP(私有和弹性)在您的 VM 中都处于活动状态。通过运行检查ifconfig -a。如果发生这种情况,那么用于外部流量的 IP 将取决于远程地址和 VM 的路由表。它甚至可以从一个连接到下一个连接有所不同。

如果这是正在发生的事情,那么最快的解决方法就是使用ifconfig down具有私有地址的接口。那应该只为所有外部连接留下弹性地址。如果这解决了问题,那么您可以编写脚本,在弹性 IP 激活后自动关闭私有 IP,或者如果弹性 IP 将永久分配给此 VM,而您确实不需要私有 IP,那么您可以永久解除私有 IP 与此 VM 的关联。

于 2012-04-25T06:12:37.613 回答