2012-03-26 142 views
18

我是EC2和web开发新手。目前我有一个Linux EC2实例正在运行,并且已经安装了Django。在我开始真正的项目之前,我正在创建一个测试项目,并尝试运行一个Django测试服务器。连接到EC2 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. 

为了测试它wroking我试图访问:ec2-###-##-##-##.compute-1.amazonaws.com:8000但我总是从我的浏览器中得到一个“无法连接”的消息。

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

+2

你现在解决了这个问题吗?我遇到同样的问题。 – Treper 2012-05-03 02:28:32

回答

16

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

+0

好吧,我添加了8000到UDP,TCP和ALL到ICMP'默认'作为源,但试图连接到端口8000仍然无法正常工作。这是否意味着Django可能无法运行,或者它仍然是亚马逊ec2服务器上的防火墙?非常感谢你的帮助! – 2012-03-28 03:06:09

+0

打开到同一台机器的第二个连接,并尝试telnet到端口80,“telnet localhost 80”,然后输入“GET /'并敲入几次。如果你无法连接,那么runserver工作不正常,如果可以的话,并且你从GET中获得HTML,那么它就在服务器和问题出现的地方。 – KayEss 2012-03-29 02:55:05

+0

我有一个“telnet:命令未找到”erorr:/ – 2012-03-29 04:26:01

0

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

+1

你能澄清“就像它出现在名单上”吗? – pjmorse 2012-09-18 01:31:47

35

使用与Ubuntu的EC-2情况下,我发现,指定0.0.0.0:8000工作:

$python manage.py runserver 0.0.0.0:8000 

当然8000也需要在安全组设置被打开TCP。

+1

我希望在5小时前看到此评论!!!谢了哥们! – 2016-08-16 02:02:24

+0

您还需要确保此端口尚未被使用。 – bozdoz 2016-10-19 23:11:59

+0

这是对这个问题的正确答案。谢谢 – 2017-05-01 05:50:59

8

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

2)赔率是,你看到你的AWS控制台中列出的IP,这是与您的实例关联的是公共域名(例如ec2 - ### - ## - ## - ##。compute-1.amazonaws.com或174.101.122.132)。 2.1)如果它是一个公共IP,那么你的实例无法知道分配给它的公共IP是什么,它只会知道它分配的本地IP。

2.2)要获得在Linux系统上,键入您的本地IP:

$ ifconfig 

再来看看eth0的数据,你会看到一个IP旁边格式xxx.xxx的“INET地址” .xxx.xxx(如10.10.12.135)这是你的本地IP

3)要成功RUNSERVER你可以做以下两种之一:

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

**方案二也很有效,Ernest Ezis在他的回答中提到。 编辑:从Django的书:“IP地址0.0.0.0告诉服务器监听任何网络接口上”

**我的公网IP的理论可能是错误的,因为我不知道怎么亚马逊分配IP。我会很高兴被纠正。

+0

非常感谢你,你拯救了我的一天。感谢分享.. – 2015-06-02 11:36:29

+0

谢谢!您的步骤#1“您需要确保将端口8000作为自定义TCP规则添加到入站端口的安全组列表中”是我所需要的。之后,python manage.py runserver 0.0.0.0:8000就像一个(py)魅力! – 2016-02-03 04:42:17

+0

如何做第一步? – 2016-08-12 19:37:46

1

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

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

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

+0

这在CENTOS7上适用于我。在使用firewall-cmd在防火墙上打开此端口之前,无法从ec2 - ### - ## - ## - ##。compute-1.amazonaws.com:8000访问测试页。尝试之后立即弹出存在。 – eculeus 2016-04-28 16:34:54

相关问题