2014-10-09 60 views
0

我試圖在遠程服務器上運行燒瓶應用程序,所以我可以從其他計算機訪問它。服務器有一個公共IP,我配置燒瓶在IP上運行。但是當我運行腳本時,我得到以下回溯燒瓶,不能分配請求的地址

注意:我已從回溯和我的代碼中刪除了公有IP。

* Running on **public ip** 
Traceback (most recent call last): 
    File "testServer.py", line 14, in <module> 
    app.run(host='62.60.19.189',port=5000) 
    File "/usr/lib/python2.6/site-packages/flask/app.py", line 772, in run 
    run_simple(host, port, self, **options) 
    File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 710, in run_simple 
    inner() 
    File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 692, in inner 
    passthrough_errors, ssl_context).serve_forever() 
    File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 486, in make_server 
    passthrough_errors, ssl_context) 
    File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 410, in __init__ 
    HTTPServer.__init__(self, (host, int(port)), handler) 
    File "/usr/lib64/python2.6/SocketServer.py", line 402, in __init__ 
    self.server_bind() 
    File "/usr/lib64/python2.6/BaseHTTPServer.py", line 108, in server_bind 
    SocketServer.TCPServer.server_bind(self) 
    File "/usr/lib64/python2.6/SocketServer.py", line 413, in server_bind 
    self.socket.bind(self.server_address) 
    File "<string>", line 1, in bind 
socket.error: [Errno 99] Cannot assign requested address 

這裏是我的代碼

import flask 

app = flask.Flask("My app") 

@app.route('/myroute', methods=['POST']) 
def foobar(): 
     print flask.request.form 
     return '<br>'.join('{0}: {1}'.format(*pair) for pair in flask.request.form.items()) 




if __name__ == '__main__': 
    app.run(host='public IP',port=5000) 
+1

該服務器*直接*配置爲在該IP地址上運行,或者您在路由器後面運行,* it *具有IP地址(例如,您的服務器具有私有IP地址,路由器使用NAT - 網絡地址轉換)? – 2014-10-09 14:22:19

+0

順便提一下,這是*不是* Flask獨有的問題。 – 2014-10-09 14:22:36

+0

不,我在連接到VPN後使用不同的IP連接到服務器,我在遠程服務器上運行python代碼,並獲得了一個公共IP來運行燒瓶。 – cyberbemon 2014-10-09 14:25:58

回答

4

您只能直接綁定到已配置服務器的IP地址;在運行網絡地址轉換(NAT)的路由器後面,您的內部IP地址將會不同。

要麼直接綁定到該內部IP地址,要麼使用'0.0.0.0'偵聽所有接口。您可能仍然需要配置路由器以將特定端口轉發到您的內部服務器。

+0

嘗試使用'0.0.0.0',但似乎返回'地址已在使用中'錯誤 – cyberbemon 2014-10-09 15:59:14

+1

@cyberbemon:這意味着已經有東西綁定到該端口。請參閱[查找使用Linux中某個端口的進程](http://superuser.com/q/42843)來確定綁定到端口的內容。 – 2014-10-09 16:05:06

+0

謝謝,我設法讓它運行在'0.0.0.0' – cyberbemon 2014-10-09 16:34:14

1

要套接字綁定到必須直接使用機器的接口上的IP。這似乎並非如此。

  • 如果你是一個NAT後面:使用端口轉發
  • 如果您使用的是VPN和服務器的VPN適配器並不總是起來,嘗試使用「0.0.0.0」作爲地址。注意:它會聽取全部接口可用。創建防火牆規則來阻止通過您不希望聽到的界面進行訪問。