在Debian 9中安裝和配置LEMP Stack

 

LEMP堆棧是一個首字母縮略詞,代表以下包組合在一起:Linux內核,Nginx Web服務器,MariaDB數據庫(或MySQL)和PHP服務器端編程語言)。 這些軟件廣泛用於當今互聯網上的服務器上,以部署動態網站或交互式Web應用程序。

Nginx是一個現代化且資源有效的Web服務器,正在開發中,並且是Apache HTTP服務器之後互聯網上使用次數最多的第二個,因為它使用異步事件驅動的方法來處理請求。

本教程將指導您如何在最新版本的Debian 7上安裝和配置LEMP堆棧(帶有MariaDB和PHP9的Nginx)。

要求

  • Debian 9操作系統的最新版本,可從以下鏈接獲得 https://www.debian.org/CD/http-ftp/ ,從頭開始安裝在VPS,虛擬機上或直接安裝在自專用機器上。
  • 直接訪問服務器的控制台或遠程SSH連接
  • 配置有計算機靜態IP地址的網絡接口
  • 已註冊的公共域名,在名稱服務器端配置了A和CNAME(www)DNS記錄。 在本指南中,我們將使用 linuxbox.cf 作為示例域。 服務器的IP地址配置有屬於C類私有空間的IP地址,通過主路由器在Internet上進行NAT-ed。 通過端口將Apache 80和443端口從主路由器轉發到內部服務器的IP地址,可以從Internet看到該域。

步驟1:初始配置

第一步,使用root用戶或具有root權限的用戶登錄系統,並通過發出以下命令更新Debian 9組件(內核升級,軟件包更新和安全補丁)。

sudo apt update

sudo apt升級

sudo apt dist-upgrade

接下來,確保通過運行以下命令為計算機主機名添加描述性名稱。 隨後,您應該重新啟動系統以相應地應用新主機名。

sudo hostnamectl set-hostname hostname.yourdomain.com

sudo init 6

接下來,繼續安裝net-tools wget,curl和bash-completion實用程序,以便以後使用它們來輕鬆管理Debian服務器。

sudo apt install net-tools sudo wget curl bash-completion

步驟2:安裝Nginx Web服務器

Nginx是一種現代且資源有效的Web服務器,用於向互聯網上的訪問者顯示網頁。 通過在服務器控制台中運行以下命令,從Debian 9官方存儲庫安裝Nginx Web服務器。

sudo apt-get安裝nginx

安裝Nginx Web服務器

如上圖所示,apt軟件包管理器將檢查軟件包的其他依賴項,並詢問您是否同意繼續安裝過程。 回答是(y)為了安裝Nginx。

接下來,運行 netstat命令 命令以顯示系統上的網絡套接字並驗證nginx守護程序是否正在偵聽端口80 / TCP。 或者,您可能想要發布 systemctl 命令以檢查nginx守護程序的狀態,如下圖所示。

sudo netstat -tlp

sudo netstat -tlpn

sudo systemctl status nginx.service

檢查nginx服務

一旦nginx服務器啟動並在您的系統中運行,就會發出問題 使用ifconfig 命令以顯示網絡接口信息並列出計算機的IP地址。 然後,打開瀏覽器並通過HTTP協議訪問Nginx默認網頁,方法是在瀏覽器中添加IP地址。 應在瀏覽器窗口中顯示消息“Wellcome to Nginx!”。

http://www.linuxbox.cf

or

http://192.168.1.14

Nginx歡迎頁面

步驟3:激活Nginx HTTP / 2.0協議

默認情況下,Debian 9存儲庫提供的最新版本的Nginx二進製文件是使用HTTP / 2.0協議構建的。 HTTP / 2.0包含在TSL / SSL協議中,可以通過安全交易提高網頁的加載速度。

默認情況下,所有現代瀏覽器(如Chrome或Firefox)都應支持此協議。 但請注意,Microsoft Internet Explorer和Microsoft Edge瀏覽器尚無法解析http2協議。

