应用使用 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 守护进程未运行、监听地址绑定为 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。
bind 0.0.0.0注意:开放 0.0.0.0 需配合防火墙策略和密码认证,避免暴露在内网之外。
步骤 3:检查防火墙与安全组
确认服务器操作系统防火墙(如 firewalld、iptables)和云厂商安全组是否放行 TCP 6379 端口。
步骤 4:核对应用连接配置
检查 Session 存储配置中的 Host、Port 是否正确,确认是否开启了密码认证要求。
怎么验证是否生效
在应用服务器上执行 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 命令使用说明