फ्लास्क में रिमोट कनेक्शन की अनुमति कैसे दें?


30

सिस्टम के अंदर, वर्चुअल मशीन पर चल रहा है, मैं चल रहे सर्वर तक पहुंच सकता हूं 127.0.0.1:5000

यद्यपि vm का 'दूरस्थ' पता 192.168.56.101 है (पिंग और ssh काम ठीक है), मैं 192.168.50.101 and000 के साथ सर्वर को न तो वर्चुअल मशीन से और न ही स्थानीय से एक्सेस कर सकता हूं।

मुझे लगता है कि दूरस्थ कनेक्शन को रोकने के लिए कुछ है।

यहाँ / etc / नेटवर्क / इंटरफेस है:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw निष्क्रिय है।

मैं इस समस्या को कैसे हल करूं?

जवाबों:


48

सबसे पहले - सुनिश्चित करें कि आपका HTTP सर्वर 192.168.50.101:5000या तो (या हर जगह 0.0.0.0:5000) आउटपुट सुन रहा है:

netstat -tupln | grep ':5000'

यदि ऐसा नहीं है, तो फ्लास्क के प्रलेखन को लोकलहोस्ट के अलावा किसी अन्य पते पर बाँधने के लिए परामर्श करें ।

यदि यह है, तो iptables का उपयोग करके ट्रैफ़िक को अनुमति दें:

iptables -I INPUT -p tcp --dport 5000 -j ACCEPT

फ्लास्क के प्रलेखन से:

बाह्य रूप से दृश्यमान सर्वर यदि आप सर्वर चलाते हैं, तो आप देखेंगे कि सर्वर केवल आपके ही कंप्यूटर से सुलभ है, नेटवर्क में किसी अन्य से नहीं। यह डिफ़ॉल्ट है क्योंकि डिबगिंग मोड में एप्लिकेशन का उपयोगकर्ता आपके कंप्यूटर पर मनमाने ढंग से पायथन कोड निष्पादित कर सकता है।

यदि आप डिबग अक्षम हैं या अपने नेटवर्क के उपयोगकर्ताओं पर भरोसा करते हैं, तो आप run()इस तरह दिखने के लिए विधि की कॉल को बदलकर सर्वर को सार्वजनिक रूप से उपलब्ध करा सकते हैं :

app.run(host='0.0.0.0')

1) आउटपुट 127.0.0.1 .000 0.0.0.0:* लिस्टेन है। इसका मतलब यह है कि सर्वर अन्य tha localhosts के पते को नहीं सुनता है? 2) मैंने ufw को 5000 की अनुमति देने की कोशिश की, कोई परिणाम नहीं
इल्या स्मगिन

यही कारण है कि मैंने सभी पते पर सुनने के लिए इसे कॉन्फ़िगर करने के लिए फ्लास्क के डॉक्स को देखने का सुझाव दिया। क्या आपने इसे देखा है? अकेले फ़ायरवॉल के माध्यम से इसकी अनुमति देने से यह ठीक नहीं होगा।
मार्सिन कमिन्स्की

हां, धन्यवाद, मैं इसे प्राप्त करता हूं, पहले से ही देख रहा हूं। पहले से ही इस्तेमाल किया गया स्थानीयटुनेल (मुझे पता है कि यह बहुत अधिक है, लेकिन यह काम करता है)। बस समझने की कोशिश कर रहा है कि netstat का आउटपुट "127.0.0.1 .000 0.0.0.0:* लिस्टेन" का क्या मतलब है।
इल्या स्मगिन

आपको localtunnel की आवश्यकता नहीं है :) क्या netstat आउटपुट आपको दिखाता है कि आपका HTTP सर्वर केवल आपके स्थानीय मशीन से कनेक्शन स्वीकार कर रहा है। ऐसा लगता है कि आपको फ्लास्क के कॉन्फ़िगरेशन में SERVER_NAME चर को बदलने की आवश्यकता है।
मार्सिन कमिंसकी

2
प्रश्न को पसंदीदा बनाने और इस उत्तर को उभारने के लिए यहाँ एक खाता बनाया गया है!
हेफेस्टस

6

इसे करने का सबसे अच्छा तरीका है

flask run --host=0.0.0.0

4

मैं सिर्फ एक ही मुद्दा था। इसे हल करने के लिए, मैंने एप्लिकेशन चलाने का तरीका अपडेट किया:

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

होस्ट का उपयोग करना = 0.0.0.0 मुझे अपने स्थानीय नेटवर्क के माध्यम से अपने ऐप का उपयोग करने दें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.