2013-10-07 36 views
0

我有一個奇怪的問題測試我的燒瓶應用程序。 我把它歸納爲以下,讓這成爲「test.py」:werkzeug WSGI只能通過「localhost」到達

if __name__ == '__main__': 
    from flask import Flask 

    app = Flask(__name__) 
    @app.route('/hello') 
    def hello(): 
     return 'hello\n' 

    app.run(debug = True) 

所以我現在運行這個爲:

python test.py 
* Running on http://127.0.0.1:5000/ 
* Restarting with reloader 

現在另一個終端上我可以這樣做:

>> curl http://localhost:5000/hello 
hello 

然而,什麼行不通,是這樣的:

>> curl http://192.168.178.23:5000/hello 
curl: (7) couldn't connect to host 

其中ifconfig en1給出: [...] inet 192.168.178.23 [...]

本來我想在本地網絡內的另一臺機器測試我的實際應用程序 - 這是我碰到這個問題怎麼來的。

我也試過用我的瀏覽器,wget和其他「客戶端」。

如果我用python builtin BaseHTTPServer處理器代替所有的Flask/Werkzeug東西,事情很好 - 這讓我斷定在下面的燒瓶或werkzeug會出現一些奇怪的問題,而不是例如。與我的網絡配置。

我對所有低級io都不太熟悉,所以不知道從哪裏開始尋找問題的根源。

道歉提前,如果我失去了一些愚蠢的事在這裏...

回答

6

默認情況下,瓶只聽你的環回接口,調試接口(允許的任意Python代碼執行)暴露於其他機器是一個嚴重的安全風險。若要覆蓋此設置,請嘗試:

app.run(host='0.0.0.0', debug=True) 

但是,請確保您的系統對不受信任的機器進行了適當的屏蔽。

+0

感謝您的快速回復 - 這似乎是一個竅門。當你說「調試模式」時,這隻適用於通過'app.run'運行應用程序?!因爲'debug = False'似乎沒有改變。我似乎記得在本地網絡中的其他機器上訪問了在debian機器上以這種方式運行的flask-apps。我可能記得錯誤,雖然... – sebastian

+1

我認爲你是對的,調試的東西是從默認主機分開。 – kindall