【redis-01】windows、linux上的redis远程互连
写在开头
博主在用linux远程连接windows上的redis时遇到了一些问题,网络上能搜索到的回答跟自己的情况不太相符,索性就总结一下写篇随笔分享给同路人,也方便以后自己回顾~
1、问题
#linux访问windows上的redis时,出现错误,已修改windows上redis配置文件,给bind加了注解
Error: Connection reset by peer
2、准备工作
-
安装redis过程可参考博主的相关随笔
-
本篇将用以下地址操作:
-
虚拟机ip:192.168.132.101
-
本地电脑ip:192.168.3.3
-
-
加载配置文件启动redis服务
- linux:
cd /usr/local/redis-4.0.0 src/redis-server ./redis.conf
- windows
安装目录下打开cmd redis-server.exe redis.windows.conf
-
配置文件
-
各自在本地进入redis-cli,登录redis数据库,如果以配置文件启动,输入info server即可看到配置文件位置,linux和windows都可以通过该方式查找
-
进入配置文件,若为linux,则在命令模式下输入/bind,搜索bind,找到bind 127.0.0.1,n为下一项,N为上一项。
# By default, if no "bind" configuration directive is specified, Redis listens # for connections from all the network interfaces available on the server. # It is possible to listen to just one or multiple selected interfaces using # the "bind" configuration directive, followed by one or more IP addresses. # # Examples: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the # internet, binding to all the interfaces is dangerous and will expose the # instance to everybody on the internet. So by default we uncomment the # following bind directive, that will force Redis to listen only into # the IPv4 lookback interface address (this means Redis will be able to # accept connections only from clients running into the same computer it # is running). # # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES # JUST COMMENT THE FOLLOWING LINE. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bind 127.0.0.1
- 从以上可以知道,redis默认只可以由本地客户端访问,无法远程连接,需要修改bind[1]相关配置
-
3、windows远程连接linux上的redis
-
给linux上redis配置文件中的“bind 127.0.0.1”加上注释,这时通过windows访问并查询的结果如下:
-
可以访问但是无法操作,通过给出的提示可以知道有四个处理方法:
1. 在linux上登录redis客户端,输入 CONFIG SET protected-mode no ,这种方法只是临时有用,重启服务后会失效。如果这样做,最好保证Redis不能从互联网上公开访问。
2. 编辑Redis配置文件,搜索protected,把protected mode设置为“no”,然后重新启动服务器。如果这样做,最好保证Redis不能从互联网上公开访问。
3. 如果只是为了测试,可以使用“--protected-mode no”选项重新启动服务器。
4. 可以设置bind地址或身份验证密码。 -
本篇使用和测试的是第四个方法,个人觉得更加安全
3.1 修改bind地址
-
把linux上redis配置文件中的“bind 127.0.0.1”注释去掉,将其改为192.168.132.101,通过windows远程访问,可以正常连接和查询
-
linux本地直接访问,发现连接失败
-
linux本地通过开放接口访问redis,可以正常连接和查询
3.2 追加bind地址
- 把linux上redis配置文件中的“bind 127.0.0.1”注释去掉,在默认接口后追加192.168.132.101接口,在linux本地直接访问redis,注意,配置格式如下:
bind 127.0.0.1 192.168.132.101
,可以正常连接和查询
3.3 添加身份验证密码
- 在linux上配置文件里的bind 127.0.0.1被注释的情况下,添加密码,具体方法请参考Redis安装配置相关,博主这里密码设置为123456
- 添加后,通过window远程访问,可以正常连接和查询
- 在linux本地直接访问,输入密码后也可连接和查询
3.4 总结
可以看出无论是修改bind地址,还是添加用户验证密码,都可以使windows远程连接和操作redis,但是前者无需密码验证所有用户都可访问开放的接口192.168.132.101,后者开放所有接口,故此推荐两个同时使用~
4、linux远程连接window上的redis
- 给windows上redis配置文件中的“bind 127.0.0.1”加上注释,发现无法启动redeis服务,问题如下图所示:
意思是无法创建*:6379的接口监听器,有点无法理解,因为注释掉所有接口的操作是被允许的,不明白为什么启动不了redis服务,这里以后再来探究。因为添加密码对于启动服务器没有帮助,所以这里博主选择在原有配置上修改或追加自己的本机接口解决问题。有兴趣的可以自行添加密码增加安全性!
4.1 修改bind地址
-
把windows上redis配置文件中的“bind 127.0.0.1”注释去掉,将其改为192.168.3.3,通过linux远程访问,可以正常连接和查询
-
windows本地直接访问,发现连接失败
如果读到这里相信大家也都明白了,本地直接连接是通过127.0.0.1接口访问的,将默认值127.0.0.1修改为本机ip接口后,我们可以通过本机ip接口访问,但是本地就无法直接访问了 -
window本地通过开放接口访问redis,可以正常连接和查询
4.2 追加bind地址
- 把windows上redis配置文件中的“bind 127.0.0.1”注释去掉,在默认接口后追加192.168.3.3接口,在windows本地直接访问redis,注意,配置格式如下:
bind 127.0.0.1 192.168.3.3
,可以正常连接和查询
总结
文章开头遇到的问题,在我再次整理总结后并没有遇到,印象中,我当时在用linux远程访问windows上的redis,我注释了127.0.0.1,开启了所有端口,可以连接redis但是无法操作,不知道为什么再次实验后相同的操作步骤问题变成了无法开启redis服务。希望以后有机会可以探究清楚背后的原因~
- bind是外部访问redis的接口,注意,它不是请求连接的服务器ip地址,如果无“bind”,那么所有接口都对外开放,可以使用“bind”配置指令开放一个或多个选定的接口,默认只开放127.0.0.1接口,即只可以从本机cli连接redis。如果从外部服务器A远程访问127.0.0.1,访问的也只是服务器A它本机的redis。
- 网络上大部分的解决方案都是直接注释掉默认bind,开放所有接口,这样可以解决问题,但是 binding to all the interfaces is dangerous and will expose the instance to everybody on the internet.,所以博主这里尝试只开放本机接口和127.0.0.1。注意,这种情况下,所有服务器都可通过本机ip连接该redis,如果想限制请求连接服务器的访问,需要在防火墙上设置,或者添加身份验证密码,可以参考软件安装Redis部分