我刚刚使用我的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。
有关让此方法发挥作用的任何建议吗?
答案 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-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
# The following line should be commented
# bind 127.0.0.1 ::1
(对于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服务以使更改生效并看到它正在运行:
$ 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配置中的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的链接。
希望有帮助。
答案 4 :(得分:2)
Orabig是对的。
您可以在 Ubuntu(VirtualBox)中绑定10.0.2.15,然后从主机到来宾Ubuntu执行端口转发。
> /etc/redis/redis.confbind 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
答案 6 :(得分:0)
在服务器的redis配置中将tcp-keepalive设置为60(设置为0)帮助我解决了这个问题。