文档首页> 常见问题> Redis 连不上:bind 与 protected-mode

Redis 连不上:bind 与 protected-mode

发布时间:2026-08-31 19:42        更新时间:2026-09-01 13:17
刚装好的 Redis 本机 redis-cli 测试一切正常,换台机器就连不上,问题多半出在两个默认安全配置上:bind 和 protected-mode。 ## 默认只听本机 装完先确认监听状态: ss -lntp | grep 6379 如果输出是 127.0.0.1:6379,说明 Redis 只接受本机连接。原因在配置文件里的 bind 行(Ubuntu 常见路径 /etc/redis/redis.conf,CentOS 常见 /etc/redis.conf),默认值形如: bind 127.0.0.1 ::1 要接受内网访问,把这一行改成内网地址,例如 bind 127.0.0.1 10.0.0.5,或者监听全部网卡写 0.0.0.0。改完执行 systemctl restart redis,再用远程机器 redis-cli -h 10.0.0.5 ping 验证,返回 PONG 才算通。 验证改动是否被读到,redis-cli 里执行 CONFIG GET bind 比翻文件更直接——它返回的是运行中的实际值,文件改了没重启时,两者会不一致。 ## protected-mode 的保护逻辑 protected-mode 是 Redis 3.2 引入的保护机制:开启状态下,如果没有配置密码且访问来自非本机地址,连接会被直接拒绝。它挡住的正是"bind 放开了、又忘了设密码"这种裸奔组合。所以两个参数要一起看:只改 bind 不动 protected-mode,远程连接照样被拒。关掉它的配置是 protected-mode no,但前提是必须同时设置好密码。 判断是不是 protected-mode 拦的,看客户端报错原文:出现 DENIED Redis is running in protected mode 字样即可确认,再按提示二选一,设密码或关保护,别凭感觉两头乱试。 ## 改动前先划清安全边界 给三个动作,按顺序做: 1. requirepass 换成足够长的密码,建议 16 位以上; 2. bind 只写内网地址,公网一律不监听; 3. 用防火墙或云控制台的安全组,把 6379 的来源收敛到应用服务器的 IP。 多实例共用的机器还有个细节:多个 Redis 端口不同、配置文件各自独立,改错文件是常有的事。ps aux | grep redis 看清每个实例用的配置路径,再动手改。 Redis 历史上多次出现因裸奔被扫到导致数据被清空的安全事件,这两行配置就是最基本的防线。改完在 redis-cli 里执行 CONFIG GET bind 和 CONFIG GET requirepass 复核一遍,把当时的值记进运维文档,下次排障直接对表。配置收尾再做一次回归:本机 redis-cli 登录要密码、内网 redis-cli -h 能通、公网 telnet 6379 应被拒绝,三个结果都符合预期才算收工。