Acabei de instalar o Redis com sucesso usando as instruções no guia Início Rápido em http://redis.io/topics/quickstart no meu servidor Ubuntu 10.10. Estou executando o serviço como dameon (para que ele possa ser executado pelo init.d)
O servidor faz parte do Rackspace Cluster com IPs internos e externos. O host está sendo executado na porta 6379 (padrão para Redis)
Adicionei uma linha no iptables para permitir conexões de entrada da porta 6379, como mostrado abaixo:
ACCEPT tcp -- anywhere anywhere tcp dpt:6379
No meu código PHP em outro servidor, estou tentando me conectar ao novo servidor Redis aqui:
$this->load->helper("iredis");
$hostname = "IP ADDRESS HERE";
$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Quando faço isso - sempre recebo uma conexão recusada. No meu arquivo redis.conf, tenho o comando de ligação local comentado; portanto, ele deve estar ouvindo mais do que o IP do host local. Posso me conectar ao banco de dados na máquina local, mas não em outro servidor. Eu tentei os IPs externos e internos sem sorte.
Alguma sugestão para que isso funcione?
fonte
redis-cli -h hostname
Respostas:
Primeiro, eu verificaria se está ouvindo os IPs que você espera que sejam:
Dependendo de como você iniciar / parar, talvez você não tenha realmente reiniciado a instância quando pensou que tinha. O netstat lhe dirá se está ouvindo onde você pensa que está. Caso contrário, reinicie-o e verifique se ele é reiniciado. Se ele reiniciar e ainda não estiver ouvindo onde você espera, verifique seu arquivo de configuração apenas para ter certeza.
Depois de estabelecer, ele está ouvindo onde você espera, de um nó remoto que deve ter acesso, tente:
Você também pode tentar isso a partir do host local, mas usar o IP que espera ouvir em vez de um nome de host ou host local. Você deve ver o PONG em resposta nos dois casos.
Caso contrário, seus firewalls estão / estão bloqueando você. Seriam as IPTables locais ou possivelmente um firewall entre os nós. Você pode adicionar uma instrução de log à configuração do IPtables para registrar conexões em 6379 para ver o que está acontecendo. Além disso, tentar rediscar ping de local e não local para o mesmo IP deve ser ilustrativo. Se ele responder localmente, mas não remotamente, eu me inclinaria para um firewall intermediário, dependendo da complexidade das regras das tabelas de IP no nó.
fonte
Eu fiquei com o mesmo problema, e a resposta anterior não me ajudou (embora esteja bem escrita).
A solução está aqui: verifique seu
/etc/redis/redis.conf
e certifique-se de alterar o padrãopara
Em seguida, reinicie seu serviço (
service redis-server restart
)Agora você pode verificar se o redis está escutando na interface não local com
(substitua 192.168.xx pelo seu endereço IP)
Nota importante: como vários usuários declararam, não é seguro configurá-lo em um servidor exposto à Internet. Você deve ter certeza de que redis está protegido com qualquer meio que atenda às suas necessidades.
fonte
bind 0, ::
,bind 0, [::]
,bind 0\nbind6 ::
(onde \ n é uma nova linha) ebind 0 [::]
, mas a única coisa que funciona é não ter umabind
linha na configuração em tudo. O padrão é escutar 0 (ou 0.0.0.0/0) e [::] para que não haja problema, mas eu gostaria de saber o método adequado, caso precise. Não parece estar documentado em nenhum lugar.iptables
) para bloquear clientes não autorizados.Além da excelente resposta dada por Orabîg:
Resolvi esse problema removendo a
bind
seção completamente e definindoprotected-mode
comono
.Nunca use esse método em servidores expostos publicamente.
fonte
Orabig está correto.
Você pode ligar 10.0.2.15 no Ubuntu (VirtualBox) e depois encaminhar uma porta do host para o Ubuntu convidado.
em /etc/redis/redis.conf
em seguida, reinicie o redis:
Deverá funcionar!
fonte
Eu estava lutando com a conexão remota com Redis por alguns dias. Finalmente eu consegui. Aqui está a lista de verificação completa que eu montei para seguir para se conectar. Algumas das soluções são dadas nas respostas acima. No entanto, queria que minha resposta fosse um nano-wiki sobre o assunto :) Adicionei alguns links úteis também.
Se o redis funcionar localmente:
Se a senha não estiver definida
Veja
/etc/redis/redis.conf
config (este é o local padrão para o Ubuntu 18.04, você pode encontrá-lo em outro local):Se o modo protegido estiver definido como 'não' na configuração:
se a ligação IP estiver aberta para acesso da Internet na configuração:
Se o firewall do Linux permitir conexões
(aqui para Ubuntu 18.04) Verifique se o tráfego da Internet de entrada é direcionado à porta
6379
(a porta padrão Redis)Reinicie o serviço Redis
Não se esqueça de reiniciar o serviço Redis para que as alterações entrem em vigor e veja se ele está sendo executado:
Verifique se funciona como um servidor remoto
na linha de comando, use
redis-cli
como se o servidor Redis estivesse no servidor remoto:Se você puder executar ping-PONG no servidor Redis por meio do servidor da Internet conectado como servidor remoto, a conexão Redis remota funcionará.
Aviso de segurança
Tudo isso faz com que seus dados Redis sejam completamente abertos a qualquer pessoa da Internet.
Para basicamente proteger o uso
requirepass
e asprotected-mode yes
configurações do Redis na configuração do Redis (veja acima) e bloquear os perigosos comandos Redis (veja o link acima), para uma compreensão mais profunda, consulte este artigo e a seção de segurança do site Redis ).Links Úteis
Alguns links para ajudar Como instalar e proteger o Redis no Ubuntu 18.04 e como configurar o firewall Ubuntu 18.04 .
Espero que ajude.
fonte
se você baixou o redis você mesmo (não apt-get install redis-server) e editou o redis.conf com as sugestões acima, certifique-se de que você inicie o redis com a configuração da seguinte maneira:
./src/redis-server redis.conf
fonte
Definir tcp-keepalive como 60 (foi definido como 0) na configuração redis do servidor me ajudou a resolver esse problema.
fonte