Redis預設並不允許遠端裝置的連線,而為了要能夠讓它允許遠端連線,就必須要進行一些額外的設定。



執行以下指令,可以查看目前Redis所監聽的連接埠。

sudo ss -tlnp | grep redis

ss指令可以顯示出Socket相關的資訊。-l參數可以只顯示正在監聽中的連線。若使用ss指令時都沒給任何參數的話,會忽略掉監聽中的連線。-t參數可以只顯示TCP連線。-n參數可以讓連接埠數字直接被輸出,而不是用一個名稱代替。-p參數可以顯示佔用連線的行程。

redis-remote

如上圖,可以看到Redis目前只有監聽127.0.0.1::1也就是「loopback」這個網路介面。所以目前的Redis是無法直接透過遠端的方式連入的。

讓Redis監聽其它網路介面

在Redis的設定檔/etc/redis/redis.conf內,可以找到bind這個設定命令,它可以用來設定Redis要監聽的網路介面,如果有多個的話可以用空格 隔開。

redis-remote

以下設定,可以讓Redis監聽192.168.100.108

bind 192.168.100.108

如果要綁定所有網路介面,那就設成0.0.0.0 ::吧!

bind 0.0.0.0 ::

記得還要去使用requirepass命令,讓Redis伺服器需要密碼才能夠被存取。不然會非常地不安全。

requirepass mypasssword

設定完成之後,使用以下指令重新執行Redis的服務,新設定就會套用了。

sudo systemctl restart redis

redis-remote

當然,防火牆也記得要設定才行。Redis預設的連接埠是6379,iptables規則可以這樣設定:

sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT

以上指令會對所有網路介面允許連接埠6379的TCP連入,如果要限定網路介面的話,可以再加上-i參數,後面接上要限定的網路介面名稱。

另外還可以參考這篇文章來永久保存iptables的設定。

如此一來在遠端,要使用URI存取這個在192.168.100.108主機上的Redis伺服器時,若requirepass設定的密碼為mypasssword,則URI可以寫作:

redis://mypassword@192.168.100.108

redis-remote