2013-07-23 199 views
3

我有一個非常簡單的Flask應用程序,我在Amazon EC2節點上託管,並且出於任何原因我無法在外部看到它。該瓶的應用程序是在這裏Flask web應用程序未響應EC2上的外部請求

from flask import Flask 

app = Flask(__name__) 
app.config['DEBUG'] = False 

@app.route('/') 
def hello_world(): 
    return 'Hello World!' 

@app.route('/p1') 
def p1(): 
    return "P1!!!" 

if __name__ == '__main__': 
    app.run(host='0.0.0.0') 

當我運行它看起來像服務器腳本運行良好,所以在我的瀏覽器(在不同的計算機上)我把以下內容:5000(IP地址我決絕的AWS)。有趣的是,它似乎掛起,並最終產生一個錯誤。我的猜測是我錯過了AWS中的一些配置,但我不知道它是什麼。任何幫助將不勝感激

編輯我試着在我的本地機器上部署應用程序。當我嘗試使用localhost:5000從瀏覽器訪問它時,它可以正常工作。當我和我的IP地址替換本地主機,它不能

+0

你能顯示出你正在嘗試的確切的URL嗎? – codegeek

+0

當然,看我更新的問題 – sedavidw

+0

不知道我是否關注你。如果你只是在本地機器上運行它,那麼只需使用127.0.0.1:5000(本地主機)。要將它部署在EC2上,您需要使用像Apache等實際的Web服務器。您是否閱讀過燒瓶的部署文檔? http://flask.pocoo.org/docs/quickstart/#deploying-to-a-web-server – codegeek

回答

3

之所以能夠最終回答我的問題,無論是真的

我在AWS上遇到的問題是,我對於EC2入站是不允許​​通過訪問我需要的端口。

當我想我在工作的本地機器上運行它,防火牆的設置更改本地主機(我的IP)的地址,所以這就是爲什麼我不能使用本地主機的外部訪問它:5000

+5

好的,那麼爲了使它在EC2上運行,你需要改變什麼? – FutureNerd

+1

解決方案是什麼? –

+1

真的有兩個問題和兩個解決方案。在AWS EC2節點上,我必須確保允許訪問正確的入站端口。我不得不與工作中的IT部門合作,以便在我的IP地址在網絡上運行時在外部可見 – sedavidw

-1

發現這個問題同時尋找相同問題的解決方案。

編輯run.py以使瓶響應來自非本地主機的請求。此示例可以響應來自任何地方的請求。良好的安全策略會使用更嚴格的東西。

app.run(主機= '0.0.0.0')

在AWS控制面板去EC2

:選擇實例。

瀏覽器應該指出,從「公共DNS(IPv4)的」 地址(從IPv4公網IP的IP#也可能有用)

查找「安全組」:右鍵打開安全在新的頁面上組。

檢查入站規則。

默認瓶綁定到端口5000的附加規則允許端口5000

傳入TCP流量,而良好的安全協議應該限制端口開着數量,允許連接的IP的範圍,它可能是更容易允許「任何地方」連接「所有TCP」。

NB:檢查默認端口已經在燒瓶配置文件run.py

即被改變:線之下從默認5000更改端口〜3000 app.run(調試=真,端口= 3000)

還可以通過向服務器ssh'ing並使用lynx文本瀏覽器的本地實例驗證端口是否響應來檢查flask實例是否在本地工作。即

lynx localhost:5000