實(shí)驗(yàn)原理
什么是 LNMP
首先這里要簡(jiǎn)單介紹下 LAMP 和 LNMP,這兩個(gè)都是在網(wǎng)站服務(wù)器架構(gòu)中的系統(tǒng)環(huán)境。
上節(jié)中我們簡(jiǎn)單介紹過:
LAMP 指的是:Linux+Apache+MySQL+Perl/PHP/Python
LNMP 指的是:Linux+Nginx+MySQL+PHP
我們可以從表面看出,這兩個(gè)框架大致的區(qū)別就在于 Apache 和 Nginx 上面(其實(shí),遠(yuǎn)遠(yuǎn)不止這些)。我們?cè)谏瞎?jié)已經(jīng)分析了 Nginx 與 Apache 的各種優(yōu)缺點(diǎn),這里就不再多加贅述。
這就是 LNMP 的組成:

實(shí)驗(yàn)步驟
LNMP 系統(tǒng)安裝(L-N-M-P)
前期準(zhǔn)備(環(huán)境要求,庫依賴):
如果你的物理機(jī)上用 apt-get 安裝了老版的 Nginx,或者你的 Nginx 有問題,可以使用 sudo apt-get purge nginx 命令刪除已安裝的 Nginx。
針對(duì)后面的 nginx 源碼編譯安裝(如果選擇 apt-get 的方式則不需要,我們?cè)谶@里會(huì)有簡(jiǎn)單的庫依賴列表,需要讀者參照解決。
ssl 功能需要 openssl 庫
gzip 模塊需要 zlib 庫
rewrite 模塊需要 pcre 庫
這些庫可以點(diǎn)擊后在相應(yīng)官網(wǎng)進(jìn)行下載、解壓、編譯、安裝。(下載最新的最好)
L(Linux 安裝)
在 LNMP 中的作用或角色:
Linux 是一類 Unix 計(jì)算機(jī)操作系統(tǒng)的統(tǒng)稱,是目前最流行的免費(fèi)操作系統(tǒng)。LNMP 中以它作為平臺(tái)。
Linux 的常見發(fā)行版有:debian、centos、ubuntu、fedora、gentoo 等。
我們實(shí)驗(yàn)樓的環(huán)境本身就是 ubuntu,可直接進(jìn)行下一步操作。如果想擁有自己的 ubuntu 實(shí)驗(yàn)環(huán)境,趕緊動(dòng)手實(shí)現(xiàn)
N(Nginx 安裝)
在 LNMP 中的作用或角色:Nginx 是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。
安裝方式
決定因素:主要針對(duì)不同人群、不同需求,對(duì)于一般新手而言 apt-get 就夠了;如果你樂于折騰,需要定制,那就源碼安裝吧(這里只會(huì)簡(jiǎn)單敘述)。強(qiáng)烈建議 apt-get 直接安裝。
(1)直接 apt-get 安裝
sudo apt-get update
sudo apt-get install -y nginx

這里要是安裝失敗的,很可能就是源的問題了。現(xiàn)在的軟件源比較完整,基本都包含了 Nginx,如果源列表實(shí)在沒有, 進(jìn)入系統(tǒng)設(shè)置-軟件更新切換另一個(gè)源就好了,ubuntu 官方源(國(guó)內(nèi)速度較慢)、souhu 源、163 都有(更換源最后記得 sudo apt-get update 更新軟件包列表數(shù)據(jù)庫,不然不會(huì)生效)。
ubuntu 因?yàn)榘踩呗?,每次?zhí)行安裝命令時(shí)一般需要加上 sudo 去操作。建議在安裝過程中使用 sudo 而不是直接切換到 root 用戶,這樣雖然表面繁瑣,但是安全。
(2)源碼安裝
這個(gè)方法比較繁瑣這里簡(jiǎn)單闡述下,因?yàn)?ubuntu 默認(rèn)的策略是什么庫都不安裝,經(jīng)過上面的庫依賴解決,可以從中了解到 Nginx 依賴的庫有哪些,并且可以定制安裝組件或者不安裝組件,開機(jī)啟動(dòng)或開機(jī)不啟動(dòng)等等。
到 nginx 源 下載最新的源代碼壓縮包,解壓編譯安裝就好。
Linux 中最好把源代碼存放在
/usr/local/src文件夾中
完成安裝后的測(cè)試
所有的啟動(dòng)配置文件都在 /etc/init.d/nginx 這個(gè)目錄下,所以相關(guān)操作都可以在這個(gè)文件夾啟動(dòng)命令,這其實(shí)就是一個(gè)啟動(dòng)腳本。
啟動(dòng)命令:
sudo /etc/init.d/nginx start
# 或者使用如下的命令
sudo service nginx start
啟動(dòng)完畢后,打開瀏覽器,訪問 http://localhost 一定要刷新以確認(rèn)。

在實(shí)驗(yàn)樓的新版本環(huán)境里,由于環(huán)境升級(jí)的時(shí)候安裝了 apache,apache 的 html 文件覆蓋了 nginx 的文件,所以也可能會(huì)展示 apache 的頁面:

