配置redis外網可訪問,配置redis訪問

來源:互聯網
上載者:User

配置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。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.