本文主要介绍的是在默认安装完Redis后,不进行任何配置的情况下直接远程连接redis server时遇到问题的解决办法。
前期准备: 打开redis server所在机器防护墙的6379端口
iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
service iptables save
五种解决方法:
1. 在redis server端开启一个redis client然后运行'CONFIG SET protected-mode no',这个方法在重启redis server后失效
2. 在redis.conf中设置protected-mode no,默认是protected-mode yes, 这个方法在重启redis server后仍然有效
3. 启动redis server时加上参数 --protected-mode no,这种方法需要再启动时添加参数,比较麻烦而且如果实施人员忘记了会产生production issue
4. 绑定redis server的ip: bind 192.168.17.133
按照Redis关于网络配置的说明,默认情况下bind 127.0.0.1是注释掉的,这时只有redis server本机的client可以访问redis server,因为它运行在保护模式下,这是出于安全考虑的,因为不绑定任何ip意味着将redis server完全暴露在internet上,这是非常危险的,那么现在我们要在保护模式下远程通过redis server这台机器的网卡访问redis server, 所以我们还需要将这个网卡的ip绑定到redis server上,这样除了本机可以访问redis server外,其他机器也可以通过192.168.17.133这个网卡访问redis server, 当然我们也要绑定redis server的本地ip127.0.0.1,否则本地直接执行redis-cli就无法连接到redis server,正确的配置如下:
bind 127.0.0.1 192.168.17.133
5. 在redis.conf中开启密码,我设置的密码是michael123
requirepass michael123
-----------------------------详细的配置及测试过程----------------------------------
我们知道linux系统是有防火墙的,默认情况下redis server使用的6379端口是关闭状态,所以我们会先遇到无法连接的问题,这时就需要开启端口,root用户执行如下两个命令:
iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
service iptables save
执行上述命令后,我们执行查看防火墙规则的命令,会看到6379端口已经打开了:
[root@localhost src]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:6379
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
现在我们执行命令redis-server ../redis.conf 启动redis服务, ../redis.conf是原始的文件,我们没有做任何更改:
[root@localhost src]# pwd
/opt/soft/redis-4.0.8/src
[root@localhost src]# ./redis-server ../redis.conf
2750:C 11 Mar 07:06:49.098 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2750:C 11 Mar 07:06:49.098 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=2750, just started
2750:C 11 Mar 07:06:49.098 # Configura