Redis - 连接到远程服务器

时间:2011-12-16 16:39:54

标签: ubuntu configuration 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。

有关让此方法发挥作用的任何建议吗?

7 个答案:

答案 0 :(得分:303)

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

解决方案在此处:检查您的/etc/redis/redis.conf,并确保更改默认

bind 127.0.0.1

bind 0.0.0.0

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

然后,您现在可以使用

检查redis是否正在侦听非本地接口
redis-cli -h 192.168.x.x ping

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

重要提示:正如多个用户所说,在强暴露给互联网的服务器上进行设置不安全。您应确定redis受到任何符合您需求的方式的保护。

答案 1 :(得分:118)

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

netstat -nlpt | grep 6379

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

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

redis-cli -h REMOTE.HOST ping

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

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

答案 2 :(得分:9)

除了Orabîg给出的出色答案:

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

#bind 127.0.0.1
protected-mode no

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

答案 3 :(得分:5)

几天来,我一直在与Redis进行远程连接。终于我做到了。这是我整理后要建立联系的完整检查清单。上面的答案中给出了一些解决方案。但是我希望我的答案是关于这个主题的纳米维基:)我也添加了一些有用的链接。

如果redis在本地可用:

$ redis-cli
127.0.0.1:6379>ping
PONG
127.0.0.1:6379>

如果未设置密码

请参阅/etc/redis/redis.conf配置(这是Ubuntu 18.04的默认位置,您可以将其放在其他位置):

# The following line should be commented
# requirepass <some pass if any>

如果在配置中将保护模式设置为“否”:

# The following line should be uncommented
protected-mode no

如果在配置中打开了IP绑定以便从Internet访问:

# The following line should be commented
# bind 127.0.0.1 ::1

如果Linux防火墙允许连接

(对于Ubuntu 18.04,此处为)检查是否允许传入的互联网流量进入端口6379(Redis默认端口)

# To check if it the port is open
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
6379/tcp                   ALLOW       Anywhere
6379/tcp (v6)              ALLOW       Anywhere (v6)
...

# To open the port
$ sudo ufw allow 6379/tcp

重新启动Redis服务

不要忘记重启Redis服务以使更改生效并看到它正在运行:

$ sudo systemctl restart redis.service
$ sudo systemctl status redis

检查它是否可以用作远程服务器

在命令行中使用redis-cli就像Redis服务器在远程服务器上一样:

$ redis-cli -h <your-server-ip>
<your-server-ip>:6379> ping
PONG
<your-server-ip>:6379> exit
$

如果您可以通过作为远程服务器连接的Internet服务器对您的Redis服务器执行ping-PONG操作,那么远程Redis连接就会起作用。

安全警告

以上所有内容使您的Redis数据对互联网上的任何人都完全开放。

要基本上确保Redis的安全,请使用Redis配置中的requirepassprotected-mode yes设置(请参见上文)并阻止危险的Redis命令(请参见上面的链接),如需更深入的了解,请参见this articleRedis site security section)。

有用的链接

一些帮助How to install and secure Redis on Ubuntu 18.04how to setup Ubuntu 18.04 firewall的链接。

希望有帮助。

答案 4 :(得分:2)

Orabig是对的。

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

/etc/redis/redis.conf

bind 10.0.2.15

然后,重新启动redis:

sudo systemctl restart redis

它会起作用!

答案 5 :(得分:1)

  • 如果您自己下载了redis(不是apt-get install redis-server),那么编辑redis.conf 以上建议,请确保您使用配置启动redis 像这样:./src/redis-server redis.conf

    • 另外注意我包括虚拟框设置的屏幕截图 连接到redis,如果您在Windows上并连接到虚拟机虚拟机。

enter image description here

答案 6 :(得分:0)

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