रेडिस - रिमोट सर्वर से कनेक्ट करें


122

मैंने अभी-अभी रेडीस को मेरे उबटन 10.10 सर्वर पर http://redis.io/topics/quickstart पर क्विक स्टार्ट गाइड के निर्देशों का उपयोग करते हुए सफलतापूर्वक स्थापित किया है। मैं dameon के रूप में सेवा चला रहा हूं (इसलिए इसे init.d द्वारा चलाया जा सकता है)

सर्वर आंतरिक और बाहरी आईपी के साथ रैकस्पेस क्लस्टर का हिस्सा है। होस्ट 6379 पोर्ट पर चल रहा है (रेडिस के लिए मानक)

मैंने पोर्ट 6379 से आने वाले कनेक्शन की अनुमति के लिए iptables में एक पंक्ति जोड़ी है जैसा कि नीचे दिखाया गया है:

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

किसी अन्य सर्वर पर मेरे PHP कोड में, मैं यहां नए Redis सर्वर से कनेक्ट करने का प्रयास कर रहा हूं:

$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));

एक बार जब मैं ऐसा करता हूं - मुझे हमेशा कनेक्शन से इनकार कर दिया जाता है। मेरी redis.conf फ़ाइल में, मेरे पास स्थानीय बाइंड कमांड है जिस पर टिप्पणी की गई है, इसलिए इसे लोकलहोस्ट आईपी से अधिक सुनना चाहिए। मैं स्थानीय मशीन पर डेटाबेस से कनेक्ट कर सकता हूं बस दूसरे सर्वर पर नहीं। मैंने बाहरी और आंतरिक IP को बिना किसी भाग्य के आज़माया है।

यह काम करने के लिए कोई सुझाव?


क्या आप Redis कमांड लाइन टूल का उपयोग करके कनेक्ट करने में सक्षम हैं? redis-cli -h hostname
jlundqvist 16

सर्वर फॉल्ट में कनेक्शन अस्वीकृत के बारे में एक विहित प्रश्न है ।
राडवल्द

जवाबों:


129

पहले मैं यह सत्यापित करने के लिए जाँच करूंगा कि यह आपके द्वारा अपेक्षित आईपी पर सुन रहा है:

netstat -nlpt | grep 6379

इस बात पर निर्भर करता है कि आप कैसे शुरू करते / रोकते हैं, हो सकता है कि आपने वास्तव में उस उदाहरण को दोबारा शुरू न किया हो, जब आपको लगा था कि आपके पास है। नेटस्टैट आपको बताएगा कि क्या वह सुन रहा है जहां आप सोचते हैं कि यह है। यदि नहीं, तो इसे पुनरारंभ करें और सुनिश्चित करें कि यह पुनरारंभ हो। यदि यह पुनरारंभ होता है और अभी भी नहीं सुन रहा है जहां आप उम्मीद करते हैं, तो सुनिश्चित करने के लिए अपनी कॉन्फ़िगरेशन फ़ाइल की जांच करें।

यह स्थापित करने के बाद आप सुन रहे हैं कि आप इसकी उम्मीद कहाँ से कर रहे हैं, एक दूरस्थ नोड से जिसे एक्सेस करने की कोशिश करनी चाहिए:

redis-cli -h REMOTE.HOST ping

आप यह भी कोशिश कर सकते हैं कि स्थानीय होस्ट से लेकिन आईपी का उपयोग करें आप यह उम्मीद करते हैं कि वह होस्टनाम या लोकलहोस्ट के बजाय सुन रहा हो। आपको इसे दोनों मामलों में जवाब में पोंग देखना चाहिए।

यदि नहीं, तो आपका फ़ायरवॉल (s) आपको रोक रहा है। यह या तो स्थानीय IPTables होगा या संभवतः नोड्स के बीच में एक फ़ायरवॉल होगा। आप क्या हो रहा है यह देखने के लिए 6379 से अधिक कनेक्शन लॉग करने के लिए अपने IPtables कॉन्फ़िगरेशन में एक लॉगिंग स्टेटमेंट जोड़ सकते हैं। इसके अलावा, वह एक ही आईपी के लिए स्थानीय और गैर-स्थानीय से पिंग की कोशिश कर सकता है। यदि यह स्थानीय रूप से प्रतिक्रिया करता है, लेकिन दूरस्थ रूप से नहीं, तो मैं आपके ऑन-नोड IP टेबल्स नियमों की जटिलता के आधार पर एक हस्तक्षेप फ़ायरवॉल की ओर झुकूंगा।


