返回部落格

在 Ubuntu 20.04 上將 Redis 伺服器設定為 PHP 的 Session 處理器

在 Ubuntu 20.04 上將 Redis 伺服器設定為 PHP 的 Session 處理器

Redis 是一個開源的記憶體內快取與儲存系統,也被稱為資料結構伺服器。它為多種資料類型提供進階支援,例如雜湊(hashes)、列表(lists)、集合(sets)、點陣圖(bitmaps)等。由於其卓越的效能,Redis 在領先產業和頂尖跨國公司中廣受歡迎。

Redis 的優勢

談到速度,Redis 伺服器無可匹敵。作為一個 NoSQL 資料庫伺服器,它提供了極快的資料儲存與檢索速度。此外,Redis 具有傑出的功能,使其能夠無縫處理不同的資料(包括複雜資料)。Redis 的易用性和強大功能不僅使其脫穎而出,還使其日益標準化,成為企業和個人使用者的主流資料庫。

以下我們將詳細介紹協助您在 Ubuntu 20.04 軟體上安裝 Redis 的步驟。在本教學中,您將獲得所需的所有資訊,從 安裝到設定外部 Redis 伺服器,以用作在 Ubuntu 20.04 上執行的 PHP 應用程式的工作階段處理常式(session handler).

開始使用

要進行這些步驟,您需要兩個位於同一個資料中心且已啟用專用網路的不同資料庫伺服器(droplets)。其中包括:

  • 一部執行 LAMPLEMP on Ubuntu 20.04 – 我們將這部伺服器稱為 web.

  • 第二部乾淨的 Ubuntu 20.04 伺服器,將在其中安裝 Redis – 我們將這部伺服器稱為 redis.

步驟 1 — 安裝 Redis 伺服器

我們的第一步是在 Ubuntu 20.04 上安裝 Redis 伺服器。完成後,請確保該伺服器已在我們的 redis Droplet 上啟動並執行。

在本教學中,我們將使用個人套件存檔(PPA)。出於安全原因,我們強烈建議使用 PPA。與其他第三方套件庫相比,PPA 穩定、易於安裝,最重要的是,該套件庫是專為 Ubuntu 使用者設計的。PPA 允許您獲取最新的軟體版本,即使是您在官方 Ubuntu 套件庫中找不到的軟體也是如此。

使用來自未授權來源的 PPA 是大忌。請確保您僅從真實且經過驗證的來源獲取 PPA。您可以使用以下命令新增 PPA 套件庫:

按下 Enter 鍵進行確認。確認後,我們將使用以下命令更新套件管理員快取:

接下來,我們將使用以下命令安裝 Redis:

執行該命令後,您的伺服器上就會安裝好 Redis。讓我們使用以下命令測試安裝:

輸入命令後,您將看到一個 Redis 執行個體正在 localhost 的連接埠 6379 上執行。此外,還會收到一個名為 PONG 的回應。如果您看到這些,表示您已成功完成第一步。如需安裝和保護 Redis 的詳細指南,您可以參考我們的教學課程 如何在 Ubuntu 18.04 上安裝和保護 Redis.

接下來,讓我們進入下一步:設定 Redis。

步驟 2 — 設定 Redis 以接受外部連線

設定 Redis 的主要目標是接受來自外部的連線。為什麼?因為 Redis 預設僅允許連線至 localhost,並且限制從其他任何地方進行連線。簡單來說,您只能從安裝了 Redis 的伺服器內部進行存取。

首先,使用 ifconfig 命令詳細了解您的網路介面:

您將獲得以下輸出:

eth1 介面,您將會找到 inet_addr。這裡我們有 10.133.14.9。我們將在接下來的步驟中使用此 IP 位址來連接 redis 伺服器,從 web 伺服器。

步驟 3 — 本地主機綁定

您可以自由選擇使用您偏好的程式碼編輯器(Atom 和 Visual Studio Code 是最熱門的編輯器)。

現在,開啟檔案 /etc/redis/redis.conf 並尋找包含 bind 定義的行。您應該將您的 私有網路 IP 位址 新增到該行:

您可能會看到 localhost,而不是 127.0.0.1。不用擔心,您只需要新增您的私有 IP 位址。接下來,重新啟動 Redis 服務以套用變更。使用以下命令來重新啟動 redis 伺服器:

對於使用一鍵安裝應用程式安裝 Redis 的使用者,請依照以下說明的命令來重新啟動您的伺服器:

一旦您重新啟動 redis 伺服器,同一個私有網路中的任何伺服器都將自動連接到此 Redis 執行個體,而無需手動個別連接。

步驟 4 — 設定 Redis 伺服器密碼

如果您是出於練習或培訓目的安裝 Redis,可以跳過此步驟。然而,如果您想為您的 Redis 安裝增加額外的安全防護,強烈建議為 redis 伺服器設定密碼。讓我們修改與上一步相同的設定檔。使用此命令進行編輯:

