首頁  >  文章  >  資料庫  >  redis中bind的真實作用是什麼

redis中bind的真實作用是什麼

王林
王林轉載
2021-03-10 09:36:206449瀏覽

redis中bind的真實作用是什麼

我一直以為redis設定檔中的bind的作用是:限制redis伺服器用來接收哪些伺服器(IP位址)的redis連線請求,只有在bind指定的IP位址的電腦才可以存取這個redis伺服器。

事實證明,上面的結論大錯特錯。

今天在搭建Redis服務集群的時候,發現自己一直以來對Redis中bind的理解的一個誤解。

例如:

bind 127.0.0.1      就是用來限制只有本機可以連接redis服務連接

bind 0.0.0.0         就是用來允許任何電腦都可以連接到允許任何電腦服務連線。

注意:以上的理解都是錯誤的。他們正好是特例,對我們產生了一種錯覺。

不信的話你們可以試試看:(最好試試看)

bind 10.0.0.1(或除了127.0.0.1和0.0.0.0之外的任何IP位址)

然後重啟redis,就會發現啟動不起來。

redis中bind的真實作用是什麼

對於為什麼啟動不起來,你們知道了bind的真正意思之後,就會明白啟動不起來的原因。

對於Redis中bind的正確的理解是:

bind:是綁定本機的IP位址,(準確的是:本機的網卡對應的IP位址,每一個網卡都有一個IP位址),而不是redis允許來自其他電腦的IP位址。

如果指定了bind,則說明只允許來自指定網路卡的Redis請求。如果沒有指定,就表示可以接受來自任一個網卡的Redis請求。

舉例:如果redis伺服器(本機)上有兩個網路卡,每個網路卡對應一個IP位址,例如IP1和IP2。 (注意這個IP1和IP2都是本機的IP位址)。

我們的設定檔:bind IP1。  只有我們透過IP1來存取redis伺服器,才允許連接Redis伺服器,如果我們透過IP2來存取Redis伺服器,就會連不上Redis。

查看本機的網路卡對應的IP位址:使用ifconfig指令。

redis中bind的真實作用是什麼

(學習影片分享:redis影片教學

從上面看出我們有兩個網卡,也就是我們只能使用:127.0.0.1和172.18.235.206最bind的位址,不然redis啟動不起來。

這就說明了上面範例(bind 10.0.0.1)為什麼啟動不起來,因為我們沒有對應的網路卡IP位址。這就說明了bind並不是指定redis中可以接受來自哪些伺服器請求的IP位址。

而是:bind用來指定本機網路卡對應的IP位址。

附註:

bind 127.0.0.1的解釋:(為什麼只有本機可以連接,而其他不能連接)

我們從ifconfig可以看出:lo網卡(對應127.0.0.1IP位址):是一個回環位址(Local Loopback),也就是只有本地才能存取到這個回環位址,而其他的電腦也只能存取他們自己的回環位址。

那麼來自這個lo網卡的電腦只有本機,所以只有本機可以訪問,而其他電腦不能存取。

bind 172.18.235.206的話,只要透過這個網卡位址(172.18.235.206)來的Redis請求,都可以存取redis。我使用的阿里雲的伺服器。我在另一台伺服器上去請求              redis-cli 阿里雲公網IP位址        連接至redis伺服器。

因為公有網路位址的請求:都是經過這個eth0的網路卡位址(172.18.235.206),因此接收到這個redis請求。

當你們不使用那個回環位址,基本上外部的電腦都可以存取本機的Redis伺服器。

如果我們想要限制只有指定的主機可以連線到redis中,我們只能透過防火牆來控制,而不能透過redis中的bind參數來限制。

使用阿里雲的安全群組,來限制指定的主機連線6379連接埠。

redis中的【protected-mode】的理解:

redis本身無法限制【只有指定主機】連接到redis中,就像我上面說的一樣,bind指定只是用來設定介面位址(interfaces)。

1、如果你的bind設定為:bind 127.0.0.1,這是非常安全的,因為只有本台主機可以連接到redis,就算不設定密碼,也是安全的,除非有人登入你的伺服器上。

2、如果你的bind設定為:bind 0.0.0.0,表示所有主機都可以連接到redis。 (前提:你的伺服器必須開放redis的連接埠)。這時設定密碼,就會多一層保護,只有知道密碼的才可以存取。也就是任何知道密碼的主機都可以存取到你的redis。

protected-mode是redis本身的一個安全層,這個安全層的作用:就是只有【本機】可以存取redis,其他任何都不可以存取redis。這個安全層開啟必須滿足三個條件,不然安全層處於關閉狀態:

(1)protected-mode yes(處於開啟)

(2)沒有bind指令。原文:The server is not binding explicitly to a set of addresses using the "bind" directive.

(3)沒有設定密碼。原文:No password is configured。

這時redis的保護機制就會開啟。開啟之後,只有本機才可以存取redis。如果上面三個條件任何一個不滿足,就不會開啟保護機制。

相關建議:redis資料庫教學

原文連結:https://blog.csdn.net/cw_hello1/article/details/83444013

以上是redis中bind的真實作用是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除