• Redis本地远程(外部)连接失败详解


    目录

    问题现象:

    问题分析:

    1.报错信息:

    2.知识点分析:

    2.1Redis 的配置文件的区别:

    我猜想:redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的,否则,这个文件就没有存在的意义了。

    2.2Redis 的 bind 配置:

    2.3Redis 的 protected-mode 配置:

    总结:

    配置步骤:

    好了,接下来就是验证实验的时刻了:

    必杀技:

    redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的

    “redis.windows-service.conf ” 这个配置文件,应该是用来将Redis配置成一个windows系统服务而存在的!!!

    总之,最靠谱的方法,还是用脚本启动!!!

    解决方法:


    问题现象:

    今天在**192.168.2.220(windows服务器)**上安装并启动了一个 Redis服务,如下:

    点击redis-server.exe:

    启动成功:

    然后在192.168.2.101(本地)连接192.168.2.220Redis服务,出现报错,如下:

    随后,启动本地的java项目,配置 Redis,如下:

    然后访问需要使用到 Redis服务 的接口,出现如下报错:


    问题分析:

    1.报错信息:

    根据报错信息可知,大概意思就是说:

    Redis连接 是以 “protected” 模式mode),该模式具有以下的特点:没有绑定可具体的ip地址,访问cli工具不需要认证密码,该模式下只支持“loopback”(回环)接口的调用。

    //注:回环的意思大概就是说,只能在配置了redis的机器上访问redis连接,而不允许外部ip连接。

    如果你想要连接该redis服务,你需要采用以下其中一种解决方法:

    **方案****1.2.3:**前三种的意思几乎一致,都是说让你去修改该 Redis的配置 ,让Redis以“protected-mode no”的配置来启动。

    **方案****4:**修改该 Redis的配置,让Redis绑定一个ip地址或一个认证密码。

    2.知识点分析:

    2.1Redis 的配置文件的区别:

    可以看到有两个配置文件:

    那该使用哪个呢?那就来说说redis.windows.confredis.windows-service.conf 的区别:

    查阅网上资料发现,网上流传着这样的说法:“当redis安装后,就会在系统服务中出现一个名为Redis的服务,通过点击启动来启动Redis”

    通过 win+r 中,输入compmgmt.msc ,打开管理工具点击服务,可以找到redis服务,然后看见类似下图:

    通过这个图片可以看到,这个名为Redis的系统服务,默认是使用了 “redis.windows-service.conf ” 这个配置文件来启动的。

    奇怪的是我看了一下却没有Redis这个系统服务。。。。。。好吧,有可能是Redis的版本的问题:

    问题不大,因为我们其实完全就没必要把redis变成一个系统服务,从而实现开机自启动(后台);我觉得想用的时候,直接点击 redis-server.exe 启动不香么???

    现在要思考的问题其实是:当我们点击redis-server.exe 启动 Redis 时,会不会也是使用了 “redis.windows-service.conf ” 这个配置文件来启动的呢?

    我猜想:redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的,否则,这个文件就没有存在的意义了。

    搜了很久,没有在网上找到对应的资料,于是就自己来实验一下吧!!!!!!

    2.2Redis 的 bind 配置:

    首先我们打开redis.windows-service.conf,可以看见默认绑定了127.0.0.1(本地ip地址)

    redis 中的 bind 配置作用就是:

    配置该redis连接 的 固定ip,配置完之后,就只有它绑定的那这个 ip 能访问到该redis连接;其他ip就不能。

    而由于 redis 默认绑定了127.0.0.1 ,也就是只有 127.0.0.1 所映射的192.168.2.220)这个ip能访问该 redis,其他ip就不能;

    因此这个配置会阻碍外部(192.168.2.101)对该 redis的访问。

    2.3Redis 的 protected-mode 配置:

    在 **“redis.windows-service.conf ”**文件中,可以找到如下配置:

    通过查看注解,我们可以知道:

    该配置是默认启动(enabled)的

    如果你想让其他主机(ip)连接该redis,则必须设置该配置为不可用的(disable),即使你不配置认证密码,也没有通过 bind 配置绑定外部ip地址

    由此可知:该配置就是用于限制外部ip访问的,且要和 bind 配置一起使用。

    总结:

    从上面的知识点可知,要解决问题,就需要对 redis的配置文件中的 bind 和 protected-mode配置进行修改。

    配置步骤:

    步骤1打开 “redis.windows-service.conf ” 文件,为Redis绑定一个ip地址

    //注:我们一般都不需要在访问redis时使用到认证密码,所以没有要求的话,可以不配置

    把该bing 配置(bind 127.0.0.1)注释掉,这样就能让所有ip都能访问到这个redis,修改如下:

    步骤2打开 “redis.windows-service.conf ” 文件,修改Redis的 protected-mode配置

    下拉,找到protected-mode配置,修改为如下:

    然后把原来的redis服务关闭,再点击redis-server.exe 启动。

    然后再在本地(192.168.2.101)连接192.168.2.220Redis服务,出现如下报错:

    再调用接口试试,发现还是报错:

    好了,接下来就是验证实验的时刻了:

    1. 关闭redis窗口,将“redis.windows-service.conf ” 还原成初始状态;

    2. 将以上步骤应用到 “redis.windows.conf” 这个配置文件上;

    3. 点击redis-server.exe 启动;

    发现还是会报同样的错误,那就不知道是为什么了。。。尴尬

    于是,我又把**“redis.windows.conf” 和 “redis.windows-service.conf ”** 两个配置文件都做了修改,然后再点击redis-server.exe 启动,结果还是不行

    这样就不好说问题出在哪里,但是能确定的是:这两个配置文件的修改都没有生效!!!!!!

    必杀技:

    自己写个启动脚本(redis-start.bat),配置redis的启动命令并指定了配置文件,来启动redis,终于可以了:

    双击 “redis-start.bat” 文件

    启动成功:

    接口调用成功:

    注意:这里不要指定**“redis.windows-service.conf ”** 配置文件,否则会出现以下情况:

    虽然启动了,但是一片黑暗,啥信息都看不到,由此似乎可以证明了我的猜想:

    redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的

    因为,**redis-server.exe 启动 Redis 时,是有信息可以看见的,**所以说

    “redis.windows-service.conf ” 这个配置文件,应该是用来将Redis配置成一个windows系统服务而存在的!!!

    总之,最靠谱的方法,还是用脚本启动!!!


    解决方法:

    1. 打开 “redis.windows” 文件,把该bing 配置(bind 127.0.0.1)注释掉

    2. 修改Redis的 protected-mode配置为 **protected-mode no ,**如下:

    3. 创建启动脚本文件(redis-start.bat),写入启动命令并指定配置文件:

    4. 双击 “redis-start.bat” 文件启动:

    5. 访问接口成功:

  • 相关阅读:
    struct结构体【C#】
    C/S架构的医学影像PACS系统源码,应用于放射、超声、内窥镜、病理等影像科室
    用孙子兵法的智慧指导数据安全工作
    完美解决mac git clone总是报128错误|git clone克隆问题
    算法进阶——字符串的排列
    GO语言框架中如何快速集成日志模块
    利用OPNET进行网络指定源组播(SSM)仿真的设计、配置及注意点
    11.9树的表示方法(孩子,父亲,孩子兄弟),树、森林的遍历,一些操作,决策树,前缀树
    c++day4
    Spring Security加密和匹配
  • 原文地址:https://blog.csdn.net/m0_67393827/article/details/126495410