為了在Debian 2.0上的Nginx中啟用HTTP / 9協議,您需要對nginx默認配置文件進行一些更改或創建新的配置文件並為443服務器添加TLS代碼塊。 為了實現這一點,首先通過發出以下命令來備份Nginx站點 - 可用的默認配置。 通過列出sites-available目錄內容來確認備份是否成功。

sudo cp /etc/nginx/sites-available/default{,.backup}

ls / etc / nginx / sites-available /

接下來,使用文本編輯器創建Nginx TLS配置文件並添加以下內容。

sudo nano /etc/nginx/sites-available/default.ssl

默認情況下,SSL 文件摘錄:

 服務器{
                聽443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #服務器名稱  是www.domain.tld;
                服務器名稱 _;
                                
                root / var / www / html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL證書
                ssl_certificate“/etc/nginx/ssl/cert.pem”;
                ssl_certificate_key“/etc/nginx/ssl/privekey.pem”;
                ssl_dhparam /etc/nginx/ssl/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers on;
               
                add_header Strict-Transport-Security“max-age = 31536000;
                #includeSubDomains“總是;
 
                位置/
                index index.php index.html index.htm;
                    try_files $ uri $ uri / /index.php?args $ uri / = 404;
                }
 
                設置$ cache_uri $ request_uri;
                
                位置〜/.well-known {
                允許全部;
                               }
               位置〜.php $ {
                                包括snippets / fastcgi-php.conf;
                #
                ##使用php-fpm(或其他unix套接字):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                ##使用php-cgi(或其他tcp套接字):
                #fastcgi_pass 127.0.0.1:9000;
                }
 
                #拒絕訪問.htaccess文件,如果是Apache的文檔根目錄
                #同意nginx的一個
                #
                #location〜/.ht {
                #全部否認;
                #}
    }

支持使用HTTP / 2.0協議的語句由單詞表示 http2 從下面的線。

 聽443 ssl http2 default_server;

如果訪問者的瀏覽器不支持HTTP2協議,請刪除 http2 來自服務器配置的單詞以禁用協議並重新啟動nginx服務以應用更改。

如果您有註冊域名或使用基於IP地址的虛擬主機,您應該在之後添加您的域名或IP地址 服務器名稱 指令如下例所示。

服務器名稱 www.linuxbox.cf linuxbox.cf;

使用上述設置完成Nginx默認配置文件的編輯後

在上面的nginx TSL配置文件中,我們指定了TLS證書和密鑰的路徑。 由於我們實際上尚未在您的系統中安裝密鑰,因此請發出以下命令以生成自簽名SSL證書文件和密鑰。 在生成SSL證書時,系統會詢問您一系列問題。 添加您所在國家/地區,州或省的雙字母代碼,城市名稱,組織名稱,組織的單位名稱,服務器的公用名以及有效的電子郵件地址。 你應該注意 通用名稱 進行設置,使其與DNS服務器中的計算機FQDN記錄或將用於訪問網頁的服務器IP地址匹配。 證書和密鑰將存儲在nginx目錄下的新目錄中,名為ssl,如下面的屏幕截圖所示。

sudo mkdir / etc / nginx / ssl

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem

ls / etc / nginx / ssl /

創建SSL證書

此外,生成一個新的強Diffie-Hellman密碼,可以在上面的配置文件中找到 ssl_dhparam 語句行,通過發出以下命令:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

已創建SSL證書

最後,在生成Diffie-Hellman密鑰後,通過為其創建符號鏈接來激活TLS配置文件 defult的SSL 來自的配置文件 網站可用 目錄 啟用的站點 - 目錄通過發出以下命令。

ln -s / etc / nginx / sites-available / default-ssl / etc / nginx / sites-enabled /

接下來,測試Nginx配置文件是否存在語法錯誤,如果一切正常,請重新啟動Nginx守護程序,以便通過運行以下命令來應用所有更改。

sudo nginx -t

sudo systemctl重新啟動nginx.service

為了確認Nginx Web服務器是否綁定了SSL端口,請發出netstat命令並檢查端口443是否在偵聽模式下顯示。

