HTTP 无法与具有自己域名的 EC2 实例一起工作

HTTP 无法与具有自己域名的 EC2 实例一起工作

我遇到了这个问题,我已经在 Amazon AWS 论坛上发布了这个问题。不幸的是,我还没有得到明确的答案,我希望你们能帮忙。以下是链接:http://developer.amazonwebservices.com/connect/thread.jspa?messageID=198238#198207

基本上,我不知道为什么在关联弹性 IP 地址并将其映射到我的一个域后,FTP 和 ping 工作正常,但 HTTP 却将 302 重定向到我在关联弹性 IP 地址之前的 Amazon AWS 主机名。

这是来自 AWS 论坛的问题:我有一个安装了 HTTP 和 FTP 的 EC2 实例。它们都正常工作。然后我将一个弹性 IP 地址关联到该实例。然后我将该 IP 地址映射到一个名称,该名称是我拥有的域的子域。我认为它是一个 A 名称(我个人没有进行映射)。现在 FTP 可以工作,而 HTTP 不工作。

弹性 IP 关联之前的 AWS 主机名:ec2-184-73-27-8.compute-1.amazonaws.com 关联之后的 AWS IP 地址和主机名:174.129.7.254 和 ec2-174-129-7-254.compute-1.amazonaws.com 使用 A 记录映射到 174.129.7.254 的域名为:demo.flashxml.net

FTP 工作意味着我可以连接到 174.129.7.254、ec2-174-129-7-254.compute-1.amazonaws.com 和 demo.flashxml.net。

HTTP 不起作用意味着对 174.129.7.254、ec2-174-129-7-254.compute-1.amazonaws.com 或 demo.flashxml.net 的 HTTP 请求返回 302 重定向到 ec2-184-73-27-8.compute-1.amazonaws.com

这是我的 VirtualHost 文件:

<VirtualHost *:80>
        DocumentRoot /home/ec2-user/public_html/wordpress

        ServerName demo.flashxml.net

        ErrorLog logs/ec2-user-error_log

        <Directory /home/ec2-user/public_html/wordpress>
                AllowOverride FileInfo
                Order Deny,Allow
                Allow from All
        </Directory>
</VirtualHost>

我终于弄清楚了问题出在哪里。事实上,我使用亚马逊提供的主机名在服务器上安装了 Wordpress。关联弹性 IP 并更新 DNS 记录后,服务器可以访问 - FTP 工作就是证明。通过 HTTP 访问时出现 302 重定向是由 Wordpress 的主机名设置引起的。

所以,从这一切中我学到的是,我应该首先设置我的 IP 和 DNS,然后再安装 Wordpress 或任何其他 Web 应用程序。

答案1

首先,重复发帖并不是一个好习惯,让人们到站外寻找您的问题只会让情况变得更糟。请考虑编辑您的问题,使其真正独立于此处,然后确保您在弄清楚后更新两个网站,告知任何进展和答案。

其次,这里确实没有足够的信息来找出你做错了什么。AWS 论坛上的建议很好。你似乎仍在使用弹性 IP 分配之前的 IP 和主机记录做一些事情。当你进行分配时,你的主机名和 IP 将会改变!但是你需要详细说明你的配置。你的 DNS 是什么样的?你试图连接到哪个域,它被“转发到”什么?我们谈论的是 ec2 主机名域还是你自己的自定义域?如果是前者,你只是使用了错误的地址。如果是后者,你的 DNS 记录输入不正确。它们应该是你的弹性 IP 主机名的 CNAME,以便返回正确的内部和外部地址。

答案2

可能您正在使用其中一项 Amazon 服务,该服务要求 DNS 记录为 CNAME 而不是 A。

最近我收到了一些关于针对 geodns 使用多个亚马逊存在问题的询问,客户说亚马逊服务规定使用 CNAME 而不是 A。

这是因为端点可能会发生变化,所以唯一安全的方法是使用引用亚马逊 A 记录的 CNAME 记录,亚马逊可能会动态更改该记录。

他们被明确告知,查找 IP 并在 A 中使用它不会起作用。

答案3

我遇到了同样的问题并找到了解决方案:

  1. 检查您是否可以从本地主机访问 http。curl http://localhost
  2. 查看安全组在 AWS EC2 上,确保您正在接受端口 80 上的流量。
  3. 最后但同样重要的一点是检查防火墙设置在您的 EC2 实例中。

答案4

我在新建的 EC2 中安装了一个 docker 容器,也遇到了同样的问题。我可以通过 curl 从 localhost 访问它,但不能从公共 DNS 访问。阅读 Igor S. 的回答后,我检查了防火墙设置,发现默认的 FW 设置只接受 SSH。

我认为当您使用快速设置而不是通常的设置向导时会发生这种情况,通常的设置向导会在实例启动之前询问您各种事情(包括 FW 设置)。

相关内容