Redis – 连接到远程服务器

我刚刚使用Ubuntu 10.10服务器上的http://redis.io/topics/quickstart上的快速入门指南中的说明成功安装了Redis。 我正在运行该服务作为dameon(所以它可以运行init.d)

该服务器是具有内部和外部IP的Rackspace集群的一部分。 主机运行在6379端口(Redis标准)

我在iptables中添加了一行允许来自端口6379的传入连接,如下所示:

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更多地进行监听。 我可以连接到本地机器上的数据库而不是另一台服务器上。 我已经尝试了外部和内部的IP没有运气。

任何build议让这个工作?

首先,我会检查它是否正在监听您期望的IP:

 netstat -nlpt | grep 6379 

根据你开始/停止的方式,你可能没有真正重新启动实例。 netstat会告诉你它是否在听你认为的地方。 如果没有,请重新启动并确保重新启动。 如果它重新启动,仍然没有听到你的期望,检查你的configuration文件只是为了确保。

在build立之后,它正在听你期望的地方,从应该有权访问的远程节点上尝试:

 redis-cli -h REMOTE.HOST ping 

您也可以从本地主机尝试,但使用您期望它监听的IP而不是主机名或本地主机。 在这两种情况下你都应该看到PONG的反应。

否则,您的防火墙将阻止您。 这可能是本地的IPTables,也可能是节点之间的防火墙。 您可以添加一个日志语句到您的IPtablesconfiguration来logging超过6379的连接,看看发生了什么。 此外,试图从本地和非本地到相同的IP重新ping,应该是说明性的。 如果它本地响应,但不是远程响应,则依赖于您的节点IP表规则的复杂性,我会倾向于介入防火墙。

我被困在同样的问题,前面的答案没有帮助我(虽然写得好)。

解决方法是:检查你的/etc/redis/redis.conf ,并确保改变默认值

 bind 127.0.0.1 

 bind 0.0.0.0 

然后重新启动你的服务( service redis-server restart

你现在可以检查redis是否在非本地接口上进行监听

 redis-cli -h 192.168.xx ping 

(用您的IP地址replace192.168.xx)

重要提示:正如几位用户所说,将其设置在暴露于Internet的服务器上并不安全 。 您应该确定您的redis受到任何适合您的需求的保护。

除了Orabîg给出的优秀答案之外,

我通过完全删除bind部分并将protected-mode设置为no来解决此问题。

 #bind 127.0.0.1 protected-mode no 

切勿在公开暴露的服务器上使用此方法。

在服务器的redisconfiguration中将tcp-keepalive设置为60(它被设置为0)帮助我解决了这个问题。

  • 如果你自己下载了redis(不是apt-get install redis-server),然后用上面的build议编辑redis.conf,请确保你的启动redis的configuration是这样的: ./src/redis-server redis.conf redis-server ./src/redis-server redis.conf

    • 还侧注意我包括虚拟框设置的连接到Redis的屏幕截图,如果你在Windows上,并连接到一个virtualbox虚拟机。

在这里输入图像说明

奥拉比是正确的。

您可以在Ubuntu(VirtualBox)中绑定10.0.2.15,然后执行从主机到客户端Ubuntu的端口转发

在/etc/redis/redis.conf中

 bind 10.0.2.15 

然后,重新启动redis:

 sudo systemctl restart redis 

它应该工作!