停止命令:
sudo /etc/init.d/nginx stop
# 或者使用如下的命令
sudo service nginx stop
停止過后,再打開瀏覽器,訪問 http://localhost 同樣需要刷新確認(rèn)

重啟命令:
sudo /etc/init.d/nginx restart
# 或者使用如下的命令
sudo service nginx restart
nginx 安裝后的初級(jí)配置
在后面的章節(jié)中,關(guān)于 Nginx 的配置有較詳細(xì)的講解及實(shí)戰(zhàn)。這里只是基礎(chǔ)的配置
sudo vim /etc/nginx/sites-available/default
PHP 需要配置 location ~ .php$ {},所以要讓 php 與 nginx 一起工作,就得在這個(gè)配置文件中配置這個(gè)模塊。
找到 location ~ .php 配置段,修改內(nèi)部配置為如下內(nèi)容:
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

緊接著測(cè)試配置文件是否正確:
sudo nginx -t

測(cè)試成功以后重載配置文件,使配置文件生效:
sudo service nginx reload

關(guān)于測(cè)試的話要等下面的 php 一同配置好后一起測(cè)試
如果對(duì) nginx default 配置還不是很清楚的或者有興趣的讀者可以參考 示例 1、示例 2
M(MySQL 安裝)
安裝
MySQL 是一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其安裝分為服務(wù)端與客戶端
安裝命令如下:(由于實(shí)驗(yàn)樓環(huán)境中已經(jīng)裝有 Mysql。安裝部分就省略掉。)
sudo apt-get install mysql-server mysql-client
然后你會(huì)看見輸入密碼的界面,你只需接下來輸入管理員密碼就行。
如果不安裝,直接使用環(huán)境中的 MySQL,只需要在環(huán)境中使用 sudo service mysql start 啟動(dòng) MySQL,MySQL 用戶為 root,密碼為空。
修改 MySQL 的配置文件
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
將 bind-address = 127.0.0.1 注釋掉(在對(duì)應(yīng)的行前面添加 # ),就可以遠(yuǎn)程連接數(shù)據(jù)庫了

P(php 安裝)
在 LNMP 中的作用或角色:nginx 本身不能處理 PHP,它只是個(gè) web 服務(wù)器,當(dāng)接收到請(qǐng)求后,如果是 php 請(qǐng)求,則發(fā)給 php 解釋器處理,并把結(jié)果返回給客戶端。
php-fpm 是一個(gè)守護(hù)進(jìn)程(FastCGI 進(jìn)程管理器)用于替換 PHP FastCGI 的大部分附加功能,對(duì)于高負(fù)載網(wǎng)站是非常有用的。
sudo apt-get install -y php7.0-fpm
安裝好以后連同上面的 Nginx 一同測(cè)試:
現(xiàn)在創(chuàng)建一個(gè)探針文件保存在 /var/www/html 目錄下(這個(gè)目錄就是剛剛 nginx 配置文件中 root 目錄),以便測(cè)試。
sudo vim /var/www/html/phpinfo.php

接下來使用命令啟動(dòng) php7.0-fpm 服務(wù):
sudo service php7.0-fpm start
然后訪問 http://localhost/phpinfo.php (記得刷新)
接下來你就會(huì)看見:

修改各模塊配置文件
修改各個(gè)模塊配置文件,達(dá)到能互相支持的目的:
(1)首先,要想讓 php 支持 MySQL,還需要安裝一系列的配套模塊。
在剛才打開的網(wǎng)頁中,這是沒有裝模塊的界面,搜索可以看出,里面沒有任何 MySQL 的啟動(dòng)信息

你需要安裝 php-mysql 模塊,使用如下命令進(jìn)行安裝:
sudo apt-get install php-mysql
安裝好以后,緊接著你需要需要重啟 php
sudo service php7.0-fpm restart
這是裝好以后的表現(xiàn):

(2)改變監(jiān)聽端口
在某些情況下我們需要改變服務(wù)器監(jiān)聽的端口。
因?yàn)樘捉幼质峭ㄟ^綁定 ip 端口連接的,那就只需要將剛才的 Nginx 的 default(所在目錄 /etc/nginx/sites-available/)配置中的端口打開,改成你想要監(jiān)聽的端口。
# 這是 Nginx 的 default 文件
sudo vim /etc/nginx/sites-available/default
server {
# 把 80 修改為 9000
listen 9000 default_server;
listen [::]:9000 default_server ipv6only=on;
root /var/www/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
}
命令重載配置文件,使之生效:
sudo service nginx reload
sudo service nginx restart
好了以后直接刷新剛才的頁面 http://localhost:9000/phpinfo.php (記得刷新)就完成了
注意事項(xiàng)
如果運(yùn)行不正常,用 service nginx status 查看運(yùn)行狀態(tài)。
啟動(dòng),重啟,關(guān)閉 Nginx 記得加 sudo,不然可能會(huì)失敗。
如果還是不能啟動(dòng),查看 log,這個(gè)文件會(huì)告訴你失敗的原因。
tail /var/log/nginx/error.log