生产环境推荐包管理器安装Redis,须修改redis.conf中bind为0.0.0.0、protected-mode为no并设置requirepass密码,再重启服务、放行6379端口(含云安全组),否则远程连接必然失败。

确认系统环境和安装方式选择
Redis 在 Linux 上主流安装方式有源码编译、包管理器安装(如 apt/yum/dnf)和容器部署。生产环境建议用包管理器安装,省去依赖处理和 systemd 集成问题;开发或需特定版本时再考虑源码编译。redis-server --version 能快速验证是否已装及版本。Ubuntu 22.04+ 默认仓库中 redis-server 版本为 6.0.x,CentOS Stream 9 的 dnf 源提供 7.0.x,但较旧发行版(如 CentOS 7)默认源只有 3.2,必须手动升级或换源——这点常被忽略,导致后续配置远程访问失败却误以为是配置问题。
推荐操作:
- Ubuntu/Debian:
sudo apt update && sudo apt install redis-server - CentOS/RHEL 8+:
sudo dnf install redis - CentOS 7:先启用 EPEL 源,再执行
sudo yum install redis,或直接下载官方 RPM(注意 glibc 版本兼容性)
修改 redis.conf 启用远程访问
Redis 默认绑定 127.0.0.1 且启用保护模式(protected-mode yes),这是远程连不上的根本原因。不能只改 bind,还要同步关掉保护模式或设密码——否则即使绑定了 0.0.0.0,启动时也会拒绝非本地连接。
关键配置项(在 /etc/redis/redis.conf 中修改):
-
bind 127.0.0.1 ::1→ 改为bind 0.0.0.0(IPv4 全开)或bind 0.0.0.0 ::(同时支持 IPv6) -
protected-mode yes→ 必须改为protected-mode no,否则 bind 生效也无效 -
requirepass foobared→ 解开注释并设强密码(如requirepass Jx9#kL2@qW$),这是远程访问的强制安全底线 -
daemonize yes确保后台运行(systemd 环境下此值实际由服务单元控制,但保留为 yes 更稳妥)
调整防火墙与 systemd 服务
改完配置不重启服务等于没改。systemd 下必须重载配置并重启,且要检查防火墙是否放行 6379 端口。UFW(Ubuntu)和 firewalld(RHEL/CentOS)规则写法不同,容易漏掉。
操作顺序不能错:
- 保存
redis.conf后执行:sudo systemctl daemon-reload - 重启服务:
sudo systemctl restart redis-server(Ubuntu)或sudo systemctl restart redis(RHEL) - 检查状态:
sudo systemctl status redis,确认 Active: active (running),且日志无Failed to bind或Could not create server TCP listening socket - 放行端口:
sudo ufw allow 6379(Ubuntu)或sudo firewall-cmd --permanent --add-port=6379/tcp && sudo firewall-cmd --reload(RHEL)
6379,这比本地防火墙更容易被遗忘。
验证远程连接与常见连不上原因
用另一台机器执行 redis-cli -h <server-ip> -p 6379 -a <password></password></server-ip> 测试。连不上时别急着重配,先查三处:
典型错误链路:
- telnet
6379 不通 → 查云安全组、本地防火墙、 redis-server是否真在监听:ss -tlnp | grep :6379 - 能 telnet 通但
redis-cli报NOAUTH Authentication required→ 密码没设或客户端没带-a - 报
DENIED Redis is running in protected mode→protected-mode没关,哪怕 bind 已改 - 报
Connection refused且ss查不到监听 → redis 进程崩溃,看journalctl -u redis -n 50找具体错误(常见于配置语法错误、requirepass行末多了空格)
protected-mode 和云平台安全组这两处,而不是 bind 地址本身。


