16
एसओ, स्पष्ट होने के लिए, आप पोस्ट की गई समस्या के उत्तर को अस्वीकार कर रहे हैं क्योंकि आपके पास संबंधित (लेकिन स्पष्ट रूप से समान नहीं) समस्या का समाधान नहीं है? जब तक मैं आपके समाधान को पोस्ट करने से सहमत हूं, एक सही उत्तर को अस्वीकार कर देता है क्योंकि आपकी समस्या अलग थी, ऐसा करना उचित नहीं लगता है। उस ने कहा, आपका समाधान प्रश्न के लिए एक अच्छा विकल्प नहीं है क्योंकि ओपी के पास कई आईपी हैं और हो सकता है कि वे सभी को सुनना न चाहें, और ओपी ने विशेष रूप से प्रश्न में कॉन्फ़िगर फ़ाइल में बाइंड अनुभाग को संदर्भित किया। इस प्रकार आपका समाधान पूछे गए प्रश्न को संबोधित नहीं करता है।
रियल बिल

2
खैर, मैंने प्रश्न को फिर से पढ़ा, और यह मेरे लिए इतना स्पष्ट नहीं था कि ओपी ने इस 'बाइंड' लाइन के लिए सही मान सेट किया। इसके अलावा, मुझे यकीन नहीं है कि कोई भी फ़ायरवॉल उसके मामले में शामिल है। वैसे भी, मैं अपना -1 निकाल सकता हूं अगर आपको लगता है कि यह असभ्य है। मैंने अभी-अभी पाया कि आपका उत्तर पूरी तरह से बंद विषय था, और यह बहुत ही सामान्य मुद्दे के साथ आने वाले अधिकांश उपयोगकर्ताओं के लिए बहुत उपयोगी नहीं होगा ... (बाइंड डिफ़ॉल्ट पैरामीटर)
Orabîg

1
ओपी ने कहा कि वह स्थानीय बाइंड नियम से टिप्पणी करता है, जो रेडिस को सिस्टम के सभी पतों पर बाध्य करने के लिए कहता है। मैं -1 असभ्य को अनुचित नहीं कहूंगा। ओपी ने विशेष रूप से कहा कि उसके पास जगह-जगह पर IPtables नियम हैं, इसलिए यह स्पष्ट है कि पूछे गए प्रश्न में जगह में फ़ायरवॉल नियम हैं। फ़ायरवॉल की निर्दिष्ट उपस्थिति और कॉन्फ़िगरेशन में स्थानीय बाइंड को हटाने को देखते हुए, आपका उत्तर पूछे गए प्रश्न के लिए सही या प्रासंगिक नहीं है।
रियल बिल

हाँ, आप सही हैं, क्षमा करें। मैं एक देशी अंग्रेजी नहीं हूं, और "टिप्पणी बाहर" क्रिया की गलत व्याख्या की ... मुझे लगा कि ओपी ने टिप्पणी को हटा दिया है। (दुर्भाग्य से, मैं अपना -1 नहीं निकाल सकता, जब तक आप अपना पोस्ट संपादित नहीं करते)
Orabung

कोई चिंता नहीं, ऐसा होता है। मैंने इसे चलाने के संबंध में कुछ स्पष्टीकरण दिया है, जहाँ आप इसे चाहते हैं। आशा है कि भविष्य के पाठकों के लिए इसे स्पष्ट करने में मदद मिलेगी।
असली बिल

328

मैं एक ही मुद्दे के साथ फंस गया हूं, और पूर्ववर्ती उत्तर ने मेरी मदद नहीं की (यद्यपि अच्छी तरह से लिखा गया)।

समाधान यहां है: अपना चेक करें /etc/redis/redis.conf, और डिफ़ॉल्ट को बदलना सुनिश्चित करें

bind 127.0.0.1

सेवा

bind 0.0.0.0

फिर अपनी सेवा को पुनः आरंभ करें ( service redis-server restart)

फिर आप देख सकते हैं कि रेडिस गैर-स्थानीय इंटरफ़ेस पर सुन रहा है

redis-cli -h 192.168.x.x ping

(अपने आईपी एड्रेस से 192.168.xx बदलें)

महत्वपूर्ण नोट: जैसा कि कई उपयोगकर्ताओं ने कहा, यह एक सर्वर पर इसे सेट करना सुरक्षित नहीं है जो इंटरनेट के संपर्क में है। आपको निश्चित होना चाहिए कि आप किसी भी तरह से रेडिस से सुरक्षित हैं जो आपकी आवश्यकताओं के अनुरूप है।


