本地訪問(wèn)不到公網(wǎng)redis的解決方案
一、目前情況
首先
我用的公網(wǎng)ip,即服務(wù)器地址是:106.14.xx.xx
由于我的redis是放到了服務(wù)器的docker容器中,
而端口映射是主機(jī)–>容器是:6380–>6379/tcp
所以在訪問(wèn)redis時(shí),我需要訪問(wèn)的是
host:106.14.xx.xx
port:6380
因?yàn)榭隙ㄊ且L問(wèn)公網(wǎng)的,訪問(wèn)6380端口通過(guò)映射到docker中redis用的6379端口。
二、解決方案
方案一
我這里出現(xiàn)了一個(gè)問(wèn)題,通過(guò)可視化工具根本連接不上redis數(shù)據(jù)庫(kù),所以考慮是配置文件中是否不允許外網(wǎng)的ip來(lái)訪問(wèn)【也可能是端口沒(méi)在安全組?】。
所以我通過(guò)下面的語(yǔ)句,對(duì)服務(wù)器上的redis的配置文件進(jìn)行了更改【進(jìn)入的方式請(qǐng)看 容器與數(shù)據(jù)卷的對(duì)應(yīng)關(guān)系這一節(jié)】,將原來(lái)的
bind 127.0.0.0
改成了:
bind 0.0.0.0
并且將下面的控制改成了no:
protected-mode no
方案二 !!!(重要)
經(jīng)過(guò)上面一頓折騰,終于報(bào)錯(cuò)變了:
Redis Client On Error: ReplyError: NOAUTH Authentication required. Config right?
說(shuō)明要驗(yàn)證身份!
這里最關(guān)鍵的一點(diǎn)就是,明明兩個(gè)配置文件中都沒(méi)有給redis配置密碼,
即配置文件都是:
通過(guò)grep 'requirepass' /var/data/redis/redis.conf
顯示# requirepass foobared說(shuō)明唯一寫(xiě)密碼的地方,也被注釋掉了。
那為什么沒(méi)有密碼還要驗(yàn)證身份呢????!
可能是因?yàn)?Redis 在啟動(dòng)時(shí)使用了不同的配置文件,或者在啟動(dòng)容器時(shí)通過(guò)命令行參數(shù)或環(huán)境變量設(shè)置了密碼
(1) 關(guān)鍵?。z查通過(guò)啟動(dòng)命令行參數(shù)設(shè)置了密碼這種情況,你需要通過(guò)下面的語(yǔ)句進(jìn)行排查:
docker inspect --format='{{.Config.Cmd}}' redis
如果出現(xiàn)了:
[-- requirepass xxxxxx-- appendonly yes]
說(shuō)明Redis 容器確實(shí)是通過(guò)啟動(dòng)命令行參數(shù)設(shè)置了密碼 requirepass xxxxxx。這意味著即使在 redis.conf 文件中沒(méi)有設(shè)置密碼,Redis 也會(huì)使用這個(gè)命令行參數(shù)指定的密碼(后面帶著這個(gè)密碼再訪問(wèn),就可以正常連接公網(wǎng)上的redis了)。
(2) 檢查 Redis 配置文件路徑 (這一個(gè)地方可能不太對(duì))
確認(rèn)容器中的 Redis 實(shí)際使用的是哪個(gè)配置文件。有可能 Redis 使用的并不是 /usr/local/etc/redis/redis.conf 文件。
redis-cli CONFIG GET *config-file*
如果出現(xiàn)了:
1) "cluster-config-file" 2) "nodes.conf"
說(shuō)明確實(shí),之前改動(dòng)配置文件是徒勞的,因?yàn)閞edis根本沒(méi)有用那個(gè)配置文件。
容器與數(shù)據(jù)卷的對(duì)應(yīng)關(guān)系
1.更改容器中的redis的配置文件
因?yàn)槲业娜萜髦械哪夸浥c數(shù)據(jù)卷(服務(wù)器上地址)的對(duì)應(yīng)關(guān)系:
容器中的目錄 ----》 數(shù)據(jù)卷(服務(wù)器上地址)
/usr/local/etc/redis ----》 /var/data/redis
/data ----》 /var/data/redis/data
所以此時(shí)我直接在服務(wù)器上訪問(wèn)容器中的redis的配置文件(或者進(jìn)入docker,再進(jìn)入docker的目錄對(duì)配置文件進(jìn)行更改):
[root@iZuf67k70ucx14s6zcv54dZ var]# vi /var/data/redis/redis.conf
2 更改服務(wù)器物理機(jī)上的redis的配置文件
我這里是通過(guò):
sudo vi /www/server/redis/redis.conf
即可進(jìn)入物理機(jī)上redis的配置文件。
同樣修改完后,要進(jìn)行重新啟動(dòng):
sudo systemctl restart redis
重新描述一下
1. 服務(wù)器上的物理機(jī) Redis
如果你需要修改服務(wù)器上物理機(jī)的 Redis 配置文件:
位置: 根據(jù)你之前的信息,配置文件的位置可能是 /www/server/redis/redis.conf。
操作: 直接在物理機(jī)上編輯這個(gè)文件,確保 bind 配置項(xiàng)是:
bind 0.0.0.0
重啟 Redis: 修改后,重啟 Redis 使配置生效。你可以通過(guò)服務(wù)管理工具(如 systemctl 或 service)來(lái)重啟:
sudo systemctl restart redis
2. Docker 容器中的 Redis
如果你需要修改 Docker 容器中的 Redis 配置文件:
位置: 如果 Docker 容器中的 Redis 使用 /usr/local/etc/redis/redis.conf,你需要在這個(gè)路徑下編輯配置文件。
操作: 如果文件在 Docker 容器中,首先進(jìn)入容器:
docker exec -it <容器名或容器ID> bash
然后使用 vi 或其他編輯工具修改文件:
vi /usr/local/etc/redis/redis.conf
將 bind 配置項(xiàng)改為:
bind 0.0.0.0
重啟 Docker 容器: 修改配置后,重啟 Docker 容器以應(yīng)用新配置:
docker restart <容器名或容器ID>
總結(jié)
如果你要修改的是物理機(jī)上的 Redis,直接在物理機(jī)上編輯配置文件 /www/server/redis/redis.conf。
如果你要修改的是Docker 容器中的 Redis,需要在 Docker 容器中編輯配置文件 /usr/local/etc/redis/redis.conf,并重啟容器。
確保你編輯的是正確的配置文件并且正確重啟了 Redis 服務(wù)或 Docker 容器,以確保更改生效。
以上就是本地訪問(wèn)不到公網(wǎng)redis的解決方案的詳細(xì)內(nèi)容,更多關(guān)于本地訪問(wèn)不到redis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實(shí)例(詳解)
這篇文章主要介紹了CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實(shí)例,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01Redis基本數(shù)據(jù)類型List常用操作命令
這篇文章主要為大家介紹了Redis數(shù)據(jù)類型List常用命令操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Redis使用SETNX命令實(shí)現(xiàn)分布式鎖
分布式鎖是一種用于在分布式系統(tǒng)中控制多個(gè)節(jié)點(diǎn)對(duì)共享資源進(jìn)行訪問(wèn)的機(jī)制,本文主要為大家詳細(xì)介紹了Redis如何使用SETNX命令實(shí)現(xiàn)分布式鎖,需要的可以參考下2025-01-01使用redis獲取自增序列號(hào)實(shí)現(xiàn)方式
這篇文章主要介紹了使用redis獲取自增序列號(hào)實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12使用Redis實(shí)現(xiàn)微信步數(shù)排行榜功能
這篇文章主要介紹了使用Redis實(shí)現(xiàn)微信步數(shù)排行榜功能,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Redis核心原理與實(shí)踐之字符串實(shí)現(xiàn)原理
這本書(shū)深入地分析了Redis常用特性的內(nèi)部機(jī)制與實(shí)現(xiàn)方式,內(nèi)容源自對(duì)Redis源碼的分析,并從中總結(jié)出設(shè)計(jì)思路、實(shí)現(xiàn)原理。對(duì)Redis字符串實(shí)現(xiàn)原理相關(guān)知識(shí)感興趣的朋友一起看看吧2021-09-09Redis高并發(fā)超賣(mài)問(wèn)題解決方案圖文詳解
Redis是一種基于內(nèi)存的數(shù)據(jù)存儲(chǔ)系統(tǒng),被廣泛用于解決高并發(fā)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Redis高并發(fā)超賣(mài)問(wèn)題解決方案的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02