下载并安装redis到机器后,使用默认配置启动。发现本机client使用“localhost”或者“127.0.0.1”连接本机的server,一切正常ok。但是将client切换到别的机器上时,发现连接不上。查了一下,原因如下:
redis的默认配置是没有用户验证的。也就是说,reids的server你只需要知道ip和端口就可以连得上,然后也有操作权限。这样存在redis里面的数据就非常危险了。所以redis的设计者为了提醒用户注意到这一点,并引导其做一些配置,redis server默认是 bind “127.0.0.1”,也就是说,它只能接收来自本机的client的连接。打开redis的配置文件,可以发现以下介绍:
要想让redis接受所有ip地址的连接,只需要把bind那一行注释掉即可。
但是从3.2开始,redis增加了protected-mode, 即使注释掉bind那一行,远程连接redis仍然会报错。
配置文件是这么描述的:protected-mode默认是开启的,它会在这两种情况同时存在的时候起作用:
(1) server没有明确指定一些 ip 去 bind
(2) 没有password配置
我们刚才把 bind 127.0.0.1 那一行给注释掉了,那就是没有指定ip去让server bind。我们用默认的配置文件是没有密码配置的。所以安全模式在这个时候起作用了,connect就会抛出如下错误:
Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.
如果不想设置密码,又想让redis server 被远程连接,那么就把 protected-mode 的 yes 改成 no。