【问题标题】:Connecting to EC2 Django development Server连接到 EC2 Django 开发服务器
【发布时间】:2012-03-26 01:32:16
【问题描述】:

我是 EC2 和 Web 开发的新手。目前我有一个 Linux EC2 实例正在运行,并且已经安装了 Django。在开始我的真实项目并尝试运行 Django 测试服务器之前,我正在创建一个测试项目。

这是我在 shell 中的输出:

python manage.py runserver ec2-###-##-##-##.compute-1.amazonaws.com:8000
Validating models...

0 errors found
Django version 1.3, using settings 'testsite.settings'
Development server is running at http://ec2-###-##-##-##.compute-1.amazonaws.com:8000/
Quit the server with CONTROL-C.

为了测试它是否正常,我尝试访问:ec2-###-##-##-##.compute-1.amazonaws.com:8000,但我总是从浏览器收到“无法连接”消息。

每当我在我的计算机上执行此操作时,我都会成功访问 DJango 开发主页,地址为 127.0.0.1:8000。当我在我的 EC2 实例而不是我自己的笔记本电脑上执行此操作时,有人可以帮我找出我做错了什么/可能会丢失吗?

【问题讨论】:

标签: django amazon-ec2


【解决方案1】:

在 Ubuntu 中使用 ec-2 实例,我发现指定 0.0.0.0:8000 有效:

$python manage.py runserver 0.0.0.0:8000  

当然需要在您的安全组设置中为 TCP 打开 8000。

【讨论】:

  • 您还需要确保该端口尚未被使用。
  • 这是对这个问题的正确回答。谢谢
  • 如何在安全组中为 TCP 打开 8000。我将出站流量设置为所有流量。但它还没有工作
【解决方案2】:

您可能没有在防火墙上打开端口 8000。检查您的实例正在运行哪个安全组(可能是“默认”)并检查它正在运行的规则。你可能会发现 8000 端口没有列出来。

【讨论】:

  • 好的,我将 8000 添加到 UDP、TCP 和 ALL 到 ICMP,并使用“默认”作为源,但尝试连接到端口 8000 仍然无法正常工作。这是否意味着 Django 可能无法正常工作,或者它仍然是 Amazon ec2 服务器上的防火墙?非常感谢您的帮助!
  • 打开到同一台机器的第二个连接并尝试远程登录到端口 80,telnet localhost 80,然后键入GET /,然后按回车键几次。如果您无法连接,则 runserver 无法正常工作,如果可以并且您从GET 获取 HTML,那么它在服务器和您所在的位置之间是问题所在。
  • 当然应该是上面的8000端口。您可以使用sudo apt-get install telnet 之类的方式获取 telnet(如果您使用的是 debian/ubuntu 系统)。
【解决方案3】:

1) 您需要确保将端口 8000 作为自定义 TCP 规则添加到入站端口的安全组列表中

2) 您在 AWS 控制台上看到的与您的实例关联的 IP 很可能是 公共 IP 或公共域名(即 ec2-###-# #-##-##.compute-1.amazonaws.com 或 174.101.122.132) 亚马逊分配。

2.1) 如果是公共 IP,那么您的实例无法知道分配给它的公共 IP 是什么,而只会知道分配给它的本地 IP。

2.2) 要在 Linux 系统上获取本地 IP,请键入:

    $ ifconfig

然后查看 eth0 数据,您会在“inet addr”旁边看到一个格式为 xxx.xxx.xxx.xxx 的 IP(例如 10.10.12.135)这是您的本地 IP

3) 要成功运行服务器,您可以执行以下两种操作之一:

    $ python manage.py runserver <LOCAL IP>:8000
    or
    $ python manage.py runserver 0.0.0.0:8000

** 正如 Ernest Ezis 在他的回答中提到的那样,选项二也很有效。 编辑:来自 The Django Book:“IP 地址 0.0.0.0 告诉服务器监听任何网络接口”

** 我的公共 IP 理论可能是错误的,因为我不确定亚马逊如何分配 IP。很高兴得到纠正。

【讨论】:

  • 谢谢!您的第 1 步“您需要确保将端口 8000 作为自定义 TCP 规则添加到您的入站端口的安全组列表中”是我所需要的。之后,python manage.py runserver 0.0.0.0:8000 就像一个(py)魅力!
  • 第一步怎么做?
  • @vijayshanker 登录您的 EC2 控制台 -> 实例 -> 从列表中选择实例 -> 从底部菜单中选择“安全性” -> 在绑定规则中 -> 编辑 -> 添加规则
【解决方案4】:

我遇到了同样的问题。但我在 EC2 上运行 RHEL。除了将规则添加到安全组之外,我还必须手动将端口添加到 firewalld。

firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --reload

这对我有用! (虽然不知道为什么我必须这样做)

【讨论】:

  • 这在 CENTOS7 上对我有用。在使用 firewall-cmd 在防火墙上打开此端口之前,无法从 ec2-###-##-##-##.compute-1.amazonaws.com:8000 访问测试页面。尝试后立即出现。
【解决方案5】:

是的,如果您使用快速启动 EC2 选项,您应该添加新的 HTTP 规则(就像它出现在列表中一样)来运行开发服务器。

【讨论】:

  • 你能澄清一下“就像它出现在列表上一样”吗?
  • @pjmorse,在该实例的安全组中添加一条规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多