redis远程连接被拒绝的根本原因是bind和protected-mode双重限制;必须同时将bind改为0.0.0.0(或指定ip)且关闭protected-mode(或设置requirepass),否则即使bind修改正确,protected-mode仍会主动拦截非本地连接。

Redis默认只允许本地连接,远程连接被直接拒绝——这不是网络或防火墙问题,而是bind和protected-mode两个配置共同作用的结果。改对这两处,远程连通率接近100%;只改一处,大概率仍连不上。
为什么改了 bind 还连不上?protected-mode 是隐形拦截器
很多人把 bind 127.0.0.1 改成 bind 0.0.0.0 或删掉该行,但依然无法远程连接。这是因为 Redis 6.0+ 默认开启 protected-mode yes:只要没配 bind 也没设 requirepass,它就会主动拒绝所有非本地连接,连端口都不响应。
- 必须同时满足以下任一条件,
protected-mode才会放行:bind显式指定 IP(如bind 0.0.0.0),或requirepass已设置密码 - 生产环境强烈建议两者都配:既绑定明确网卡,又启用密码,而不是单纯关掉
protected-mode - 临时调试可设
protected-mode no,但上线前务必恢复为yes并补全安全配置
bind 配置的三种写法及其实际效果
bind 控制监听的网络接口,不同写法直接影响能否被远程访问,也影响安全性边界:
-
bind 127.0.0.1:仅监听回环地址,远程完全不可达(默认值) -
bind 0.0.0.0:监听所有 IPv4 接口,但需配合protected-mode no或requirepass才生效 -
bind 192.168.1.100:只监听指定内网 IP,适合多网卡服务器,更精准可控
注意:bind 不支持 CIDR 写法(如 bind 192.168.1.0/24),也不能用通配符;多个 IP 用空格分隔,例如 bind 192.168.1.100 10.0.0.5。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
改完配置后必须 reload,不是 restart
修改 redis.conf 后,不要直接 kill -9 再 redis-server 启动——这会中断所有客户端连接,且可能丢失未持久化数据。
- 推荐方式:执行
redis-cli CONFIG REWRITE,让 Redis 自动重写配置文件并热应用变更(前提是配置语法正确) - 若
CONFIG REWRITE报错,说明配置有误,先用redis-check-conf /path/to/redis.conf检查 - 确认无误后,再用
redis-cli CONFIG SET protected-mode no(或设密码)临时生效,最后CONFIG REWRITE持久化
特别注意:CONFIG SET 修改的项重启即失效,必须搭配 CONFIG REWRITE 或手动同步到文件,否则下次启动还是老配置。
连通性验证与常见失败点
改完配置不等于连通成功,常因以下细节卡住:
- Linux 防火墙(
iptables或firewalld)未放行port指定的端口(默认 6379) - 云服务器安全组规则未开放对应端口,比本地防火墙更常被忽略
-
tcp-backlog值太小(默认 511),在高并发连接场景下导致 SYN 队列溢出,表现为“连接超时”而非“拒绝连接” - 客户端使用了错误协议:Redis 6.0+ 默认启用 TLS,若未配证书却用
rediss://,会静默失败
最简验证命令:telnet your-server-ip 6379。能通说明网络和 Redis 监听层 OK;若返回 Connection refused,重点查 bind、protected-mode 和端口是否被占;若卡住不动,优先排查防火墙与安全组。










