Ich habe Redis gerade erfolgreich installiert, indem ich die Anweisungen in der Kurzanleitung unter http://redis.io/topics/quickstart auf meinem Ubuntu 10.10-Server verwendet habe. Ich führe den Dienst als Dameon aus (damit er von init.d ausgeführt werden kann).
Der Server ist Teil des Rackspace-Clusters mit internen und externen IPs. Der Host läuft auf Port 6379 (Standard für Redis)
Ich habe eine Zeile in den iptables hinzugefügt, um eingehende Verbindungen von Port 6379 zuzulassen, wie unten gezeigt:
ACCEPT tcp -- anywhere anywhere tcp dpt:6379
In meinem PHP-Code auf einem anderen Server versuche ich hier, eine Verbindung zum neuen Redis-Server herzustellen:
$this->load->helper("iredis");
$hostname = "IP ADDRESS HERE";
$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Sobald ich das mache, wird mir immer eine Verbindung verweigert. In meiner Datei redis.conf ist der Befehl local bind auskommentiert, sodass mehr als die IP-Adresse localhost abgehört werden sollte. Ich kann eine Verbindung zur Datenbank auf dem lokalen Computer herstellen, nur nicht auf einem anderen Server. Ich habe die externen und internen IPs ohne Glück ausprobiert.
Irgendwelche Vorschläge, wie dies funktioniert?
quelle
redis-cli -h hostname
Antworten:
Zuerst würde ich überprüfen, ob es die IPs abhört, die Sie erwarten:
Abhängig davon, wie Sie starten / stoppen, haben Sie die Instanz möglicherweise nicht neu gestartet, als Sie dachten, dass Sie dies getan haben. Der Netstat sagt Ihnen, ob er zuhört, wo Sie denken, dass er ist. Wenn nicht, starten Sie es neu und stellen Sie sicher, dass es neu startet. Wenn es neu gestartet wird und immer noch nicht hört, wo Sie es erwarten, überprüfen Sie Ihre Konfigurationsdatei, um sicherzugehen.
Nach dem Einrichten wird von einem Remote-Knoten, der Zugriff haben sollte, abgehört, wo Sie es erwarten: Versuchen Sie:
Sie können dies auch vom lokalen Host aus versuchen, aber anstelle eines Hostnamens oder eines lokalen Hosts die IP-Adresse verwenden, die Sie abhören möchten. Sie sollten es in beiden Fällen als Antwort PONG sehen.
Wenn nicht, blockieren Sie Ihre Firewall (s). Dies sind entweder die lokalen IPTables oder möglicherweise eine Firewall zwischen den Knoten. Sie können Ihrer IPtables-Konfiguration eine Protokollierungsanweisung hinzufügen, um Verbindungen über 6379 zu protokollieren, um zu sehen, was passiert. Der Versuch, den Ping von lokal und nicht lokal auf dieselbe IP zu ändern, sollte ebenfalls veranschaulichend sein. Wenn es lokal, aber nicht remote reagiert, würde ich mich abhängig von der Komplexität Ihrer IP-Tabellenregeln auf dem Knoten zu einer dazwischenliegenden Firewall neigen.
quelle
Ich bin mit dem gleichen Problem festgefahren, und die vorhergehende Antwort hat mir nicht geholfen (wenn auch gut geschrieben).
Die Lösung ist hier: Überprüfen Sie Ihre
/etc/redis/redis.conf
und stellen Sie sicher, dass Sie die Standardeinstellung ändernzu
Starten Sie dann Ihren Dienst neu (
service redis-server restart
)Sie können dann jetzt überprüfen, ob redis auf einer nicht lokalen Schnittstelle mit lauscht
(Ersetzen Sie 192.168.xx durch Ihre IP-Adresse)
Wichtiger Hinweis: Wie mehrere Benutzer angegeben haben, ist es nicht sicher , dies auf einem Server festzulegen, der dem Internet ausgesetzt ist. Sie sollten sicher sein, dass Ihre Redis mit allen Mitteln geschützt sind, die Ihren Anforderungen entsprechen.
quelle
bind 0, ::
,bind 0, [::]
,bind 0\nbind6 ::
(wobei \ n ein Zeilenumbruch ist) und ,bind 0 [::]
aber das einzige , was funktioniert , ist nicht eine, diebind
Linie in der Config überhaupt. Standardmäßig wird 0 (oder 0.0.0.0/0) und [::] abgehört, sodass es kein Problem gibt, aber ich würde gerne die richtige Methode kennen, falls ich sie einmal brauche. Es scheint nirgendwo dokumentiert zu sein.iptables
) zum Blockieren nicht autorisierter Clients.Zusätzlich zu der hervorragenden Antwort von Orabîg:
Ich habe dieses Problem behoben, indem ich den
bind
Abschnitt vollständig entfernt undprotected-mode
auf gesetzt habeno
.Verwenden Sie diese Methode niemals auf öffentlich zugänglichen Servern.
quelle
Orabig ist richtig.
Sie können 10.0.2.15 in Ubuntu (VirtualBox) binden und dann eine Portweiterleitung vom Host zum Gast-Ubuntu durchführen.
in /etc/redis/redis.conf
Starten Sie dann redis neu:
Es soll funktionieren!
quelle
Ich hatte einige Tage mit der Fernverbindung zu Redis zu kämpfen. Endlich habe ich es geschafft. Hier ist die vollständige Checkliste, die ich zusammengestellt habe, um eine Verbindung herzustellen. Einige der Lösungen sind in den obigen Antworten angegeben. Ich wollte jedoch, dass meine Antwort ein Nano-Wiki zu diesem Thema ist :) Ich habe auch einige nützliche Links hinzugefügt.
Wenn redis lokal funktioniert:
Wenn das Passwort nicht festgelegt ist
Siehe
/etc/redis/redis.conf
config (dies ist der Standardspeicherort für Ubuntu 18.04, möglicherweise an einem anderen Speicherort):Wenn der geschützte Modus in der Konfiguration auf "Nein" gesetzt ist:
Wenn die IP-Bindung für einen Internetzugang in der Konfiguration geöffnet ist:
Wenn die Linux-Firewall Verbindungen zulässt
(hier für Ubuntu 18.04) Überprüfen Sie, ob eingehender Internetverkehr zum Port
6379
(dem Redis-Standardport) geleitet werden kann.Starten Sie den Redis-Dienst neu
Vergessen Sie nicht, den Redis-Dienst neu zu starten, damit die Änderungen wirksam werden und angezeigt werden:
Überprüfen Sie, ob es als Remote-Server funktioniert
Verwenden Sie in Ihrer Befehlszeile Folgendes,
redis-cli
als ob sich der Redis-Server auf dem Remote-Server befinden würde:Wenn Sie Ihren Redis-Server über Ihren als Remote-Server verbundenen Internet-Server pingen können, funktioniert die Remote-Redis-Verbindung.
Sicherheitswarnung
All dies macht Ihre Redis-Daten für jedermann aus dem Internet vollständig offen.
Um die Verwendung
requirepass
undprotected-mode yes
Einstellungen von Redis in der Redis-Konfiguration (siehe oben) grundsätzlich zu sichern und die gefährlichen Redis-Befehle zu blockieren (siehe den obigen Link), finden Sie in diesem Artikel und im Abschnitt zur Sicherheit der Redis-Site ein tieferes Verständnis .Nützliche Links
Einige Links zur Installation und Sicherung von Redis unter Ubuntu 18.04 und Einrichten der Ubuntu 18.04-Firewall .
Ich hoffe es hilft.
quelle
Wenn Sie redis selbst heruntergeladen haben (nicht apt-get install redis-server) und dann die redis.conf mit den obigen Vorschlägen bearbeitet haben, stellen Sie sicher, dass Sie mit der Konfiguration wie folgt neu starten :
./src/redis-server redis.conf
quelle
Das Setzen von tcp-keepalive auf 60 (es wurde auf 0 gesetzt) in der Redis-Konfiguration des Servers half mir, dieses Problem zu beheben.
quelle