本地访问不到公网redis的解决方案

 更新时间:2024年08月14日 09:25:57   作者:坚持不懈的ape  
本文详述了本地访问不到公网redis的解决方案,包括分析报错原因、Redis配置文件的区别、bind和protected-mode配置的解析,最终通过修改Redis配置文件及创建启动脚本解决了访问不到公网redis得问题,需要的朋友可以参考下

一、目前情况

首先
我用的公网ip,即服务器地址是:106.14.xx.xx
由于我的redis是放到了服务器的docker容器中,
而端口映射是主机–>容器是:6380–>6379/tcp

所以在访问redis时,我需要访问的是
host:106.14.xx.xx
port:6380
因为肯定是要访问公网的,访问6380端口通过映射到docker中redis用的6379端口。

二、解决方案

方案一

我这里出现了一个问题,通过可视化工具根本连接不上redis数据库,所以考虑是配置文件中是否不允许外网的ip来访问【也可能是端口没在安全组?】。
所以我通过下面的语句,对服务器上的redis的配置文件进行了更改【进入的方式请看 容器与数据卷的对应关系这一节】,将原来的

bind 127.0.0.0

改成了:

bind 0.0.0.0

并且将下面的控制改成了no:

protected-mode no

方案二 !!!(重要)

经过上面一顿折腾,终于报错变了:

Redis Client On Error: ReplyError: NOAUTH Authentication required. Config right?

说明要验证身份!
这里最关键的一点就是,明明两个配置文件中都没有给redis配置密码,
即配置文件都是:
通过grep 'requirepass' /var/data/redis/redis.conf
显示# requirepass foobared说明唯一写密码的地方,也被注释掉了。

那为什么没有密码还要验证身份呢??!!
可能是因为 Redis 在启动时使用了不同的配置文件,或者在启动容器时通过命令行参数或环境变量设置了密码

(1) 关键!!检查通过启动命令行参数设置了密码这种情况,你需要通过下面的语句进行排查:

docker inspect --format='{{.Config.Cmd}}' redis

如果出现了:

[-- requirepass xxxxxx-- appendonly yes]

说明Redis 容器确实是通过启动命令行参数设置了密码 requirepass xxxxxx。这意味着即使在 redis.conf 文件中没有设置密码,Redis 也会使用这个命令行参数指定的密码(后面带着这个密码再访问,就可以正常连接公网上的redis了)。

(2) 检查 Redis 配置文件路径 (这一个地方可能不太对)

确认容器中的 Redis 实际使用的是哪个配置文件。有可能 Redis 使用的并不是 /usr/local/etc/redis/redis.conf 文件。

redis-cli CONFIG GET *config-file*

如果出现了:

1) "cluster-config-file"
2) "nodes.conf"

说明确实,之前改动配置文件是徒劳的,因为redis根本没有用那个配置文件。

容器与数据卷的对应关系

1.更改容器中的redis的配置文件

因为我的容器中的目录与数据卷(服务器上地址)的对应关系:
容器中的目录 ----》 数据卷(服务器上地址)
/usr/local/etc/redis ----》 /var/data/redis
/data ----》 /var/data/redis/data

所以此时我直接在服务器上访问容器中的redis的配置文件(或者进入docker,再进入docker的目录对配置文件进行更改):

[root@iZuf67k70ucx14s6zcv54dZ var]# 
vi /var/data/redis/redis.conf

2 更改服务器物理机上的redis的配置文件

我这里是通过:

sudo vi /www/server/redis/redis.conf

即可进入物理机上redis的配置文件。
同样修改完后,要进行重新启动:

sudo systemctl restart redis

重新描述一下

1. 服务器上的物理机 Redis

如果你需要修改服务器上物理机的 Redis 配置文件:

位置: 根据你之前的信息,配置文件的位置可能是 /www/server/redis/redis.conf。

操作: 直接在物理机上编辑这个文件,确保 bind 配置项是:

