当前位置:首页 > 问答 > 正文

Redis远程连接总是被拒绝,尝试各种方法还是连不上,真让人头疼

朋友,你这问题可真是问到点子上了。“Redis远程连接被拒绝”,这事儿就像你明明带了钥匙,但家门就是打不开,急得你团团转,那种感觉我太懂了,网上教程看了一大堆,命令输了一遍又一遍,结果还是冷冰冰的“Connection refused”,确实让人火大又头疼,别慌,咱们今天就不整那些虚头巴脑的专业术语,就用大白话,像朋友聊天一样,把可能的原因一个个捋过去,你跟着检查,大概率能揪出那个“捣蛋鬼”。

最最常见的第一道关卡,就是Redis服务它自己压根儿就没启动,你想想,你拼命敲门,屋里没人,那能给你开吗?第一步,先确认Redis本尊是否在线,你登录到放Redis的那台服务器上(对,就是你想远程连接过去的那台机器),打开命令行,输入这么一句:ps -ef | grep redis,你要是看到有带着“redis-server”字样的进程在欢快地跑着,那说明服务是起来的,如果啥也没有,那就得像开机一样把它启动起来,怎么启动?通常是用这个命令:sudo systemctl start redis 或者 redis-server /你的redis配置文件路径/redis.conf,先确保这个“主人”在家。

Redis远程连接总是被拒绝,尝试各种方法还是连不上,真让人头疼

好,假设服务已经跑起来了,接下来就是第二堵墙,也是绝大多数人栽跟头的地方——Redis的配置文件(redis.conf),这个文件就像Redis的家规,它规定了谁能进、从哪儿进,你需要用文本编辑器(比如nano或vim)打开这个文件,检查以下几个关键条款:

  1. 绑定地址(bind):默认情况下,Redis出于安全考虑,非常“宅”,只愿意接待来自本机(127.0.0.1)的访客,所以你从外面连,它肯定拒绝,你需要找到 bind 这一行,稳妥的做法是,你把它改成 bind 0.0.0.0,这意味着“欢迎来自任何IP地址的连接”,这有点门户大开的感觉,生产环境最好指定具体IP,但咱们为了测试先这么干,改完记得保存。
  2. 保护模式(protected-mode):这是Redis的另一个保安,如果它发现你没有设置密码(下一步会说),而且又允许了非本机连接(比如你设置了bind 0.0.0.0),这个保安就会自动上岗,拒绝所有外部连接,你需要找到 protected-mode 这一行,把它改成 no,告诉保安“暂时歇会儿,我调试呢”。(再次强调,这仅用于测试,弄好后一定要设密码并重新开启保护模式)。
  3. 密码要求(requirepass):这是门锁的密码,如果这里设置了一串密码,requirepass mypassword,那么你远程连接的时候,就必须先输入密码才能进门,如果你没设密码,但前两项配置又很宽松,也可能连得上,但如果你设了密码,客户端连接时却没提供,那肯定吃闭门羹。

改完配置文件,千万别忘了最重要的一步:重启Redis服务,让新家规生效!命令通常是 sudo systemctl restart redis

Redis远程连接总是被拒绝,尝试各种方法还是连不上,真让人头疼

家规改好了,服务也重启了,是不是就万事大吉了?别急,还有第三道防线,它不在Redis本身,而在服务器的防火墙,想象一下,你家的门是开了,但小区大门(防火墙)没给你放行,你还是进不了楼,你得去服务器的防火墙规则里看看,是否允许了Redis服务端口(默认是6379)的流量通过,对于CentOS的firewalld,你需要运行 sudo firewall-cmd --permanent --add-port=6379/tcp 然后重载防火墙,对于Ubuntu的ufw,则是 sudo ufw allow 6379,这一步操作,相当于在小区门卫那儿给你做了个登记。

如果以上三步——服务在运行、配置已放宽、防火墙已开放——都确认无误了,绝大多数情况下,你的远程连接就应该成功了,你可以先在Redis服务器本机上,用 redis-cli -h 你服务器的公网IP 试试能不能连,如果本机都连不上,那说明还是Redis配置的问题,如果本机能连,但外网机器连不上,那大概率是防火墙或者网络策略(比如云服务商的安全组)的问题。

对了,差点忘了说,尤其是如果你用的是阿里云、腾讯云这类云服务器,它们除了系统自带的防火墙,还有一个叫安全组的东西,这个东西相当于云平台的虚拟防火墙,功能更强大,你必须在这个安全组的入站规则里,添加一条允许TCP协议、端口6379(或你的自定义端口)的规则,源地址可以是你自己电脑的IP,或者为了测试先放行所有IP(0.0.0.0/0),很多老手都会在这里疏忽。

还有一个不那么常见但可能的原因,就是Redis监听的端口不是默认的6379,你可以通过命令 netstat -tunlp | grep redis 来看看Redis到底在监听哪个端口,确保你的客户端连接命令里填的端口号是对的。

排查这个问题的路径就像破案:先确定“人”(Redis服务)在不在家;再检查“家规”(配置文件)允不允许你进;然后看看“小区大门”(服务器防火墙和云安全组)给不给你放行,一步一步来,别跳步,每做完一步就测试一下,这个过程是有点繁琐,但一旦搞定,那种豁然开朗的感觉,绝对能让你瞬间忘记之前的头疼,祝你顺利!

Redis远程连接总是被拒绝,尝试各种方法还是连不上,真让人头疼