今天免费领取了一台云耀云服务器,但是在部署redis的时候碰到了redis在外网无法访问的情况,以下是针对碰到的问题,解决过程的记录。

如果配置Redis在不可预知的情况下只能在内网访问,而外网无法访问,先检查一下步骤是否配置 1、需要考虑到Redis配置本身是否支持远程外网访问,在redis的配置文件中找到bind参数,如果bind参数配置为127.0.0.1则不允许外网访问,此时我们需要改变它的配置,将bind参数注释掉,或者是修改为0.0.0.0,或者是相应的外网ip 地址,然后保存配置 2、其次需要考虑到Redis的安全控制,在Redis的配置文件中有一个可配置的参数 protected-mode, 如果该参数设置为yes, 则只允许本地访问,此时需要将protected-mode 参数设置为no,即可允许外网访问 3、最后需要考虑到防火墙的设置,由于Redis占用6379端口,因此我们可用

# 开放端口
sudo firewall-cmd --add-port=6379/tcp --permanent
# 重启防火墙
sudo firewall-cmd --reload

因为领到的服务器默认关闭了防火墙,所以只按照上面的1,2 步骤设置了Redis的配置文件,未设置redis的密码,按照指定配置文件的方式启动了Redis服务

查看reids启动情况,reids是启动的,

redis通过6379端口无法连接服务器_配置文件

尝试使用RedisDesktopManager连接redis,发现无法连接,日志的报错为连接超时

redis通过6379端口无法连接服务器_Redis_02

百度了大多数的答案说的都是修改ip,开放端口之后问题就解决了,因为我是一步一步操作下来的,所以这些配置极其确定是没有问题的,而且都是反复查看过的

其实redis无法连接数据库就只有这几种可能,防火墙,安全组,密码,绑定IP。这次的问题感觉还是比较让人费解的,当更换端口号的时候就可以,默认端口6379就是不行。

按照顺序依次检查了防火墙,安全组,密码,配置文件,都确认没有问题之后,再次启动redis,依然是服务器可以访问,本地telnet都无法连接。这个问题很像是防火墙和绑定IP的原因。

所以我再次检查firewall防火墙(firewall-cmd --state)和iptables(service iptables status)防火墙,首先看到的是firewall防火墙是没有运行的

redis通过6379端口无法连接服务器_配置文件_03

,再去检查iptables防火墙的状态

redis通过6379端口无法连接服务器_配置文件_04

这句话的意思是,找不到iptables,那就是因为系统版本的原因,已经由firewall防火墙接管了。那自然也就不再考虑是因为防火墙的原因,导致无法连接服务器。但是难受的事就在这里,当使用 iptables -L -n查看已设置的iptables规则,它竟然存在安全组规则......

redis通过6379端口无法连接服务器_Redis_05

上边结果显示范围内的端口号都只能本地访问,6379自然也就不能被访问到了。知道原因就好办了,直接使用 iptables -F将这些规则都清除掉,再次使用

iptables -L -n查看,规则都不存在了,

redis通过6379端口无法连接服务器_Redis_06

使用telnet测试服务器端口号,也可以正常连接了。这里面个人最不能理解的地方就是为什么iptables 防火墙不存在,竟然还存在它的规则。至此问题解决,有可以开心的玩耍了......