bind 0.0.0.0

重启 Redis: 修改后,重启 Redis 使配置生效。你可以通过服务管理工具(如 systemctl 或 service)来重启:

sudo systemctl restart redis

2. Docker 容器中的 Redis

如果你需要修改 Docker 容器中的 Redis 配置文件:

位置: 如果 Docker 容器中的 Redis 使用 /usr/local/etc/redis/redis.conf,你需要在这个路径下编辑配置文件。

操作: 如果文件在 Docker 容器中,首先进入容器:

docker exec -it <容器名或容器ID> bash

然后使用 vi 或其他编辑工具修改文件:

vi /usr/local/etc/redis/redis.conf

将 bind 配置项改为:

bind 0.0.0.0

重启 Docker 容器: 修改配置后,重启 Docker 容器以应用新配置:

docker restart <容器名或容器ID>

总结

如果你要修改的是物理机上的 Redis,直接在物理机上编辑配置文件 /www/server/redis/redis.conf。
如果你要修改的是Docker 容器中的 Redis,需要在 Docker 容器中编辑配置文件 /usr/local/etc/redis/redis.conf,并重启容器。
确保你编辑的是正确的配置文件并且正确重启了 Redis 服务或 Docker 容器,以确保更改生效。

以上就是本地访问不到公网redis的解决方案的详细内容,更多关于本地访问不到redis的资料请关注脚本之家其它相关文章!

相关文章

  • CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例(详解)

    CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例(详解)

    这篇文章主要介绍了CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Redis的常见四种部署方案

    Redis的常见四种部署方案

    这篇文章介绍Reids最为常见的四种部署模式,其实Reids和数据库的集群模式差不多,可以分为 Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署,其他的部署方式基本都是围绕以下几种方式在进行调整到适应的生产环境,感兴趣的朋友一起看看吧
    2023-11-11
  • Redis基本数据类型List常用操作命令

    Redis基本数据类型List常用操作命令

    这篇文章主要为大家介绍了Redis数据类型List常用命令操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Redis使用SETNX命令实现分布式锁

    Redis使用SETNX命令实现分布式锁

    分布式锁是一种用于在分布式系统中控制多个节点对共享资源进行访问的机制,本文主要为大家详细介绍了Redis如何使用SETNX命令实现分布式锁,需要的可以参考下
    2025-01-01
  • 使用redis获取自增序列号实现方式

    使用redis获取自增序列号实现方式

    这篇文章主要介绍了使用redis获取自增序列号实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 使用Redis实现微信步数排行榜功能

    使用Redis实现微信步数排行榜功能

    这篇文章主要介绍了使用Redis实现微信步数排行榜功能,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Redis Cluster 字段模糊匹配及删除

    Redis Cluster 字段模糊匹配及删除

    在数据库内我们可以通过like关键字、%、*或者REGEX关键字进行模糊匹配。而在Redis内我们如何进行模糊匹配呢?本文就来介绍一下
    2021-05-05
  • Redis核心原理与实践之字符串实现原理

    Redis核心原理与实践之字符串实现原理

    这本书深入地分析了Redis常用特性的内部机制与实现方式,内容源自对Redis源码的分析,并从中总结出设计思路、实现原理。对Redis字符串实现原理相关知识感兴趣的朋友一起看看吧
    2021-09-09
  • Redis分片集群存储的搭建到使用

    Redis分片集群存储的搭建到使用

    这篇文章主要介绍了Redis分片集群存储的搭建到使用,分片集群顾名思义,将数据分开存储到Redis集群中,这样能够存储更多的数据,避免浪费资源,需要的朋友可以参考下
    2022-06-06
  • Redis高并发超卖问题解决方案图文详解

    Redis高并发超卖问题解决方案图文详解

    Redis是一种基于内存的数据存储系统,被广泛用于解决高并发问题,下面这篇文章主要给大家介绍了关于Redis高并发超卖问题解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02

最新评论