Redis 存储 Session 鉴权时出现 ConnectionRefused 报错怎么解决?

文章导读
应用使用 Redis 存储 Session 鉴权时出现 ConnectionRefused 报错,通常是因为 Redis 服务未启动、网络端口不通或绑定地址配置错误。优先检查服务端运行状态和防火墙规则,再核对客户端连接配置。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

应用使用 Redis 存储 Session 鉴权时出现 ConnectionRefused 报错,通常是因为 Redis 服务未启动、网络端口不通或绑定地址配置错误。优先检查服务端运行状态和防火墙规则,再核对客户端连接配置。

先说结论:ConnectionRefused 表示 TCP 握手失败,核心在于网络可达性或服务监听状态,而非密码错误。

  • 先确认 Redis 服务进程是否存活
  • 先处理防火墙与安全组放行策略
  • 再验证客户端 telnet 连通性

命令速用版

在 Redis 服务端执行以下命令检查状态:

systemctl status redis

在应用服务端执行以下命令测试端口:

telnet <Redis IP> 6379

使用官方客户端工具验证:

redis-cli -h <Redis IP> -p 6379 ping

为什么会这样

ConnectionRefused 错误意味着客户端发出的 TCP 连接请求被操作系统内核直接拒绝。

Redis 存储 Session 鉴权时出现 ConnectionRefused 报错怎么解决?

常见原因包括 Redis 守护进程未运行、监听地址绑定为 127.0.0.1 导致外网无法访问、防火墙拦截了 6379 端口,或者 Redis 配置了 protected-mode 且未设置密码。

分步处理

步骤 1:检查 Redis 服务状态

登录 Redis 服务器,确认服务是否运行。如果状态为 inactive 或 failed,执行启动命令。

systemctl start redis

步骤 2:检查绑定地址配置

查看 redis.conf 配置文件中的 bind 参数。如果应用与 Redis 不在同一台机器,不能仅绑定 127.0.0.1。

Redis 存储 Session 鉴权时出现 ConnectionRefused 报错怎么解决?
bind 0.0.0.0

注意:开放 0.0.0.0 需配合防火墙策略和密码认证,避免暴露在内网之外。

步骤 3:检查防火墙与安全组

确认服务器操作系统防火墙(如 firewalld、iptables)和云厂商安全组是否放行 TCP 6379 端口。

步骤 4:核对应用连接配置

检查 Session 存储配置中的 Host、Port 是否正确,确认是否开启了密码认证要求。

Redis 存储 Session 鉴权时出现 ConnectionRefused 报错怎么解决?

怎么验证是否生效

在应用服务器上执行 redis-cli ping 命令,返回 PONG 表示网络层和协议层连通正常。

观察应用日志,ConnectionRefused 报错消失,Session 读写功能恢复。

常见坑

  • protected-mode 默认开启:如果未设置密码且绑定地址为 0.0.0.0,Redis 可能拒绝外部连接。
  • 端口变更:部分生产环境将默认 6379 端口修改为其他端口,需核对配置。
  • 连接池耗尽:虽然通常报错不同,但连接数满也可能导致新连接被拒,需检查 maxclients 配置。

常见问题

密码错误会报 ConnectionRefused 吗?

不会。密码错误通常返回 Auth failed 或 ERR AUTH 错误,ConnectionRefused 是网络层拒绝。

修改 bind 配置后需要重启吗?

需要。bind 参数属于启动加载项,修改 redis.conf 后必须重启 Redis 服务生效。

云服务器连不上 Redis 怎么办?

优先检查云控制台的安全组规则,确保入方向允许应用服务器 IP 访问 Redis 端口。

参考来源

  • Redis 官方文档 - Configuration 部分,关于 bind 和 protected-mode 说明,URL: https://redis.io/topics/config
  • Linux 系统管理文档 - systemctl 和 firewall 命令使用说明