netstat -tlpn | grep nginx

以下屏幕截圖說明了上述步驟。

使用netstat檢查服務

然後,從瀏覽器通過HTTP協議導航到您的域名或服務器的IP地址,以顯示nginx默認頁面。 由於您使用的是自簽名證書,因此應在瀏覽器中顯示錯誤。 確認錯誤以傳遞到nginx默認主頁面。

自簽名SSL證書警告

如果Nginx沒有提供默認值 的index.html 在webroot目錄中的頁面,發出以下命令來創建索引頁面。

echo“測試頁”| tee /var/www/html/index.html

SSL測試頁面

為了確認Nginx公佈的HTTP / 2.0協議的存在,請發出以下命令。 尋找 h2 服務器通告的協議中的字。

openssl s_client -connect localhost:443 -nextprotoneg“

使用openssl命令測試SSL證書

您還可以查看連接狀態,並檢查Nginx是否通過按下F2功能鍵從Chrome瀏覽器公佈了http12協議並請求該頁面。 要顯示請求使用的協議,請轉到“網絡”選項卡,右鍵單擊“類型”菜單,然後選中“協議文件”。 HTTP2協議應顯示為 h2 在當前協議列中,如下面的屏幕截圖所示。

在瀏覽器中測試證書

步驟4:安裝PHP7.0

Nginx Web服務器可以通過PHP FastCGI流程管理器借助PHP編程語言解釋器提供動態Web內容,Nginx將處理請求傳遞給它。 FastCGI流程管理器可以通過安裝獲得 PHP-FPM Debian 9官方存儲庫提供的預編譯包。

為了在系統中安裝php-fpm進程管理器和PHP7.0解釋器以及允許PHP與Nginx Web服務器通信的附加軟件包,請在服務器控制台上發出以下命令:

sudo apt安裝php7.0 php7.0-fpm php7.0-curl php7.0-gd

在系統中成功安裝PHP7.0解釋器後,通過發出以下命令啟動並檢查php7.0-fpm守護程序:

sudo systemctl啟動php7.0-fpm

sudo systemctl狀態php7.0-fpm

在上面的Nginx TLS配置文件中,我們已經為PHP FastCGI流程管理器添加了塊配置,以便為動態內容提供服務。 下面的摘錄中顯示了使Nginx能夠使用PHP解釋器的代碼塊,因此不需要進一步修改Nginx TSL配置文件的步驟。 下面屏幕截圖中行開頭的#tag標籤是註釋。 默認情況下,Nginx Web服務器會忽略配置文件中的註釋行。

location~.php $ {include snippets / fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; }

在Nginx中啟用PHP

為了測試和驗證Nginx是否可以正確地將php文件傳遞給PHP處理器,請創建一個PHP info.php的 通過發出以下命令測試配置文件

sudo su -c'echo“ ”> /var/www/html/info.php'

然後,通過導航到服務器的域名或公共IP地址,然後訪問Web瀏覽器中的php信息頁面 /info.php 如下圖所示。

https://www.linuxbox.cf/info.php

or

http://192.168.1.14/info.php

phpinfo輸出

您還可以通過搜索該行來檢查服務器是否公佈了HTTP / 2.0協議 $ _ SERVER ['SERVER_PROTOCOL'] 在PHP變量上。

要安裝其他PHP7.0模塊,請運行 適合搜索 php7.0 命令查找特定的PHP模塊並進行安裝。 如果您計劃在LEMP堆棧之上安裝內容管理系統(如WordPress),請發出以下命令以安裝一些額外的PHP模塊。

sudo apt安裝php7.0-mcrypt php7.0-mbstring

但是,系統上默認情況下不會啟用新安裝的PHP模塊。 要為Nginx激活新安裝的PHP模塊,您應該通過發出以下命令重新啟動PHP-FPM服務。

sudo systemctl重啟php7.0-fpm.service

步驟5:安裝MariaDB數據庫

