簡介
在網際網路的世界中,多種技術結合在一起形成了解決方案,使網路使用者能夠存取全球資訊網上的動態內容。LEMP 堆疊就是其中一種解決方案。它結合了四種技術,為高效能和動態網站提供了完整的伺服器解決方案。LEMP 是 Linux、Nginx、MySQL 和 PHP 的縮寫。Linux 是伺服器作業系統。Nginx(發音為 Engine-X,因此縮寫中含有字母 E)是網頁伺服器軟體。接下來,MySQL 是保存網站和使用者資料的資料庫系統。PHP 是用於動態處理的伺服器端指令碼語言。
在本教學中,我們將引導您如何安裝和設定 LEMP 堆疊,並檢查一切是否如預期運行。讓我們開始吧!
步驟 1:使用 Ubuntu 20.04 設定您的伺服器
Ubuntu 20.04 是一款基於 Linux 的作業系統。目前存在多種 基於 Linux 的伺服器 作業系統,包括免費和付費版本。本指南的重點是 Ubuntu 20.04,它是免費且開源的。這一步解決了 LEMP 堆疊縮寫中的第一個要求,即 L。您應該在您的 VPS 上實際安裝了 Ubuntu 20.04 ,以便繼續後續步驟。您可以參考我們關於 設定您的 Ubuntu 伺服器 的指南。或者,如果您想在本地電腦上照著本指南操作,可以直接從 Ubuntu 官網下載 Ubuntu 20.04 伺服器安裝映像檔。您應該設定一個具有 sudo 權限的常規非 root 使用者,因為我們將執行一些需要 sudo 權限的指令。
步驟 2:安裝與設定 Nginx 伺服器
網頁伺服器使我們能夠向網站訪客提供網頁等內容。Nginx 是一款熱門的網頁伺服器,名列開發者首選的 前五大開源 網頁伺服器之一。這一步解決了 LEMP 堆疊中的第二個要求,即代表 Nginx 的 E。Ubuntu 有一個預設的套件庫,我們將從中獲取本指南中使用的套件。Ubuntu 基於 Debian,它使用 apt 或 dpkg 來管理其套件。對於來自預設套件庫的套件,我們將使用 apt。
根據經驗,在 Linux 系統上開始任何安裝之前,您應該先執行更新指令。首先在終端機中輸入以下指令:
|
1 |
sudo apt update |
更新完成後,現在您可以使用以下指令安裝 Nginx:
|
1 |
sudo apt install nginx |
安裝完成後,Nginx 會自動開始運行。下一步是設定防火牆以允許流量通過。Ubuntu 使用 ufw (Uncomplicated Firewall) 套件來設定防火牆。安裝後,Nginx 會向 ufw 註冊為一項服務。Ubuntu 會在系統啟動時自動啟動防火牆服務,但為了保險起見,請輸入以下指令來啟用它:
|
1 |
sudo ufw enable |
要列出 ufw 允許的應用程式設定,請輸入以下指令:
|
1 |
sudo ufw app list |
以下是顯示上述指令輸出的螢幕截圖:

如您所見,Nginx 已經向 ufw 註冊,並具有以下說明的三個設定檔:
- Nginx Full – 它同時開啟 80 和 443 連接埠。連接埠 80 用於一般/未加密的流量,即 HTTP。連接埠 443 用於 TLS/SSL 加密的流量,即 https。
- Nginx HTTP – 它僅開啟連接埠 80 – 未加密的流量。
- Nginx HTTPS – 它僅開啟連接埠 443 – TLS/SSL 加密的流量。
雖然 Nginx 會自動向 ufw 註冊,但在您親自設定之前,不允許任何流量進入您的伺服器。您可以選擇允許所有或任何一個設定檔,不過,最好允許最嚴格的設定檔,同時仍允許您為網頁伺服器設定的流量。由於我們在本教學中尚未設定 SSL,因此我們將僅允許連接埠 80 上的 HTTP 流量。如果您感到好奇,我們有一份關於如何使用 Certbot 在 Nginx 伺服器上設定來自 Let's Encrypt 的 SSL 的指南。
讓我們輸入以下命令來啟用 80 連接埠的流量:
|
1 |
sudo ufw allow 'Nginx HTTP' |
要驗證變更是否成功,請輸入以下命令:
|
1 |
sudo ufw status |

