Redis - 连接到远程服务器

gre*_*ola 111 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 
Run Code Online (Sandbox Code Playgroud)

在我在另一台服务器上的PHP代码中,我正在尝试连接到新的Redis服务器:

$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Run Code Online (Sandbox Code Playgroud)

一旦我这样做 - 我总是拒绝连接.在我的redis.conf文件中,我将本地绑定命令注释掉,因此它应该监听的不仅仅是本地主机IP.我可以连接到本地计算机上的数据库,而不是在另一台服务器上.我已经尝试过外部和内部IP而没有运气.

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

Ora*_*bîg 315

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

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

bind 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

bind 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

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

然后,您现在可以检查redis是否正在侦听非本地接口

redis-cli -h 192.168.x.x ping
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这个问题与OP不同.OP明确表示他们已经对配置文件进行了必要的更改.由于OP对配置文件进行了更改而你做了.不是,它们是两个独立的问题.给出的答案解决了所提供的问题.它不是要解决所有问题.只问一个人.这不是关于承认什么是错的,而是关于实现你的问题是不同的.就像有人说他们的汽车不会启动但是它们中有汽油,你告诉他们他们需要汽油. (7认同)
  • 这个答案的作用是让您的Redis服务器可供全世界访问.这是一个很大的安全风险.如果这样做,请确保以其他方式锁定Redis服务器,例如[在Redis中添加AUTH密码](http://redis.io/topics/security)和配置防火墙(例如`iptables`)阻止未经授权的客户. (7认同)

The*_*ill 121

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

netstat -nlpt | grep 6379
Run Code Online (Sandbox Code Playgroud)

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

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

redis-cli -h REMOTE.HOST ping
Run Code Online (Sandbox Code Playgroud)

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

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

  • 所以,很清楚,你正在为所发布的问题做出回答,因为你有一个相关的(但显然不完全相同)的问题,它没有解决?虽然我同意发布您的解决方案,但是因为您的问题不同而低估正确的答案似乎不适合做.也就是说,你的解决方案对于这个问题不是一个好的选择,因为OP有多个IP并且可能不想全部监听,并且OP专门引用了问题中配置文件中的bind部分.因此,您的解决方案无法解决所提出的问题. (16认同)
  • 好吧,我再次阅读了这个问题,对我而言,OP确实为这个'绑定'行设置了正确的配置似乎并不那么明显.此外,我不确定他的案件中是否涉及任何防火墙.无论如何,如果你认为这很粗鲁,我可以删除我的-1.我刚刚发现你的答案完全偏离主题,并且对于来到这里的大多数用户而言,这是一个非常常见的问题......(绑定默认参数) (2认同)

dea*_*ull 12

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

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

#bind 127.0.0.1
protected-mode no
Run Code Online (Sandbox Code Playgroud)

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


Val*_*Shi 6

几天来,我一直在为与 Redis 的远程连接而苦苦挣扎。最后我做到了。这是我整理的完整检查清单,以供建立联系。上面的答案中给出了一些解决方案。然而,我希望我的答案是关于这个主题的 nano-wiki:) 我也添加了一些有用的链接。

如果 redis 在本地工作:

$ redis-cli
127.0.0.1:6379>ping
PONG
127.0.0.1:6379>
Run Code Online (Sandbox Code Playgroud)

如果没有设置密码

查看/etc/redis/redis.conf配置(这是 Ubuntu 18.04 的默认位置,您可能在不同的位置):

# The following line should be commented
# requirepass <some pass if any>
Run Code Online (Sandbox Code Playgroud)

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

# The following line should be uncommented
protected-mode no
Run Code Online (Sandbox Code Playgroud)

如果 IP 绑定是开放的,可以在配置中从 Internet 访问:

# The following line should be commented
# bind 127.0.0.1 ::1
Run Code Online (Sandbox Code Playgroud)

如果 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
Run Code Online (Sandbox Code Playgroud)

重启Redis服务

不要忘记重新启动 Redis 服务以使更改生效并查看它是否正在运行:

$ sudo systemctl restart redis.service
$ sudo systemctl status redis
Run Code Online (Sandbox Code Playgroud)

检查它是否作为远程服务器工作

从您的命令行使用redis-cli,就好像 Redis 服务器在远程服务器上一样:

$ redis-cli -h <your-server-ip>
<your-server-ip>:6379> ping
PONG
<your-server-ip>:6379> exit
$
Run Code Online (Sandbox Code Playgroud)

如果您可以通过作为远程服务器连接的 Internet 服务器对 Redis 服务器进行 ping-PONG,那么远程 Redis 连接就可以正常工作。

安全警告

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

为了从根本上保护 Redis 的使用requirepassprotected-mode yesRedis 配置中的设置(见上文)并阻止危险的 Redis 命令(见上面的链接),更深入的理解见这篇文章Redis 站点安全部分)。

有用的链接

一些帮助链接如何在 Ubuntu 18.04 上安装和保护 Redis以及如何设置 Ubuntu 18.04 防火墙

希望能帮助到你。