1
यहाँ पर, आपको पहले फ़ायरवॉल सेटिंग्स या नेटवर्क समस्याओं के बारे में सोचने से पहले Redis सर्वर से दूरस्थ कनेक्शन की अनुमति देनी चाहिए। धन्यवाद Orabig
securecurve

यह स्पष्ट सही उत्तर है। ऊपर एक बहुत तकनीकी sysadmin "अंधेरे-कला" मुंबो जंबो है ... लेकिन यह बिल्कुल भी उपयोगी नहीं है :)
हेनले चिउ

7
यह समस्या ओपी जैसी नहीं है। ओपी ने विशेष रूप से कहा कि उन्होंने पहले से ही विन्यास फाइल में बदलाव जरूरी कर दिया है। चूंकि ओपी ने विन्यास फाइल में परिवर्तन किया और आपने किया। नहीं, वे दो अलग-अलग मुद्दे हैं। दिए गए जवाब ने प्रदान की गई समस्या को संबोधित किया। यह सभी समस्याओं का समाधान नहीं था। बस एक ने पूछा। यह किसी भी चीज़ को स्वीकार करने के बारे में गलत नहीं है, यह आपकी समस्या को अलग करने के बारे में है। यह ऐसा है जैसे कोई कह रहा है कि उनकी कार शुरू नहीं होगी, लेकिन उनके पास इसमें गैस है, और आप उन्हें बता रहे हैं कि उन्हें गैस की जरूरत है।
असली बिल

1
क्या आप यह भी जानेंगे कि IPv4 और IPv6 दोहरे-स्टैक को कैसे निर्दिष्ट करें? मैं निम्नलिखित की कोशिश की: bind 0, ::, bind 0, [::], bind 0\nbind6 ::और (जहां \ N एक नई पंक्ति है) bind 0 [::]लेकिन केवल बात यह है कि काम करता है एक होने नहीं है bindसब पर config में लाइन। यह 0 (या 0.0.0.0/0) और [::] पर सुनने में चूक करता है, इसलिए कोई समस्या नहीं है, लेकिन मैं उचित विधि जानना चाहूंगा कि मुझे एक बार इसकी आवश्यकता होनी चाहिए। यह कहीं भी प्रलेखित नहीं लगता है।
ल्यूक

7
यह जवाब क्या करता है यह आपके Redis सर्वर को दुनिया के लिए सुलभ बनाता है। यह एक बड़ा सुरक्षा जोखिम है। यदि आप ऐसा करते हैं, तो सुनिश्चित करें कि आपने अपने Redis सर्वर को अन्य तरीकों से लॉक किया है, जैसे Redis में AUTH पासवर्ड जोड़ना और iptablesअनधिकृत क्लाइंट्स को ब्लॉक करने के लिए अपने फ़ायरवॉल (जैसे ) को कॉन्फ़िगर करना ।
sffc

14

Orabîg द्वारा दिए गए उत्कृष्ट उत्तर के अलावा:

मैंने इस मुद्दे को bindपूरी तरह से अनुभाग को हटाकर और पर सेट करके हल protected-modeकिया no

#bind 127.0.0.1
protected-mode no

सार्वजनिक रूप से उजागर सर्वर पर इस विधि का उपयोग कभी न करें।


1
सुरक्षित विधि का उपयोग करने वाले किसी के लिए: कृपया अपने Redis Server को सुरक्षित रखें !! या आप अपनी सभी फाइलें खो देंगे :( मेरे सर्वर से छेड़छाड़ की गई है क्योंकि मैं Redis Server को सुरक्षित नहीं कर रहा हूं। हमलावर चाहता है कि मैं कुछ राशि का भुगतान करूं
मोन्किमो

4

Orabig सही है।

आप उबंटू ( वर्चुअलबॉक्स) में 10.0.2.15 बाँध सकते हैं और फिर मेजबान से उबंटू में पोर्ट फॉरवर्डिंग कर सकते हैं।

in /etc/redis/redis.conf

bind 10.0.2.15

फिर, लाल रंग को फिर से शुरू करें:

sudo systemctl restart redis

यह काम करेगा!


4

मैं कुछ दिनों से रेडिस के रिमोट कनेक्शन से जूझ रहा था। अंत में मैंने इसे बनाया। यहाँ पूरी जाँच सूची है जिसे मैंने जुड़ा होने के लिए अनुसरण करने के लिए एक साथ रखा है। कुछ समाधान ऊपर दिए गए उत्तरों में दिए गए हैं। फिर भी मैं चाहता था कि मेरा उत्तर इस विषय पर नैनो-विकी हो :) मैंने कुछ उपयोगी लिंक भी जोड़े।

