Acabo de instalar Redis con éxito usando las instrucciones de la guía de inicio rápido en http://redis.io/topics/quickstart en mi servidor Ubuntu 10.10. Estoy ejecutando el servicio como dameon (por lo que puede ser ejecutado por init.d)
El servidor es parte de Rackspace Cluster con IP internas y externas. El host se ejecuta en el puerto 6379 (estándar para Redis)
Agregué una fila en iptables para permitir conexiones entrantes desde el puerto 6379 como se muestra a continuación:
ACCEPT tcp -- anywhere anywhere tcp dpt:6379
En mi código PHP en otro servidor, estoy tratando de conectarme al nuevo servidor Redis aquí:
$this->load->helper("iredis");
$hostname = "IP ADDRESS HERE";
$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Una vez que hago esto, siempre recibo una conexión rechazada. En mi archivo redis.conf, he comentado el comando de enlace local, por lo que debería estar escuchando más que la IP localhost. Puedo conectarme a la base de datos en la máquina local, pero no en otro servidor. He probado las IP externas e internas sin suerte.
¿Alguna sugerencia para que esto funcione?
fuente
redis-cli -h hostname
Respuestas:
Primero verificaría para verificar que está escuchando las IP que espera que sean:
Dependiendo de cómo inicie / pare, es posible que no haya reiniciado la instancia cuando creía que sí. El netstat le dirá si está escuchando donde cree que está. Si no, reinícielo y asegúrese de que se reinicie. Si se reinicia y aún no está escuchando donde espera, verifique su archivo de configuración solo para estar seguro.
Después de establecer que está escuchando donde espera que lo haga, desde un nodo remoto que debería tener acceso intente:
También puede intentarlo desde el host local, pero use la IP que espera que escuche en lugar de un nombre de host o localhost. Debería verlo PONG en respuesta en ambos casos.
Si no, su (s) firewall (s) lo está (n) bloqueando. Esto sería las IPTables locales o posiblemente un firewall entre los nodos. Puede agregar una declaración de registro a su configuración de IPtables para registrar conexiones a través de 6379 para ver qué está sucediendo. Además, tratar de redistribuir de local y no local a la misma IP debería ser ilustrativo. Si responde localmente pero no remotamente, me inclinaría hacia un firewall intermedio dependiendo de la complejidad de las reglas de sus tablas IP en el nodo.
fuente
Me he quedado atrapado con el mismo problema, y la respuesta anterior no me ayudó (aunque bien escrito).
La solución está aquí: verifique su
/etc/redis/redis.conf
y asegúrese de cambiar el valor predeterminadoa
Luego reinicie su servicio (
service redis-server restart
)Ahora puede verificar que redis está escuchando en una interfaz no local con
(reemplace 192.168.xx con su dirección IP)
Nota importante: como indicaron varios usuarios, no es seguro configurar esto en un servidor que está expuesto a Internet. Debe estar seguro de que su redis está protegida con cualquier medio que se ajuste a sus necesidades.
fuente
bind 0, ::
,bind 0, [::]
,bind 0\nbind6 ::
(donde \ n es un salto de línea) ybind 0 [::]
pero el único que funciona es no tener unabind
línea en la configuración en absoluto. El valor predeterminado es escuchar en 0 (o 0.0.0.0/0) y [::] por lo que no hay problema, pero me gustaría saber el método adecuado si alguna vez lo necesito. No parece estar documentado en ningún lado.iptables
) para bloquear clientes no autorizados.Además de la excelente respuesta dada por Orabîg:
Resolví este problema eliminando la
bind
sección por completo y configurándolaprotected-mode
enno
.Nunca use este método en servidores expuestos públicamente.
fuente
Orabig está en lo correcto.
Puede vincular 10.0.2.15 en Ubuntu (VirtualBox) y luego hacer un reenvío de puertos desde el host al Ubuntu invitado.
en /etc/redis/redis.conf
luego, reinicie redis:
¡Funcionará!
fuente
Estuve luchando con la conexión remota a Redis durante algunos días. Finalmente lo logré. Aquí está la lista de verificación completa que preparé para seguir para conectarme. Algunas de las soluciones se dan en las respuestas anteriores. Sin embargo, quería que mi respuesta fuera un nano-wiki sobre el tema :) También agregué algunos enlaces útiles.
Si redis funciona localmente:
Si la contraseña no está configurada
Consulte
/etc/redis/redis.conf
config (esta es la ubicación predeterminada para Ubuntu 18.04, puede tenerla en una ubicación diferente):Si el modo protegido se establece en 'no' en la configuración:
Si el enlace IP está abierto para acceder desde Internet en la configuración:
Si el firewall de Linux permite conexiones
(aquí para Ubuntu 18.04) Verifique que permita que el tráfico entrante de Internet vaya al puerto
6379
(el puerto predeterminado de Redis)Reiniciar el servicio Redis
No olvide reiniciar el servicio Redis para que los cambios surtan efecto y ver que se está ejecutando:
Comprueba si funciona como un servidor remoto
desde su línea de comando use
redis-cli
como si el servidor Redis estuviera en el servidor remoto:Si puede hacer ping-PONG a su servidor Redis a través de su servidor de Internet conectado como un servidor remoto, entonces la conexión remota de Redis funciona.
Advertencia de seguridad
Todo lo anterior hace que sus datos de Redis estén completamente abiertos para cualquier persona desde Internet.
Para asegurar básicamente el uso
requirepass
y laprotected-mode yes
configuración de Redis en la configuración de Redis (ver arriba) y bloquear los peligrosos comandos de Redis (ver el enlace de arriba), para una comprensión más profunda, vea este artículo y la sección de seguridad del sitio de Redis ).Enlaces útiles
Algunos enlaces para ayudar Cómo instalar y asegurar Redis en Ubuntu 18.04 y cómo configurar el firewall de Ubuntu 18.04 .
Espero eso ayude.
fuente
si descargó usted mismo redis (no apt-get install redis-server) y luego editó redis.conf con las sugerencias anteriores, asegúrese de comenzar de nuevo con la configuración de la siguiente manera:
./src/redis-server redis.conf
fuente
Establecer tcp-keepalive en 60 (se estableció en 0) en la configuración de redis del servidor me ayudó a resolver este problema.
fuente