執行上述命令的輸出顯示現在已允許 HTTP 流量。您可以透過在瀏覽器中存取您的網域或伺服器的公用 IP 來檢查伺服器是否正在執行。如果您尚未設定網域名稱,且不確定伺服器的公用 IP 位址,可以使用 curl 並執行以下命令來尋找它:
|
1 |
curl -4 icanhazip.com |
將上述命令的輸出(即您的公用 IP 位址)複製到瀏覽器的網址列中。載入頁面時,您將看到預設的 Nginx 登陸頁面:

上述頁面表示您已成功安裝 Nginx。
步驟 3:安裝 MySQL 資料庫管理系統
資料管理是任何動態網站至關重要的一部分。MySQL 是一個儲存和管理網站資料的資料庫管理系統。此步驟將處理 LEMP 堆疊中的第三個需求:M。輸入以下命令以安裝 MySQL:
|
1 |
sudo apt install mysql-server |
MySQL 安裝完成後,您必須先對其進行設定,然後才能使用。設定的一部分包括確保資料庫伺服器的安全。MySQL 附帶了引導您保護和設定密碼的腳本。以下命令將啟動該腳本:
|
1 |
sudo mysql_secure_installation |

該腳本會詢問您是否要設定 VALIDATE PASSWORD 元件,或按任意字母繼續而不啟用該元件。
VALIDATE PASSWORD 元件是一項功能,用於檢查您為資料庫伺服器上的特定使用者輸入的密碼是否符合特定標準。您可以將其設定為檢查長度、數字字元、大寫或小寫字母的可用性等。如果未啟用,則您可以設定自己選擇的任何密碼。但是,如果啟用,您必須使用符合您指定標準的密碼。啟用它可能會導致自動設定 MySQL 使用者憑證的套件(例如 Ubuntu 的 phpMyAdmin 套件)出現問題。是否啟用它是個人選擇。如果您不啟用它,您的資料庫仍然是安全的,只需確保您使用強大且唯一的密碼即可。
如果您按下 Y 啟用該元件,則腳本將要求您選擇密碼驗證級別:

該腳本提供 3 個級別的密碼驗證。LOW(低)級別要求您的密碼僅包含 8 個或更多字元。MEDIUM(中)級別要求您的密碼包含 8 個或更多字元,且必須是大寫字母、小寫字母和特殊字元的組合。STRONG(強)級別要求一個包含 8 個或更多字元的複雜密碼,該密碼必須是大寫字母、小寫字母、特殊字元和單字的組合,且不能基於常見的字典單字,否則您將收到錯誤。讓我們選擇低級別,輸入 0,然後按 Enter 鍵。
該腳本會提示您輸入並重新輸入密碼:

輸入 y 並按 Enter 鍵,以接受您輸入的密碼作為 root 密碼。隨後的提示旨在提高 MySQL 伺服器的安全性。首先是刪除每個 MySQL 安裝隨附的預設匿名使用者、停用來自遠端連線的 root 登入,以及刪除測試資料庫。最後一個提示要求您重新載入權限表以使命令生效。對所有提示輸入 y 並按 Enter 鍵:

初始安全性設定已完成。
您可以透過執行以下命令來檢查您安裝的 MySQL 版本:
|
1 |
sudo mysql –V |
以下是我們在本教學中使用的版本:
![]()
對於運行 MySQL 5.7 及更高版本的 Ubuntu 系統,root 使用者預設配置為使用 auth_socket 外掛程式進行身分驗證,而不是使用密碼。這確保了更高的安全性,但是,這可能會與外部套件(例如 phpMyAdmin 套件)產生問題。如果您希望繼續使用 auth_socket 外掛程式,請跳至步驟 4。
如果您想改用密碼進行連線,則必須將身分驗證方法配置為使用 mysql_native_password。
輸入以下指令以啟動 MySQL 提示字元:
|
1 |
sudo mysql |
MySQL 附帶了幾個預設資料庫。您可以在終端機中輸入以下查詢來查看預設資料庫列表:
|
1 |
show databases; |

