最近一段时间都在做谷粒学院,一直没有好好整理知识点,昨晚刚好在做项目的时候使用了Redis作为缓存的中间件,但是出现了无法访问到虚拟机上Redis的问题,今天对这个问题的解决方法做了个小小的整理。
由于我的虚拟机版本是ubuntu,所以下面涉及的一些命令可能和centos虚拟机的命令不太一样。
Ubuntu系统版本可以通过 uname -v
命令查询,一般高版本都是向下兼容的,低版本的可能本篇文章的方法会失效。
错误显示
(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.
解决方法
配置文件修改
首先要进入到Redis的安装目录中,如果忘记安装位置,可以通过find
命令搜索。Redis的配置文件名为redis.conf,可以通过以下命令搜索
find / -name redis.conf
执行该命令需要获取权限,可以在命令前面加上 sudo
或者 直接通过 sudo su
进入超级用户模式。
搜索后我们可以看到配置文件的路径,那么这个目录哪呢?在桌面上通过ls
查看目录会发现根本不存在这个目录,这里涉及到Linux的目录结构,具体的可以查阅相关资料,这里只要输入cd /
回车之后就能进入到root目录中。之后就能找到usr文件夹,根据搜索到的路径进入。
找到配置文件后,自己选择编辑器打开,我的虚拟机上使用的是vim编辑器。输入vim redis.conf
打开配置文件,为了防止修改配置文件出错,最好提前拷贝一份配置文件。
编辑器搜索功能命令 /搜索内容
,比如输入/ protected-mode
搜索到之后按esc
键,然后输入 i
表示进入编辑模式,修改完成后,按esc
,然后输入英文的:wq
,表示保存并退出。
修改的内容
打开配置文件把下面对应的注释掉,否则只允许在虚拟机本地访问Redis数据库。
bind 127.0.0.1
附:这里如果不生效的话,可以注释掉之后,在这行下面输入 bind 0.0.0.0 表示允许所有IP访问。如何判断是否修改成功,可以在启动Redis后,通过ps -ef|grep redis
查看redis相关进程,如下图,如果没修改成功,会显示127.0.0.1:6379
,如果修改成功生效后就是 *:6379
。
Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no。
daemonize no
关闭保护模式
protected-mode no
修改完配置文件后,一定要重启Redis(关键)
首先要停止Redis服务端,可以在窗口中通过crtl + c
关闭,或者通过kill -9 进程号(pid)
进行关闭。
然后在配置文件目录中输入redis-server redis.conf
重新启动Redis,注意一定要在该目录中通过配置文件启动,不能在其他窗口通过Redis-server
启动,这样配置文件是不会生效的。
端口防火墙
注意Redis默认端口是6379,然后防火墙把本地的防火墙和虚拟机的防火墙都关闭。下面的Linux中防火墙操作的相关命令。
# 开启防火墙
ufw enable
# 重启防火墙
ufw reload
# 关闭防火墙
ufw disable
# 查看端口开启状态
ufw status
# 开启某个端口, 这里表示开启 6379 端口
ufw allow 6379
# 关闭某个端口
ufw delete allow 6379
查询Linux系统的IP可以通过ifconfig
命令进行查询。
ssh服务
ssh服务一般我们在安装虚拟机的时候会默认安装,因此可以直接启动,如果不能启动的,可以自己手动安装,相关命令如下。
// 安装命令
apt-get install ssh
apt-get install openssh-server
// 启动 SSHD 服务
service sshd start
其他问题
密码修改
Redis数据库的密码也是在配置文件Redis.conf中进行修改,默认是没有密码的。 通过/requirepass
命令搜索,可以把注释去掉,自行设置密码。
一般来说把配置文件按照上面方法进行配置都能解决远程连接Redis的问题,如果还存在其他问题无法访问,可能是虚拟机的网络配置或者是本地电脑的问题,可以通过Ping命令测试或者查阅其他方法进行解决。