當前位置:
首頁 > 知識 > 配置 redis 外網可訪問

配置 redis 外網可訪問

在 Linux 中安裝了redis 服務。

在 Windows 中安裝了 xampp 環境,以供 PHP 運行。

PHP 代碼如下:

<?php
$redis = new Redis();
$redis->connect("192.168.1.4", 6379);
$redis->set("tag", "hello");
echo "name:", $redis->get("tag");
?>

執行以上代碼時,報錯如下:

Fatal error: Uncaught exception 『RedisException』 with message 『Redis server went away』 in xxxx
RedisException: Redis server went away in xxxxxx

解錯誤分析及解決辦法

錯誤的原因很簡單,就是沒有連接上 redis 服務,由於 redis 採用的安全策略,默認會只准許本地訪問。需要通過簡單配置,完成允許外網訪問。

修改 redis 的配置文件,將所有 bind 信息全部屏蔽。

# bind 192.168.1.100 10.0.0.1
# bind 192.168.1.8
# bind 127.0.0.1

修改完成後,需要重新啟動 redis 服務。

修改 Linux 的防火牆(iptables),開啟你的 redis 服務埠,默認是 6379。

-A INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT
……
-A INPUT -j REJECT –reject-with icmp-host-prohibited

請注意,一定要將 redis 的防火牆配置放在 REJECT 的前面。然後執行 service iptables restart

至此,訪問剛剛上面的代碼,就能夠鏈接到 redis 服務,並且能夠正確顯示了。

關於bind

翻看網上的文章,此處多翻譯為"指定 redis 只接收來自於該 IP 地址的請求,如果不進行設置,那麼將處理所有請求,在生產環境中最好設置該項"。這種解釋會 totally 搞糊塗初學者,甚至是錯誤的。該處的英文原文為:

# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
# bind 127.0.0.1

該處說明 bind 的是interface,也就是說是網路介面。伺服器可以有一個網路介面(通俗的說網卡),或者多個。打個比方說機器上有兩個網卡,分別為 192.168.205.5 和 192.168.205.6,如果 bind 192.168.205.5,那麼只有該網卡地址接受外部請求,如果不綁定,則兩個網卡口都接受請求。

OK,不知道講清楚沒有,在舉一個例子。在我上面的實驗過程中,我是將bind項注釋掉了,實際上我還有一種解決方案。由於我redis伺服器的地址是 192.168.1.4 。如果我不注釋bind項,還有什麼辦法呢?我可以做如下配置:

# bind 192.168.1.4

這裡很多人會誤以為綁定的ip應該是請求來源的ip。其實不然,這裡應該綁定的是你redis伺服器本身接受請求的ip。

配置 redis 外網可訪問

打開今日頭條,查看更多圖片

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

c++中的虛基類簡單示例
OpenCV VideoCapture.get()參數詳解

TAG:程序員小新人學習 |