当前位置: 首页>>技术问答>>正文


Redis – 连接到远程服务器

, ,

问题描述

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

该服务器是具有内部和外部IP的Rackspace Cluster的一部分。主机在端口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而没有运气。

有关使此工作的任何建议?

最佳解决方法

首先,我要检查以确认它正在监听您期望的IP:

netstat -nlpt | grep 6379

根据您的启动/停止方式,您可能没有实际重新启动实例。 netstat会告诉你它是否正在听你认为的地方。如果没有,请重新启动它并确保它重新启动。如果它重新启动但仍未按您的意愿收听,请检查配置文件以确定。

在建立之后,它正在监听您期望的位置,从应该具有访问权限的远程节点尝试:

redis-cli -h REMOTE.HOST ping

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

如果没有,您的防火墙正在阻止您。这可能是本地IPTables,也可能是节点之间的防火墙。您可以向IPtables配置添加日志记录语句,以记录6379上的连接,以查看发生的情况。此外,尝试从本地和non-local重新ping到相同的IP应该是说明性的。如果它在本地但不是远程响应,我会依赖于on-node IP表规则的复杂性而倾向于干预防火墙。

次佳解决方法

我一直坚持同样的问题,前面的答案对我没有帮助(尽管写得很好)。

解决方案如下:检查您的/etc/redis/redis.conf,并确保更改默认值

bind 127.0.0.1

bind 0.0.0.0

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

然后,您现在可以检查redis是否正在侦听non-local界面

redis-cli -h 192.168.x.x ping

(用您的IP地址替换192.168.x.x)

重要说明:正如一些用户所说,在暴露于Internet的服务器上设置它是不安全的。您应确定redis受到任何符合您需求的方式的保护。

第三种解决方法

除了Orabîg给出的优秀答案:

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

#bind 127.0.0.1
protected-mode no

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

第四种方法

Orabig是对的。

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

在/etc/redis/redis.conf中

bind 10.0.2.15

然后,重启redis:

sudo systemctl restart redis

它应该工作!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6519.html,未经允许,请勿转载。