取消註解包含 requirepass 的行,並設定一個強密碼:

重啟 Redis 服務以套用您所做的變更。使用以下命令進行重啟:

步驟 5 — Redis 連線與驗證測試

在此步驟中,我們將從 redis 機器內部連線到 Redis 服務,以確保所有變更都如預期般順暢運作。要進行連線,請使用以下命令:

在這裡,即使您省略指定主機名稱,它仍然會執行。我們的主要目的是確保 Redis 服務能順暢地接受連線:

您可能會在嘗試使用定義的密碼存取資料時收到 AUTH 錯誤:

您的輸出將類似於以下內容:

要進行驗證,請執行 AUTH 命令,並附帶您在 /etc/redis/redis.conf 檔案中定義的相同密碼:

接下來,再次執行該命令:

這一次,您將收到 OK 作為回應,而不是錯誤。您將得到如下輸出:

輸出 empty list set 表示 Redis 伺服器是空的。這是因為我們尚未將網頁伺服器設定為工作階段處理常式。

注意:在繼續之前,請確保 SSH 工作階段已開啟並連線到 redis-cli。在接下來的步驟中,在我們對 web 伺服器進行必要的變更後,我們將返回 redis-cli 提示字元以驗證工作階段資料是否已正確儲存。

步驟 6 — 在網頁伺服器上安裝 Redis 擴充功能

接下來的步驟應在 web 伺服器上執行。我們需要安裝 PHP Redis 擴充功能,以便 PHP 連線到 Redis 伺服器。

首先,執行以下命令來更新您的套件管理員快取:

接下來,安裝 php5-redis 套件:

您已準備就緒,可以連線到 Redis。

步驟 7 — 在網頁伺服器上將 Redis 設定為預設工作階段處理常式

PHP 有一個預設的工作階段處理常式。在此步驟中,我們將編輯 php.ini 伺服器上的 web 檔案以變更預設設定。 php.ini 檔案位置取決於目前的架構:

  • 對於 LAMP 架構(在 Ubuntu 20.04 上),請使用: /etc/php5/apache2/php.ini.

  • 對於 LEMP 架構(在 Ubuntu 20.04 上),路徑通常為 /etc/php5/fpm/php.ini.

如果您不確定主 php.ini 檔案的位置,可以藉助 phpinfo() 函數。將以下程式碼放入名為 info.php 的檔案中,並將其置於您的網頁根目錄下:

當您嘗試從瀏覽器存取該指令碼時,請搜尋包含「Loaded Configuration File」的資料列。您將找到載入的主 php.ini 檔案的確切位置。請務必刪除 info.php 檔案,因為它包含您環境的所有敏感內容。

之後,開啟 php.ini 檔案並尋找包含 session.save_handler 的行。預設值為 files,請務必將其變更為 redis.

LAMP 環境中:

LEMP 環境中:

接下來,取消註解 session.save_path 並修改其值以包含 Redis 連線字串。內容必須符合以下格式:

使用我們在 步驟 4. 中設定的密碼。如果您沒有使用設定的密碼,則在設定 Redis 時提供參數 auth。現在,儲存檔案並重啟 php 兩個環境中的服務。

LAMP 環境中:

LEMP 環境中:

步驟 8 — 測試 Redis Session 處理

在最後一個步驟中,我們需要一個 PHP 腳本或應用程式來確保您的 Session 現在由 Redis 處理。我們將使用一個實現計數器的簡單腳本 – 每次您重新整理頁面時,印出的數字都會遞增。

建立一個名為 demo.php 的檔案,位於 web 伺服器上,並將其保留在您的網頁根目錄資料夾中:

然後,修改 /usr/share/nginx/html 以反映您的網頁根目錄路徑:

接下來,您必須將瀏覽器指向 http://web/demo.php 以存取該腳本。每次您重新整理頁面時,程式都會遞增該數字。

現在,您的 Session 資訊將儲存在 Redis 伺服器上。要進行驗證,您必須回到 redis 機器上的 SSH 工作階段,並使用 redis-cli。再次使用 keys *:

您將會看到以下輸出:

輸出結果證實所有資訊都安全地儲存在 redis 伺服器上。如果您想連接額外的 web 伺服器,可以按照相同的方式進行。

結論

Redis 是一種 NoSQL 資料庫,允許儲存大量的非結構化資料。極少有資料庫能與 redis 伺服器的功能和簡單性相媲美。它日益增長的人氣使其持續成為必備工具,與其廣泛的功能相比,幾乎沒有替代品。

若要進一步加深您對 PHP 應用程式及其使用方法的了解,可以參考我們部落格的以下教學課程:

祝您運算愉快!

author

Shreyas Patil

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。