redis配置文件中bind和protecte-mode的作用

阅读更多

转自:https://blog.csdn.net/cw_hello1/article/details/83444013 

 

 

本地redis客户端使用  redis-cli -h host -p port -a password 连接远程服务器,爆出错误

Error: Protocol error, got "J" as reply type byte

 解决问题的关键在了解redis服务器上配置文件中bind和protected-mode这两项配置的作用

 

bind的作用

 

经常会有个误区是bind用于绑定能够访问本机redis服务器的ip,但是真要配置一个其他机器的ip,就会发现启动不了redis。

 

bind的真实作用是,绑定本机的网卡ip,如果配置了bind,则redis服务器只接受来自绑定网卡的redis请求。如果都没配置,则接受所有网卡发来的请求

举例:如果redis服务器上有两个网卡,IP地址分别是IP1和IP2,在redis.conf里配置 bind IP1,那么远程客户端只能通过IP1访问redis服务器。如果配置了IP1和IP2以外的地址,redis服务就会启动不了

 

配置bind 127.0.0.1之后,只有本机能访问的原因:
127.0.0.1是一个回环地址,所有计算机都只能访问自己的回环地址。所以只有本机能访问这个IP地址而不是只接受回环地址的访问

 

 

redis中的【protected-mode】的理解

 

redis本身无法限制【只有指定主机】连接到redis中,就像上面说的一样,bind指定只是用来设置接口地址(interfaces)。

         1.如果你的bind设置为:bind 127.0.0.1,这是非常安全的,因为只有本台主机可以连接到redis,就算不设置密码,也是安全的,除非有人登入到你的服务器上。

        2.如果你的bind设置为:bind 0.0.0.0,表示所有主机都可以连接到redis。(前提:你的服务器必须开放redis的端口)。这时设置密码,就会多一层保护,只有知道密码的才可以访问。也就是任何知道密码的主机都可以访问到你的redis。

 

protected-mode是redis本身的一个安全层,这个安全层的作用:就是只有【本机】可以访问redis,其他任何都不可以访问redis。这个安全层开启必须满足三个条件,不然安全层处于关闭状态:

(1)protected-mode yes(处于开启)

(2)没有bind指令。原文:The server is not binding explicitly to a set of addresses using the "bind" directive.

(3)没有设置密码。原文:No password is configured。

这时redis的保护机制就会开启。开启之后,只有本机才可以访问redis。 如果上面三个条件任何一个不满足,就不会开启保护机制。

 

你可能感兴趣的:(redis配置文件中bind和protecte-mode的作用)