我已经按照Ubuntu10.10服务器上的http://redis.io/topics/quickstart快速入门指南中的说明成功地安装了Redis。我以守护进程的身份运行服务(因此它可以由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,但没有成功。
有什么建议可以让它工作吗?
发布于 2012-02-10 06:17:40
首先,我会检查它是否在监听您期望的is:
netstat -nlpt | grep 6379
根据启动/停止方式的不同,您可能并没有在您认为已经重启的时候重新启动实例。netstat将告诉您它是否正在监听您认为它所在的位置。如果没有,请重新启动它,并确保它重新启动。如果它重新启动,但仍然没有在您期望的位置侦听,请检查您的配置文件,以确保无误。
在建立它之后,从应该有访问权限的远程节点尝试在您期望的位置进行侦听:
redis-cli -h REMOTE.HOST ping
您也可以尝试从本地主机执行此操作,但使用您希望它监听的IP,而不是主机名或本地主机。在这两种情况下,您都应该看到响应中的PONG。
如果没有,则说明您的防火墙正在阻止您。这可以是本地IPTables,也可以是节点之间的防火墙。您可以将日志记录语句添加到IPtables配置中,以记录6379上的连接,以查看发生了什么情况。此外,尝试从本地和非本地ping相同的IP应该是说明性的。如果它在本地响应,而不是远程响应,我会倾向于使用中间防火墙,这取决于节点上IP表规则的复杂性。
发布于 2020-01-22 16:10:39
有几天我一直在为远程连接Redis而苦苦挣扎。我终于成功了。这是我整理的完整的清单,用来建立联系。上面的答案中给出了一些解决方案。然而,我希望我的答案是一个关于这个主题的纳米维基:)我还添加了一些有用的链接。
如果redis在本地工作:
$ redis-cli
127.0.0.1:6379>ping
PONG
127.0.0.1:6379>
如果未设置密码
参见/etc/redis/redis.conf
配置(这是Ubuntu18.04的默认位置,您可以将其放在不同的位置):
# The following line should be commented
# requirepass <some pass if any>
如果在配置中将保护模式设置为'no‘:
# The following line should be uncommented
protected-mode no
如果在配置中打开了IP绑定以允许从internet访问:
# The following line should be commented
# bind 127.0.0.1 ::1
如果Linux防火墙允许连接
(这里是Ubuntu18.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
$
如果你可以乒乓你的Redis服务器,通过你的互联网服务器作为远程服务器连接,那么远程Redis连接就可以工作。
安全警告
所有这些使得你的Redis数据对互联网上的任何人都是完全开放的。
要从根本上保护Redis的安全,请使用Redis配置中的requirepass
和protected-mode yes
设置(参见上文),并阻止危险的Redis命令(参见上面的链接),有关更深入的理解,请参阅this article和Redis site security section )。
有用的链接
一些帮助How to install and secure Redis on Ubuntu 18.04和how to setup Ubuntu 18.04 firewall的链接。
希望能有所帮助。
发布于 2016-06-16 15:55:04
在服务器的redis配置中将tcp-keepalive设置为60 (设置为0)帮助我解决了这个问题。
https://stackoverflow.com/questions/8537254
复制相似问题