【问题标题】:How can I make Apache on an amazon ec2 linux box using the elastic IP instead of the private IP?如何使用弹性 IP 而不是私有 IP 在亚马逊 ec2 linux 机器上制作 Apache?
【发布时间】:2012-04-25 14:12:37
【问题描述】:

我已将一个网站迁移到 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 OS)添加了一个命令,该命令在启动时使用 ec2-associate-address 将弹性 IP 与服务器相关联,并且这似乎有助于建立与另一个外部服务器的 MySQL 连接,但上述 API 没有运气。

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

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

【问题讨论】:

    标签: api amazon-ec2 centos


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。弹性 IP 根本没有出现在 ipconfig 中 - eth0 正在使用私有 IP,然后在 127.0.0.1 上只有 lo - 就是这样。
    • 很奇怪。您确定 MySQL 连接使用了弹性 IP 吗?当我为我的虚拟机切换到弹性 IP 时,我是通过 AWS Web GUI 完成的,所以我不知道您在使用虚拟机内的 CLI 执行此操作时是否需要额外的步骤。您的 VM 的 Web GUI 看起来是否正确?
    • 看起来正确,我确信 MySQL 使用了弹性 IP,因为我只授权从弹性 IP 访问数据库。但是,我在这里可能犯了一个简单的错误:我只检查了托管在 ec2 服务器上的域中的 apache 变量/php 全局变量。但是当我访问亚马逊云之外的站点时,弹性 IP 会正常显示。这意味着我的 API 连接无法正常工作的原因很可能是不同的。
    • 问题已解决 - 尽管供应商声称我的弹性 IP 已获得访问权限,但仍然被拒绝(最终使用 Lynx 来证明)。这解决了一切。万一其他人想知道 - Amazon ec2 服务器在 Amazon 云内部的 PHP 全局变量中显示内部 IP(可能仅在同一区域?),但弹性 IP - 如果已分配 - 在云外部时。
    猜你喜欢
    • 2012-08-19
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2017-03-23
    • 2016-01-29
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多