यदि स्थानीय रूप से रेडिस काम करता है:

$ redis-cli
127.0.0.1:6379>ping
PONG
127.0.0.1:6379>

अगर पासवर्ड सेट नहीं है

/etc/redis/redis.confकॉन्फ़िगरेशन देखें (यह Ubuntu 18.04 के लिए डिफ़ॉल्ट लोकेन है, आपके पास यह अलग स्थान पर हो सकता है):

# The following line should be commented
# requirepass <some pass if any>

यदि संरक्षित मोड विन्यास में 'नहीं' पर सेट है:

# The following line should be uncommented
protected-mode no

अगर IP बाइंडिंग इंटरनेट से एक्सेस के लिए कॉन्फिग में खुला है:

# The following line should be commented
# bind 127.0.0.1 ::1

यदि लिनक्स फ़ायरवॉल कनेक्शन की अनुमति देता है

(यहां उबंटू 18.04 के लिए) यह जांचें कि आने वाले इंटरनेट ट्रैफ़िक को पोर्ट पर जाने की अनुमति देता है 6379(रेडिस डिफ़ॉल्ट पोर्ट)

# To check if it the port is open
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
6379/tcp                   ALLOW       Anywhere
6379/tcp (v6)              ALLOW       Anywhere (v6)
...

# To open the port
$ sudo ufw allow 6379/tcp

Redis सेवा को पुनरारंभ करें

परिवर्तनों को प्रभावी करने और देखने के लिए Redis सेवा को फिर से शुरू करना न भूलें:

$ sudo systemctl restart redis.service
$ sudo systemctl status redis

जांचें कि क्या यह रिमोट सर्वर के रूप में काम करता है

अपने कमांड लाइन के उपयोग से redis-cliजैसे कि रेडिस सर्वर रिमोट सर्वर पर थे:

$ redis-cli -h <your-server-ip>
<your-server-ip>:6379> ping
PONG
<your-server-ip>:6379> exit
$

यदि आप अपने Redis सर्वर को अपने इंटरनेट सर्वर के माध्यम से पिंग-पोंग कर सकते हैं जो कि दूरस्थ Redis कनेक्शन के काम की तुलना में एक दूरस्थ सर्वर के रूप में जुड़ा हुआ है।

सुरक्षा चेतावनी

उपरोक्त सभी आपके रेडिस डेटा को इंटरनेट से किसी के लिए पूरी तरह से खुला बनाता है।

Redis config (ऊपर देखें) में मूल रूप से Redis उपयोग requirepassऔर protected-mode yesसेटिंग्स को सुरक्षित करने के लिए और खतरनाक Redis कमांड को ब्लॉक करें (ऊपर लिंक देखें), इस समझ को गहराई से देखने के लिए और Redis साइट सुरक्षा अनुभाग देखें।

उपयोगी कड़ियाँ

Ubuntu 18.04 पर Redis को स्थापित और सुरक्षित करने में मदद करने के लिए कुछ लिंक और Ubuntu 18.04 फ़ायरवॉल को कैसे सेटअप करें

आशा करता हूँ की ये काम करेगा।


2
  • यदि आपने अपने आप को रेडिस डाउनलोड किया है (एप्ट-गेट इंस्‍टॉल रेडिस-सर्वर नहीं है) और फिर ऊपर दिए गए सुझावों के साथ redis.conf को एडिट किया है, तो सुनिश्चित करें कि आपकी शुरुआत इस तरह से कॉन्फिग के साथ रेडिस करें:./src/redis-server redis.conf

    • यह भी ध्यान दें कि मैं वर्चुअल बॉक्स सेटिंग के स्क्रीनशॉट को शामिल कर रहा हूं, यदि आप विंडोज़ पर हैं और वर्चुअलबॉक्स vm से कनेक्ट हो रहे हैं।

यहाँ छवि विवरण दर्ज करें


0

Tcp-keepalive को 60 (यह 0 पर सेट किया गया था) को सर्वर के रेडिस कॉन्फ़िगरेशन में सेट करने से मुझे इस समस्या को हल करने में मदद मिली।

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