最後,數據庫中缺少最後一塊LAMP堆棧拼圖。 MariaDB數據庫LEMP組件用於存儲表和列中的記錄,並動態管理Web應用程序的數據。 為了在Debian 9中安裝MariaDB數據庫管理系統,並使用所需的PHP模塊從PHP文件訪問數據庫,請在服務器的控制台中發出以下命令。 隨後,重新啟動PHP-FPM守護程序以激活訪問數據庫所需的PHP MySQL模塊。

sudo apt安裝mariadb-server mariadb-client php7.0-mysql

sudo systemctl重啟php7.0-fpm.service

默認情況下,系統root帳戶或具有root權限的用戶可以訪問數據庫而無需提供密碼。 為了改變這種行為,MySQL每次系統用戶嘗試訪問數據庫時都要求輸入密碼,從命令行界面以root權限登錄MySQL數據庫,並在MySQL控制台中執行以下命令:

sudo mysql

MariaDB>使用mysql; MariaDB>更新用戶集插件=''其中User ='root'; MariaDB>刷新特權; MariaDB>退出

MariaDB的

在下一步中,確保通過執行安全腳本來保護MariaDB mysql_secure_installation 由Debian拉伸存儲庫的安裝包提供。 運行腳本時會詢問一系列旨在保護MariaDB數據庫的問題,例如:更改MySQL root密碼,刪除匿名用戶,禁用遠程root登錄和刪除測試數據庫。 通過發出以下命令來執行腳本,並確保對所有問題說“是”以完全保護MySQL守護程序。 除了作為指南之外,請使用以下腳本輸出。

sudo mysql_secure_installation

注意:建議對所有MariaDB運行此腳本的所有部分

服務器在生產中使用! 請仔細閱讀每一步!

為了登錄MariaDB以保護它,我們需要當前的

root用戶的密碼。 如果你剛剛安裝了MariaDB,那麼

你還沒有設置root密碼,密碼是空白的,

所以你應該在這裡按回車。

輸入root的當前密碼(不輸入):

好的,成功使用密碼,繼續...

設置root密碼確保沒有人可以登錄MariaDB

沒有適當授權的root用戶。

您已經設置了root密碼,因此您可以安全地回答'n'。

更改root密碼? [Y / N] y

新密碼:

重新輸入新的密碼:

密碼更新成功!

重新加載特權表

...成功!

默認情況下,MariaDB安裝有一個匿名用戶,允許任何人

登錄到MariaDB而無需創建用戶帳戶

他們。 這僅用於測試並進行安裝

走得更順暢。 你應該在移動到一個之前刪除它們

生產環境。

刪除匿名用戶? [Y / N] y

...成功!

通常,只允許root用戶從'localhost'連接。 這個

確保有人不能從網絡猜測根密碼。

禁止遠程root登錄? [Y / N] y

...成功!

默認情況下,MariaDB附帶一個名為“test”的數據庫,任何人都可以

訪問。 這也僅用於測試,應該刪除

在進入生產環境之前。

刪除測試數據庫並訪問它? [Y / N] y

- 刪除測試數據庫......

...成功!

- 刪除測試數據庫的權限...

...成功!

重新加載特權表將確保到目前為止所做的所有更改

將立即生效。

現在重新加載特權表? [Y / n] y

...成功!

打掃乾淨…

全部完成! 如果您已完成上述所有步驟,請使用MariaDB

安裝現在應該是安全的。

感謝您使用MariaDB!

最後,為了測試MariaDB功能,從控制台登錄數據庫並執行以下命令。 應在MariaDB控制台中顯示默認數據庫的列表。 保留MariaDB控制台 出口 聲明。

mysql -u root -p

MariaDB [(無)]>顯示數據庫; + -------------------- + | 數據庫| + -------------------- + | information_schema | | mysql | | performance_schema | + -------------------- +設置3行(0.00秒)MariaDB [[無]]>退出

MariaDB顯示數據庫

那就是全部! Nginx Web服務器,MariaDB數據庫和PHP編程語言安裝在Debian 9計算機上。 您現在可以開始為訪問者構建動態網站或Web應用程序。

資源