解决方法:在本地电脑安装的Centos虚拟机上启动redis服务,使用本地电脑客户端无法连接到redis。

1. 检查并配置CentOS防火墙

CentOS使用firewalld而不是ufw

bash

复制代码
# 检查防火墙状态
sudo systemctl status firewalld

# 如果防火墙运行,开放Redis端口
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload

# 确认端口已开放
sudo firewall-cmd --list-ports

如果不想使用防火墙临时测试:

bash

复制代码
# 临时关闭防火墙
sudo systemctl stop firewalld

# 永久关闭防火墙(不推荐生产环境)
sudo systemctl disable firewalld

2. 检查SELinux状态

SELinux可能会阻止外部连接:

bash

复制代码
# 检查SELinux状态
getenforce

# 如果是Enforcing模式,临时禁用
sudo setenforce 0

# 或者永久禁用(编辑配置文件)
sudo nano /etc/selinux/config
# 修改为:SELINUX=disabled

3. 修改Redis配置文件

编辑Redis配置文件:

bash

复制代码
sudo nano /etc/redis.conf

找到并修改以下关键配置:

conf

复制代码
# 注释掉绑定本地,或改为 0.0.0.0
# bind 127.0.0.1
bind 0.0.0.0

# 关闭保护模式
protected-mode no

# 如果需要密码认证(推荐)
# requirepass yourpassword

# 确保不是以守护进程方式运行(如果连接还有问题)
daemonize no

4. 重启Redis服务

bash

复制代码
# 重启Redis服务
sudo systemctl restart redis

# 检查服务状态
sudo systemctl status redis

# 设置开机自启
sudo systemctl enable redis

5. 检查网络监听

bash

复制代码
# 检查Redis是否在正确端口监听
sudo netstat -tlnp | grep redis
# 或使用ss命令
sudo ss -tlnp | grep redis

# 应该看到:0.0.0.0:6379

6. 获取CentOS虚拟机IP地址

bash

复制代码
# 查看IP地址
ip addr show
# 或
hostname -I

记下IP地址(通常是192.168.x.x或10.0.x.x)。

7. 测试本地连接

在CentOS虚拟机上测试Redis:

bash

复制代码
# 本地连接测试
redis-cli ping
# 应该返回:PONG

# 如果设置了密码
redis-cli -a yourpassword ping

8. 从宿主机测试连接

在您的本地电脑上测试:

bash

复制代码
# 使用redis-cli
redis-cli -h <CentOS_IP> -p 6379 ping

# 如果连接成功,返回PONG

# 如果设置了密码
redis-cli -h <CentOS_IP> -p 6379 -a yourpassword ping

9. CentOS专用诊断脚本

在CentOS虚拟机上运行这个完整的诊断脚本:

bash

复制代码
#!/bin/bash
echo "=== CentOS Redis连接诊断 ==="

echo "1. Redis服务状态:"
sudo systemctl status redis --no-pager -l

echo -e "\n2. 防火墙状态:"
sudo systemctl status firewalld --no-pager -l
echo "开放端口:"
sudo firewall-cmd --list-ports

echo -e "\n3. SELinux状态:"
getenforce

echo -e "\n4. 网络监听:"
sudo netstat -tlnp | grep redis

echo -e "\n5. 虚拟机IP地址:"
ip addr show | grep inet

echo -e "\n6. 测试本地Redis连接:"
redis-cli ping

echo -e "\n诊断完成"

10. 如果仍有问题,检查虚拟机网络设置

VirtualBox:

  • 网络适配器选择"桥接网卡"

  • 或设置端口转发:

    • 设置 → 网络 → 高级 → 端口转发

    • 添加规则:主机端口6379 → 客户机端口6379

VMware:

  • 网络适配器选择"桥接模式"

  • 或配置NAT端口转发

11. 安全建议

生产环境中建议:

conf

复制代码
# 在redis.conf中
bind <虚拟机具体IP>  # 而不是0.0.0.0
requirepass 强密码
rename-command FLUSHDB ""
rename-command FLUSHALL ""

按照以上步骤操作,应该能解决CentOS虚拟机上的Redis连接问题。最常见的原因是防火墙、SELinux和Redis绑定配置。

相关推荐
清风拂山岗 明月照大江2 分钟前
Redis笔记汇总
java·redis·缓存
承渊政道3 分钟前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
技术路上的探险家4 分钟前
Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)
linux·ubuntu·docker
代码AC不AC7 分钟前
【Linux】深入理解缓冲区
linux·缓冲区·标准错误
Doro再努力11 分钟前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
Lsir10110_31 分钟前
【Linux】进程信号(上半)
linux·运维·服务器
开开心心就好1 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
消失的旧时光-19431 小时前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
予枫的编程笔记2 小时前
【Linux进阶篇】从基础到实战:grep高亮、sed流编辑、awk分析,全场景覆盖
linux·sed·grep·awk·shell编程·文本处理三剑客·管道命令
Sheep Shaun2 小时前
揭开Linux的隐藏约定:你的第一个文件描述符为什么是3?
linux·服务器·ubuntu·文件系统·缓冲区