Właśnie pomyślnie zainstalowałem Redis, korzystając z instrukcji zawartych w przewodniku Szybki start na http://redis.io/topics/quickstart na moim serwerze Ubuntu 10.10. Uruchamiam usługę jako dameon (więc może być uruchamiana przez init.d)
Serwer jest częścią klastra Rackspace z wewnętrznymi i zewnętrznymi adresami IP. Host działa na porcie 6379 (standard dla Redis)
Dodałem wiersz w iptables, aby umożliwić połączenia przychodzące z portu 6379, jak pokazano poniżej:
ACCEPT tcp -- anywhere anywhere tcp dpt:6379
W moim kodzie PHP na innym serwerze próbuję połączyć się z nowym serwerem Redis tutaj:
$this->load->helper("iredis");
$hostname = "IP ADDRESS HERE";
$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Kiedy to zrobię - zawsze odmawiam połączenia. W moim pliku redis.conf mam zakomentowane lokalne polecenie bind, więc powinno nasłuchiwać więcej niż adres IP localhost. Mogę połączyć się z bazą danych na komputerze lokalnym, ale nie na innym serwerze. Próbowałem zewnętrznych i wewnętrznych adresów IP bez powodzenia.
Jakieś sugestie, jak to zadziała?
źródło
redis-cli -h hostname
Odpowiedzi:
Najpierw sprawdzę, czy nasłuchuje adresów IP, których oczekujesz:
W zależności od tego, jak uruchomiłeś / zatrzymałeś, być może nie uruchomiłeś ponownie instancji, tak jak myślałeś, że to zrobiłeś. Netstat powie ci, czy nasłuchuje tam, gdzie myślisz. Jeśli nie, uruchom go ponownie i upewnij się, że uruchamia się ponownie. Jeśli uruchomi się ponownie i nadal nie nasłuchuje w oczekiwanym miejscu, sprawdź plik konfiguracyjny, aby się upewnić.
Po ustaleniu, że nasłuchuje tam, gdzie tego oczekujesz, ze zdalnego węzła, który powinien mieć dostęp, spróbuj:
Możesz również spróbować tego z lokalnego hosta, ale użyj adresu IP, którego oczekujesz, zamiast nazwy hosta lub lokalnego hosta. Powinieneś zobaczyć to PONG w odpowiedzi w obu przypadkach.
Jeśli nie, to Twoja zapora (e) blokuje Cię. Mogą to być lokalne tabele IPTables lub być może zapora ogniowa między węzłami. Możesz dodać instrukcję rejestrowania do konfiguracji IPtables, aby rejestrować połączenia ponad 6379, aby zobaczyć, co się dzieje. Również próba ponownego wysłania polecenia ping z lokalnego i nielokalnego do tego samego adresu IP powinna być przykładowa. Jeśli odpowiada lokalnie, ale nie zdalnie, skłaniałbym się ku interweniującej zaporze ogniowej w zależności od złożoności reguł tabel adresów IP w węźle.
źródło
Utknąłem z tym samym problemem, a poprzednia odpowiedź nie pomogła mi (choć dobrze napisana).
Rozwiązanie jest tutaj: sprawdź swoje
/etc/redis/redis.conf
i pamiętaj, aby zmienić domyślnedo
Następnie uruchom ponownie usługę (
service redis-server restart
)Możesz teraz sprawdzić, czy redis nasłuchuje na interfejsie nielokalnym z
(zastąp 192.168.xx swoim adresem IP)
Ważna uwaga: jak stwierdziło kilku użytkowników, ustawienie tej opcji na serwerze, który jest wystawiony na działanie Internetu , nie jest bezpieczne . Powinieneś mieć pewność, że Twoja redis jest chroniona wszelkimi środkami, które odpowiadają Twoim potrzebom.
źródło
bind 0, ::
,bind 0, [::]
,bind 0\nbind6 ::
(gdzie \ n jest znakiem nowej linii) ibind 0 [::]
ale jedyną rzeczą, która działa nie mabind
linii w config w ogóle. Domyślnie nasłuchuje na 0 (lub 0.0.0.0/0) i [::], więc nie ma problemu, ale chciałbym znać właściwą metodę, gdybym jej kiedyś potrzebował. Nie wydaje się być nigdzie udokumentowany.iptables
) W celu blokowania nieautoryzowanych klientów.Oprócz doskonałej odpowiedzi udzielonej przez Orabîg:
I rozwiązany ten problem, usuwając
bind
całkowicie sekcję i ustawianiaprotected-mode
sięno
.Nigdy nie używaj tej metody na publicznie dostępnych serwerach.
źródło
Orabig ma rację.
Możesz powiązać 10.0.2.15 w Ubuntu (VirtualBox), a następnie wykonać przekierowanie portu z hosta do gościa Ubuntu.
w /etc/redis/redis.conf
następnie uruchom ponownie redis:
To zadziała!
źródło
Przez kilka dni zmagałem się ze zdalnym połączeniem z Redis. Wreszcie się udało. Oto pełna lista kontrolna, którą stworzyłem, aby uzyskać połączenie. Niektóre rozwiązania podano w odpowiedziach powyżej. Chciałem jednak, aby moją odpowiedzią była nano-wiki na ten temat :) Dodałem też kilka przydatnych linków.
Jeśli redis działa lokalnie:
Jeśli hasło nie jest ustawione
Zobacz
/etc/redis/redis.conf
konfigurację (jest to domyślna lokalizacja dla Ubuntu 18.04, możesz ją mieć w innej lokalizacji):Jeśli tryb chroniony jest ustawiony na „nie” w konfiguracji:
jeśli powiązanie IP jest otwarte dla dostępu z Internetu w konfiguracji:
Jeśli zapora systemu Linux zezwala na połączenia
(tutaj dla Ubuntu 18.04) Sprawdź, czy przychodzący ruch internetowy przechodzi do portu
6379
(domyślny port Redis)Uruchom ponownie usługę Redis
Nie zapomnij ponownie uruchomić usługi Redis, aby zmiany zaczęły obowiązywać i zobacz, czy działa:
Sprawdź, czy działa jako serwer zdalny
z linii poleceń użyj
redis-cli
tak, jakby serwer Redis był na serwerze zdalnym:Jeśli możesz wysłać ping-PONG do serwera Redis za pośrednictwem serwera internetowego podłączonego jako serwer zdalny, wtedy zdalne połączenie Redis działa.
Ostrzeżenie bezpieczeństwa
Wszystko to sprawia, że Twoje dane Redis są całkowicie otwarte dla każdego z internetu.
Aby w zasadzie zabezpieczyć użycie
requirepass
iprotected-mode yes
ustawienia Redis w konfiguracji Redis (patrz powyżej) oraz zablokować niebezpieczne polecenia Redis (zobacz łącze powyżej), aby uzyskać dokładniejsze informacje, zobacz ten artykuł i sekcję dotyczącą zabezpieczeń witryny Redis ).Przydatne linki
Kilka linków do pomocy Jak zainstalować i zabezpieczyć Redis na Ubuntu 18.04 i jak skonfigurować zaporę sieciową Ubuntu 18.04 .
Mam nadzieję, że to pomoże.
źródło
jeśli sam pobrałeś redis (nie apt-get install redis-server), a następnie edytowałeś redis.conf zgodnie z powyższymi sugestiami, upewnij się, że zaczynasz redis z taką konfiguracją:
./src/redis-server redis.conf
źródło
Ustawienie tcp-keepalive na 60 (było ustawione na 0) w konfiguracji serwera redis pomogło mi rozwiązać ten problem.
źródło