2012-03-26 184 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

相關問題