LEMP消耗的資源遠(yuǎn)遠(yuǎn)少于LAMP堆棧,因此對(duì)于廉價(jià)的VPS機(jī)器和低端盒子來(lái)說(shuō)更加適合。根據(jù)基準(zhǔn)測(cè)試,它在重負(fù)載下的速度要快2.5倍。此外,為了加快速度,我們將安裝MariaDB而不是MySQL,因?yàn)樗,但仍然與原始MySQL完全兼容。
我們要覆蓋什么
安裝Nginx
Nginx配置基礎(chǔ)知識(shí)
設(shè)置防火ABC-XYZ
安裝和配置MariaDB
安裝最新的PHP
配置Nginx以提供PHP文件
測(cè)試已安裝的堆棧
(使用域)使用Let的加密證書保護(hù)站點(diǎn)
先決條件
我們將在Debian 9上安裝和設(shè)置LEMP堆棧:
從一個(gè)干凈的VPS開始
至少512Mb的RAM
15Gb的可用磁盤空間
您將需要root用戶訪問權(quán)限
您必須為您的域(本教程中的example.com)設(shè)置DNS記錄,以便指向您的VPS才能安裝Let的加密證書。如果您沒有,請(qǐng)改為訪問您的IP地址并跳過最后一步。
第1步:安裝Nginx
安裝和防火ABC-XYZ設(shè)置
首先,以root身份或以sudo權(quán)限登錄到您的服務(wù)器。 然后,更新包管理器的緩存:
sudo apt update
運(yùn)行以下命令安裝Nginx:
sudo apt install nginx -y
Nginx現(xiàn)已安裝。 在瀏覽器中轉(zhuǎn)到您的域(如果沒有域名,則轉(zhuǎn)到IP地址)。 將顯示默認(rèn)的Nginx歡迎頁(yè)面:
這意味著Nginx已成功安裝。 通過systemctl啟用它以在每次服務(wù)器啟動(dòng)時(shí)啟動(dòng)它:
sudo systemctl enable nginx
為了最大限度地提高安全性,您現(xiàn)在將安裝ufw(簡(jiǎn)單防火ABC-XYZ)并將其配置為允許HTTP,HTTPS,F(xiàn)TP和SSH連接,并拒絕所有其他連接:
sudo apt install ufw -y
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw allow SSH
sudo ufw allow ftp
通過運(yùn)行啟用它(使其激活):
sudo ufw enable
在詢問時(shí)回答y,并在瀏覽器中重新加載該站點(diǎn)。 如果您仍然看到相同的歡迎頁(yè)面,則表明您已正確配置防火ABC-XYZ。 如果顯示錯(cuò)誤(例如拒絕訪問),請(qǐng)禁用防火ABC-XYZ:
sudo ufw禁用
并檢查其配置:
sudo ufw status
您將看到已啟用的配置文件列表。 如果您沒有看到上面的那些,請(qǐng)重新運(yùn)行命令并再次啟用它。
配置目錄
在Debian 9上,Nginx將其配置文件存儲(chǔ)在/ etc / nginx下,服務(wù)靜態(tài)文件的默認(rèn)目錄是/ usr / share / nginx / html。 當(dāng)我們需要更改配置并添加新文件時(shí),這將在后面的步驟中變得很重要。
第2步:安裝MariaDB
安裝MariaDB(默認(rèn)情況下可用于apt):
sudo apt安裝mysql-server -y
安裝完成后啟動(dòng)它:
sudo systemctl啟動(dòng)mysql
為了保持與原始MySQL產(chǎn)品的完全兼容性,MariaDB響應(yīng)mysql命令。
安裝MariaDB之后,必須運(yùn)行一個(gè)腳本(稱為mysql_secure_installation)來(lái)保護(hù)數(shù)據(jù)庫(kù):
sudo mysql_secure_installation
當(dāng)它詢問您當(dāng)前的root密碼時(shí),請(qǐng)按Enter鍵,因?yàn)檫@是您第一次配置它。 然后,為root用戶輸入新密碼并回答y以刪除匿名用戶。 如果您不打算從服務(wù)器外部訪問數(shù)據(jù)庫(kù),請(qǐng)回答下一個(gè)問題,否則鍵入n。 輸入y或按Enter鍵以查看隨后的所有問題。
嘗試通過運(yùn)行連接到它:
sudo mysql -u root -p
出現(xiàn)提示時(shí),輸入您剛設(shè)置的root密碼。
你會(huì)看到mysql提示符:
意味著MariaDB正常工作并且得到了適當(dāng)?shù)谋Wo(hù)。 輸入exit退出控制臺(tái)。
第3步:安裝PHP
您現(xiàn)在將安裝PHP 7.0,默認(rèn)情況下在Debian 9上可用。
要安裝PHP 7.0,請(qǐng)運(yùn)行:
sudo apt安裝php-fpm php-mysql
然后,安裝您最有可能需要的其他PHP擴(kuò)展:
sudo apt安裝php-mysql php-mbstring php-dev php-gd php-pear php-zip php-xml php-curl -y
要將剛剛安裝的PHP版本設(shè)置為系統(tǒng)范圍的默認(rèn)版本,請(qǐng)運(yùn)行以下命令:
sudo update-alternatives --set php /usr/bin/php7.0
現(xiàn)在檢查可用PHP的版本:
sudo php --version
你會(huì)看到版本是7.0,應(yīng)該是。
第4步:配置Nginx以提供PHP內(nèi)容
PHP已安裝且工作正常,但我們現(xiàn)在必須配置Nginx才能使用它,因?yàn)樗粫?huì)自動(dòng)執(zhí)行(與Apache不同)。
如步驟1中所述,Nginx將其配置文件存儲(chǔ)在/ etc / nginx下。 當(dāng)前啟用的配置(將由Nginx應(yīng)用)存儲(chǔ)在名為sites-enabled的文件夾中。 同樣,可用但未啟用(因此無(wú)法從Internet訪問)的站點(diǎn)存儲(chǔ)在名為sites-available的文件夾中。 我們將編輯默認(rèn)啟用的站點(diǎn)的配置。
刪除默認(rèn)配置文件,因?yàn)槲覀儾恍枰?/p>
rm / etc / nginx / sites-enabled / default
可以在/ etc / nginx / sites-available / default中找到默認(rèn)站點(diǎn)配置的副本。
創(chuàng)建一個(gè)新的配置文件進(jìn)行編輯:
nano / etc / nginx / sites-enabled / default
添加以下行:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.3-fpm.sock; } location ~ /\.ht { deny all; } }
保存并關(guān)閉文件。
上面配置的第一部分指定Nginx應(yīng)該偵聽HTTP端口80以獲取請(qǐng)求。 然后它將服務(wù)文件的根文件夾設(shè)置為/ var / www / html(這是您存儲(chǔ)網(wǎng)站文件的位置)并告訴Nginx首先嘗試提供PHP文件(而不是HTML)。
顯示的配置的其余部分告訴Nginx如何在請(qǐng)求時(shí)調(diào)用PHP,并拒絕訪問源自Apache Web服務(wù)器的.htaccess和類似文件。 它們不被Nginx使用,不應(yīng)該提供給用戶,因?yàn)樗鼈兛赡馨恍┟舾行畔ⅰ?/p>
重新啟動(dòng)Nginx以使更改生效:
sudo systemctl重啟nginx
嘗試在瀏覽器中重新加載您的站點(diǎn)(或IP地址)。 您應(yīng)該像以前一樣看到相同的Nginx默認(rèn)歡迎頁(yè)面。
要測(cè)試PHP呈現(xiàn)是否有效,請(qǐng)?jiān)? var / www / html中創(chuàng)建一個(gè)PHP文件:
sudo nano /var/www/html/index.php
將以下內(nèi)容放入其中:
<?PHP
phpinfo();
?>
保存并關(guān)閉文件。
phpinfo()函數(shù)輸出有關(guān)PHP安裝的非常詳細(xì)的信息。
在瀏覽器中重新加載該站點(diǎn)。 這一次,如果一切順利,你會(huì)看到類似這樣的頁(yè)面:
如果您看到502 Bad Gateway錯(cuò)誤,請(qǐng)檢查上面配置中的fastcgi_pass行(PHP版本可能不同,但不太可能)。
請(qǐng)務(wù)必立即刪除該文件,因?yàn)樗鼤?huì)顯示許多敏感信息:
rm /var/www/html/index.php
第5步:使用Let的加密保護(hù)您的域
如果您擁有完全注冊(cè)并指向服務(wù)器的域名,則可以使用免費(fèi)的Let's Encrypt TLS證書保護(hù)域名。 這樣做的好處是,您將擁有HTTPS訪問權(quán)限,并且所有瀏覽器中的域名旁邊都會(huì)顯示一個(gè)掛鎖。
我們將使用Certbot生成和配置加密證書,Certbot是為此目的而創(chuàng)建的免費(fèi)程序。 讓加密證書在90天后過期,Certbot會(huì)在確定時(shí)間(默認(rèn)為每60天)時(shí)自動(dòng)續(xù)訂,因此您根本不必?fù)?dān)心它們。
要安裝Certbot,首先需要通過運(yùn)行以下命令啟用Debian Backports存儲(chǔ)庫(kù):
secho "deb http://ftp.debian.org/debian stretch-backports main" |
sudo tee /etc/apt/sources.list.d/backports.list
更新包管理器緩存:
sudo apt update
然后,安裝Certbot:
sudo apt install certbot python-certbot-nginx -t stretch-backports -y
完成后,運(yùn)行Certbot:
sudo certbot --nginx --rsa-key-size 4096
輸入您知道要檢查的電子郵件地址,然后輸入A來(lái)同意服務(wù)條款。如果您想訂閱EFF的新聞通訊,請(qǐng)按Y,然后輸入您的域名。然后,Certbot會(huì)詢問您是否要將所有流量重定向到HTTPS - 您這樣做,因此輸入2。
您將收到一條祝賀消息,這意味著您的域現(xiàn)在使用來(lái)自Let's Encrypt的免費(fèi)HTTPS證書進(jìn)行保護(hù)。再次在瀏覽器中刷新您的域名。掛鎖將顯示在您站點(diǎn)地址的左側(cè),這意味著連接已加密。如果需要,您可以通過SSL服務(wù)器測(cè)試運(yùn)行您的站點(diǎn),并看到您將獲得A或更高。
接下來(lái)你能做什么
您現(xiàn)在已在Debian 9服務(wù)器上安裝并配置了LEMP堆棧。您現(xiàn)在可以在其上托管您的PHP網(wǎng)站,并且他們可以訪問MariaDB數(shù)據(jù)庫(kù)。例如,您可以安裝WordPress,Joomla,Drupal,Moodle或任何其他可能需要訪問數(shù)據(jù)庫(kù)的PHP應(yīng)用程序,它將使用足夠的進(jìn)一步配置。