名為 mysql 的資料庫儲存了幾個與 MySQL 相關的配置。此資料庫有一個名為 users 的資料表,其中包含使用者詳細資訊以及每個使用者的身分驗證方法。我們可以使用 SQL 查詢 來檢索、修改和刪除資料表中的資訊。在終端機中輸入以下查詢,以獲取每個使用者使用哪種身分驗證方法的詳細資訊:
|
1 |
SELECT user, authentication_string, plugin, host FROM mysql.user; |

上述輸出顯示 root 使用者實際上是使用 auth_socket 外掛程式進行身分驗證。要變更 root 使用者的身分驗證方法,請在終端機中輸入以下陳述式。請記住要變更以符合我們在先前步驟中設定的中等密碼強度,否則會導致錯誤:
|
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword'; |
查詢成功執行後,執行 flush privileges 指令以使變更立即生效:
|
1 |
FLUSH PRIVILEGES; |
再次執行下方的 select 陳述式以檢查變更是否已生效:
|
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |

從輸出中可以看出,root 使用者現在將使用 mysql_native_password 進行身分驗證。您可以輸入 exit 並按下 Enter 鍵來退出 mysql 提示字元。
您可以輸入以下指令,嘗試使用您設定的密碼進行登入:
|
1 |
mysql -u root –p |
系統提示字元會要求您輸入密碼。如果密碼相符,您將會看到 MySQL 提示字元。您已成功使用 MySQL 設定您的伺服器。接下來,請退出 MySQL 提示字元。
步驟 4:安裝 PHP 並設定 Nginx 以使用 PHP 處理器
PHP 是 PHP: Hypertext Preprocessor(超文字預處理器)的縮寫。它是一種廣泛應用於網站和網頁應用程式的開源伺服器端指令碼語言。PHP 滿足了 LEMP 架構中的第四個需求。PHP 有助於在網站上產生動態內容。它可以用作網頁與資料庫系統之間的媒介。它從資料庫中讀取資料並將其呈現給您的網站訪客。此外,它還可以從資料庫中插入、更新和刪除資料。
Nginx 像其他網頁伺服器一樣,缺乏原生的 PHP 處理外掛程式,因此您必須安裝 php-fpm 以將請求從 Nginx 傳遞給 PHP 進行處理。首先,新增 Ubuntu universe 套件庫,其中包含由 Ubuntu 社群維護的免費且開源的軟體。在終端機中輸入以下指令:
|
1 |
sudo add-apt-repository universe |
然後,使用以下指令安裝 php-fpm 套件以及 php-mysql 輔助套件,以啟用 PHP 與 MySQL 的通訊:
|
1 |
sudo apt install php-fpm php-mysql |
在撰寫本指南時,透過上述指令安裝的 PHP 版本為 7.2.24。因此,它會安裝 php-fpm7.2 套件。在更新伺服器區塊(server blocks)時請記住這一點,並確保輸入正確的版本,否則您的網頁將無法載入。
您可以輸入以下指令來檢查 PHP 版本:
|
1 |
php -v |

