之前使用bind配置时,经常被困扰,以为bind配置,是配置白名单,配置了对应的客户端ip,那么该客户端才能访问Redis,今天恰好使用到了该配置,为了验证之前的想法时候正确,自己动手实践一下:
当前机器有eth0、eth1、lo网卡
lo 对应本地ip - 127.0.0.1
eth0: 对应ip - 192.168.0.62
eth1: 对应ip - 33.0.1.28
首先,验证最初的想法, 修改redis的配置文件,bind配置客户端的ip地址172.168.0.62,然后重启redis实例,
等了许久,未发现redis启动,有点奇怪,检查一下redis的启动日志,发现报错如下,服务端不能监听该Ip:port,这就与之前的白名单想法冲突了,配置了客户端地址反而启动失败了!!!
继续验证,修改配置文件,bind 配置了127.0.0.1, 重启redis实例,然后通过客户端连接./redis-cli -h 127.0.0.1 -p 20032,发现可以连接,但是redis-cli -h 192.168.0.62 -p 20032和redis-cli -h 33.0.1.28 -p 20032连接被拒绝了。那如果bind配置改成192.168.0.62会怎么样?
继续验证,修改配置文件,bind 配置成192.168.0.62,./redis-cli -h 192.168.0.62 -p 20032,发现可以连接,但是redis-cli -h 127.0.0.1 -p 20032和redis-cli -h 33.0.1.28 -p 20032连接被拒绝了,这时心里大概明白怎么回事了。
继续验证,修改配置文件,bind 配置成33.0.1.28,./redis-cli -h 33.0.1.28 -p 20032,发现可以连接,但是redis-cli -h 127.0.0.1 -p 20032和redis-cli -h 192.168.0.62 -p 20032连接被拒绝了。
如果bind绑定33.0.1.28,192.168.0.62,那redis-cli -h 192.168.0.62 -p 20032和redis-cli -h 33.0.1.28 -p 20032都可以访问了!
实验到这里就清晰了,
- bind指定单个地址, 例如 bind 127.0.0.1, 那么Redis 只监听本地回环接口上的连接请求;
- 指定多个地址:你也可以在 bind 中指定多个 IP 地址,用空格分隔,例如 bind 168.0.62,那么Redis 同时监听本地回环接口和指定的 IP 地址上的连接请求;
- 如果未在配置文件中显式设置 bind,Redis 默认将监听所有可用网络接口上的连接请求;