至此,所有 LEMP 堆疊組件都已安裝完畢。接下來您需要做的是設定 Nginx,將請求導向 PHP 處理器。在 Nginx 中,設定是在 伺服器區塊 中進行。伺服器區塊相當於 Apache 的虛擬主機。欲了解更多資訊,您可以查看我們關於 Nginx 伺服器區塊的教學。
在本教學中,讓我們為 test.com 網域建立一個同名的伺服器區塊,您可以自由選擇您想要的名稱。伺服器區塊位於 /etc/nginx/sites-available/ 目錄中。輸入以下指令,使用 nano 建立伺服器區塊檔案:
|
1 |
sudo nano /etc/nginx/sites-available/test.com |
在檔案中輸入以下指令碼:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
以下是每個指令作用的簡要說明:
- listen – 定義 Nginx 將監聽的連接埠。連接埠 80 是預設連接埠,但是,如果您設定了 SSL,則需要填入 443。
- root – 包含存放網站目錄的目錄。
- index – 指示 Nginx 在收到請求時,若 index.php 檔案可用,則優先提供該檔案。
- server_name – 定義伺服器區塊的名稱,它包含您伺服器的公網 IP 位址或網域名稱。
- location/ – 第一個 location 區塊包含 try_files 指令。它會檢查是否存在與 URI 請求相符的檔案,如果找不到,則傳回 404 錯誤。
- location ~ \.php$ – 此指令透過將 Nginx 請求導向 fastcgi-php.conf 檔案和 php7.2-fpm.sock 檔案(定義與 php-fpm 關聯的 socket)來處理 PHP。此指令會檢查 php-fpm 的狀態,我們將版本指定為 7.2(即我們所擁有的版本)。請確保您根據自己擁有的版本進行檢查:
|
1 |
sudo service php7.2-fpm status |
- location ~ /\.ht – 此指令處理 .htaccess 檔案,這些檔案不會被 Nginx 處理。deny all 指令可確保不會向訪客提供任何 htaccess 檔案。
將指令碼新增至您的 test.com 檔案後,按下 Ctrl + O,然後按 Enter 鍵儲存檔案。按下 Ctrl + X 關閉編輯器。
然後,您必須輸入以下指令來建立指向 /etc/nginx/sites-enabled 的符號連結,以啟用該伺服器區塊:
|
1 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ |
然後,輸入以下命令以從 sites-enabled 取消連結預設的伺服器區塊:
|
1 |
sudo unlink /etc/nginx/sites-enabled/default |
輸入以下命令來測試您的新設定:
|
1 |
sudo nginx -t |
如果語法正確,請使用以下命令重新載入 Nginx:
|
1 |
sudo systemctl reload nginx |
至此,您的 LEMP 堆疊已安裝並設定完成。在下一步中,我們將建立一個測試檔案,以確保各個元件連線正常。
Step 5: 建立 PHP 檔案以測試您的 LEMP 堆疊
在此步驟中,我們將建立一個 .php 檔案並在 Nginx 伺服器上執行它,以檢查其是否正常運作。我們將使用全域的 phpinfo() 函數來檢查可用的 php 套件。輸入以下命令以在 nano 中開啟 .php 檔案:
|
1 |
sudo nano /var/www/html/test.php |
在 nano 編輯器中,輸入以下程式碼片段:
|
1 |
<?php phpinfo(); |
儲存並關閉檔案。要在瀏覽器中造訪您剛剛建立的頁面,請找到您的網域或 IP 位址,並按如下方式導覽至該頁面:
|
1 |
http://your_server_domain_or_IP/test.php |
您應該能夠看到 PHP 資訊頁面:

上述頁面顯示您已成功設定 Nginx。由於您建立用於測試的檔案包含有關伺服器的詳細資訊,因此您應該記得將其刪除。輸入以下命令以刪除該檔案:
|
1 |
sudo rm /var/www/html/test.php |
如果您以後需要測試您的設定,隨時可以重新建立該檔案。
結論
在本教學中,您在 Ubuntu 20.04 上設定了 LEMP 堆疊,這是目前最強大的網頁應用程式開發堆疊之一。從這裡開始,您應該能夠託管幾乎任何網站、網頁應用程式或行動應用程式的伺服器端邏輯。為了確保您的網站透過安全的 SSL 連線提供內容,我們有一篇關於在 Nginx 伺服器上設定 SSL 憑證的教學,建議您參考。
祝您使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。