實(shí)驗(yàn)概述
本實(shí)驗(yàn)提供LNMP(linux+nginx+mysql+php)服務(wù)器環(huán)境配置。首先,準(zhǔn)備安裝環(huán)境;然后,分別安裝nginx服務(wù)器、mysql數(shù)據(jù)庫和php語言環(huán)境;最后,修改nginx服務(wù)器配置文件,使Nginx支持php語言環(huán)境。

實(shí)驗(yàn)?zāi)繕?biāo)
完成此實(shí)驗(yàn),有能力掌握:
- 搭建簡單的LNMP網(wǎng)站環(huán)境
2. Nginx服務(wù)器的安裝和部署
3. MySQL數(shù)據(jù)庫的安裝
4. PHP語言環(huán)境的安裝和部署
學(xué)前建議
- 了解Linux的基本命令;
2. 了解基本的網(wǎng)站搭建知識
免費(fèi)學(xué)習(xí)地址:
1.1 背景知識
LNMP簡介
LNMP代表的就是:Linux系統(tǒng)下Nginx+MySQL+PHP這種網(wǎng)站服務(wù)器架構(gòu)。
Linux:是一類Unix計(jì)算機(jī)操作系統(tǒng)的統(tǒng)稱,是目前最流行的免費(fèi)操作系統(tǒng)。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx:是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP代理服務(wù)器。
Mysql:是一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。
PHP:是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言。
這四種軟件均為免費(fèi)開源軟件,組合到一起,成為一個(gè)免費(fèi)、高效、擴(kuò)展性強(qiáng)的網(wǎng)站服務(wù)系統(tǒng)。
Nginx簡介和使用場景
Nginx是俄羅斯人編寫的十分輕量級的HTTP服務(wù)器,Nginx,它的發(fā)音為 “engine X”, 是一個(gè)高性能的HTTP和反向代理服務(wù)器,同時(shí)也是一個(gè)IMAP/POP3/SMTP 代理服務(wù)器.Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點(diǎn)開發(fā)的,它已經(jīng)在該站點(diǎn)運(yùn)行超過三年了。Igor Sysoev在建立的項(xiàng)目時(shí),使用基于BSD許可。
為什么Nginx的性能要比Apache高得多?這得益于Nginx使用了最新的epoll(Linux 2.6內(nèi)核)和kqueue(freebsd)網(wǎng)絡(luò)I/O模型,而Apache則使用的是傳統(tǒng)的select模型。目前Linux下能夠承受高并發(fā)訪問的 Squid、Memcached都采用的是epoll網(wǎng)絡(luò)I/O模型。
處理大量的連接的讀寫,Apache所采用的select網(wǎng)絡(luò)I/O模型非常低效。下面用一個(gè)比喻來解析Apache采用的select模型和Nginx采用的epoll模型進(jìn)行之間的區(qū)別:假設(shè)你在大學(xué)讀書,住的宿舍樓有很多間房間,你的朋友要來找你。select版宿管大媽就會帶著你的朋友挨個(gè)房間去找,直到找到你為止。而epoll版 宿管大媽會先記下每位同學(xué)的房間號,你的朋友來時(shí),只需告訴你的朋友你住在哪個(gè)房間即可,不用親自帶著你的朋友滿大樓找人。如果來了10000個(gè)人,都要 找自己住這棟樓的同學(xué)時(shí),select版和epoll版宿管大媽,誰的效率更高,不言自明。同理,在高并發(fā)服務(wù)器中,輪詢I/O是最耗時(shí)間的操作之 一,select和epoll的性能誰的性能更高,同樣十分明了。
在高并發(fā)連接的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品。Nginx同時(shí)也可以作為7層負(fù)載均衡服務(wù)器來使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬以上的并發(fā)連接數(shù),相當(dāng)于同等環(huán)境下Apache的10倍。
第 2 章:實(shí)驗(yàn)內(nèi)容
2.2 實(shí)驗(yàn)資源申請
2.3 安裝開發(fā)包和庫文件
在部署LNMP環(huán)境之前,首先,用戶需要安裝Nignx服務(wù)器,MySQL數(shù)據(jù)庫,以及PhP環(huán)境相關(guān)的開發(fā)包和庫文件,若缺少開發(fā)包或庫文件,會導(dǎo)致后續(xù)LNMP環(huán)境部署失敗。
-
遠(yuǎn)程登錄到“LNMP環(huán)境”的ECS服務(wù)器,請使用本實(shí)驗(yàn)提供的ECS服務(wù)器的“外網(wǎng)地址”,“用戶名”和“密碼”。
image.png - 輸入命令cat /etc/redhat-release,查看當(dāng)前Linux系統(tǒng)版本。
說明:本實(shí)驗(yàn)使用CentOS 6.5版本,若Linux系統(tǒng)為Ubuntu或者CentOS的低版本,可能會導(dǎo)致實(shí)驗(yàn)?zāi)_本不可用。

-
執(zhí)行命令:chkconfig iptables off,關(guān)掉防火墻,避免實(shí)驗(yàn)中出現(xiàn)服務(wù)器無法訪問的情況。在真實(shí)的生產(chǎn)環(huán)境中,請根據(jù)實(shí)際需求,配置相應(yīng)的防火墻規(guī)則。
image.png
4. 執(zhí)行如下命令,安裝LNMP環(huán)境所需的開發(fā)包和庫文件,若不安裝,則會導(dǎo)致后續(xù)的LNMP環(huán)境安裝失敗。例如:openssl等。
yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2 libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel
注意:拷貝時(shí),請勿換行,否則會導(dǎo)致部分開發(fā)包和庫文件沒有安裝,以及后續(xù)操作中,安裝錯(cuò)誤等問題。

安裝過程需要等待1分鐘左右。安裝完成后,頁面顯示“Complete!”。
5. 在真實(shí)的生產(chǎn)環(huán)境中,若用戶的服務(wù)器中,已安裝的apache、mysql、php。請執(zhí)行命令 yum remove mysql httpd php 卸載相關(guān)軟件,否則系統(tǒng)原有軟件會對部署的LNMP環(huán)境中數(shù)據(jù)有影響。由于本實(shí)驗(yàn)中提供的ECS環(huán)境,沒有安裝如上軟件,因此,頁面提示“Package xx available, but not installed.” (xx為軟件名,例如mysql 等)。

至此,已完成LNMP環(huán)境的所需的基本開發(fā)包和庫環(huán)境的相關(guān)安裝和部署。
2.4 安裝nginx服務(wù)器
本小節(jié),將主要介紹在Linux系統(tǒng)的ECS實(shí)例上,進(jìn)行LNMP環(huán)境中安裝Nignx服務(wù)器的操作步驟。
說明:本實(shí)驗(yàn)中,安裝的Nginx服務(wù)器版本為Nignx 1.10.1。
- 輸入命令yum -y install nginx,通過yum的方式安裝nginx。

等待幾秒鐘,頁面顯示“Complete!”。證明已完成Nignx的基本安裝。

- 使用命令 vi /etc/nginx/conf.d/default.conf,進(jìn)入nginx配置文件“default.conf”的編輯頁面。

在Nginx配置文件的編輯頁面中,默認(rèn)監(jiān)聽使用ipv4和ipv6。

使用鍵盤方向鍵將光標(biāo)移動(dòng)到“l(fā)isten [::]:80 default_server;”位置,并輸入dd命令,刪除此行,也就是刪除其中監(jiān)聽為ipv6的配置。因?yàn)?,目前阿里云使用的是ipv4,若使用ipv6,運(yùn)行時(shí)會報(bào)錯(cuò)。完成后,輸入“:wq”,保存退出編輯頁面。

- 輸入命令service nginx start,啟動(dòng)nginx服務(wù)器。若頁面顯示“Starting nignx [OK]”,證明Nginx服務(wù)器已啟動(dòng)。若報(bào)錯(cuò),請檢查如上Nginx配置是否正確。

- 打開瀏覽器,并在地址欄中,輸入云中沙箱提供的ECS實(shí)例“公網(wǎng)地址”。若頁面顯示“Welcome to Nginx on EPEL!”,則證明Nginx服務(wù)器已部署且啟動(dòng)成功。
- 執(zhí)行命令chkconfig --levels 235 nginx on,設(shè)置2、3、5級別開機(jī)啟動(dòng)nginx。通過設(shè)置如上開機(jī)啟動(dòng)級別,在下次啟動(dòng)或者運(yùn)行ECS服務(wù)器的時(shí)候,就可以自動(dòng)運(yùn)行Nignx服務(wù)器。

至此,已完成Nginx的全部安裝部署,下一小節(jié)將介紹如何安裝MySQL數(shù)據(jù)庫。
2.5 安裝mysql數(shù)據(jù)庫
本小節(jié),將主要介紹在Linux系統(tǒng)的ECS實(shí)例上,安裝LNMP環(huán)境中MySQL數(shù)據(jù)庫的操作步驟。
說明:本實(shí)驗(yàn)中,安裝的MySQL數(shù)據(jù)庫版本為MySQL 5.1.73版本。
- 首先,在安裝MySQL之前,執(zhí)行命令yum -y install mysql mysql-server mysql-devel ,安裝mysql及其組件mysql-server,mysql-devel。

等待幾秒鐘,頁面顯示“Complete!”,證明已完成MySQL的安裝。

2. 輸入命令service mysqld start,啟動(dòng)mysql數(shù)據(jù)庫。

等待幾秒鐘,頁面顯示“Starting mysqld [ok]”。證明mysql啟動(dòng)成功。

- 輸入命令mysql,進(jìn)入MySQL數(shù)據(jù)庫的命令頁面,證明已經(jīng)成功安裝并運(yùn)行MySQL數(shù)據(jù)庫。

- 在mysql的命令行中,輸入exit,頁面提示“bye”,退出mysql的命令頁面。

- 最后,執(zhí)行命令chkconfig --levels 235 mysqld on,設(shè)置2、3、5級別開機(jī)啟動(dòng)mysql。這樣,用戶在下次啟動(dòng)ECS服務(wù)器時(shí),ECS實(shí)例會自動(dòng)運(yùn)行mysql數(shù)據(jù)庫,無需用戶手動(dòng)啟動(dòng)。

至此,完成MySQL的全部安裝。
2.6 安裝php語言環(huán)境
本小節(jié),將主要介紹在Linux系統(tǒng)的ECS實(shí)例上,安裝LNMP環(huán)境中安裝PHP語言環(huán)境的操作步驟。
說明:本實(shí)驗(yàn)中,安裝的是PHP 5.3.3版本。
- 首先,用戶執(zhí)行如下命令,安裝php及其常用擴(kuò)展包。若缺少擴(kuò)展包,可能會導(dǎo)致php安裝或運(yùn)行失敗。
注意:如下命令不能換行,若換行,或?qū)е聰U(kuò)展包或php安裝失敗。
yum -y install php lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap

等待幾秒鐘,界面顯示“Complete!”,證明已成功安裝Php語言基本環(huán)境。

- 完成PHP語言基本環(huán)境的安裝后。執(zhí)行如下命令,安裝PHP的相關(guān)組件。這樣,可以使PHP支持MySQL、FastCGI模式。
yum install php-tidy php-common php-devel php-fpm php-mysql
說明:CGI全稱是“公共網(wǎng)關(guān)接口”(Common Gateway Interface),HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序一般運(yùn)行在網(wǎng)絡(luò)服務(wù)器上。 CGI可以用任何一種語言編寫,只要這種語言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量。如php,perl,tcl等。FastCGI像是一個(gè)常駐(long-live)型的CGI,它可以一直執(zhí)行著,只要激活后,不會每次都要花費(fèi)時(shí)間去fork一次。

等待幾秒鐘,頁面提示“Is this ok [y/N]”,輸入y,允許安裝大小總計(jì)為6.7M的組件。

等待幾秒鐘,頁面提示“Complete!”,證明組件已安裝成功。此時(shí),PHP支持MySQL和FastCGI模式。

- 執(zhí)行命令service php-fpm start,啟動(dòng)php-fpm,界面顯示“OK”。由于Nginx是個(gè)輕量級的HTTP server,必須借助第三方的FastCGI處理器才可以對PHP進(jìn)行解析,PHP-FPM是一個(gè)第三方的FastCGI進(jìn)程管理器,只用于PHP。

- 最后,執(zhí)行命令chkconfig --levels 235 php-fpm on,設(shè)置2、3、5級別開機(jī)啟動(dòng)php-fpm。這樣,用戶在下次啟動(dòng)ECS服務(wù)器時(shí),ECS會自動(dòng)運(yùn)行php-fpm,無需用戶手動(dòng)運(yùn)行。

至此,已成功安裝LNMP的所有環(huán)境。下一小節(jié)中,用戶將配置Nginx服務(wù)器,使Nginx支持php語言環(huán)境。
2.7 配置nginx支持php
本小節(jié)中,將設(shè)置Nginx 的配置文件,允許Nginx服務(wù)器支持PHP語言環(huán)境。
1. 在真實(shí)的生產(chǎn)工組環(huán)境中,一般均需要備份Nginx配置文件,這樣的做法可以快速恢復(fù)原有Nginx配置信息。若之后用戶需要對配置文件進(jìn)行修改,均需要在修改前對配置文件進(jìn)行備份,從而保證Nginx服務(wù)器的正常運(yùn)行:
首先,將Nginx配置文件改為備份文件,執(zhí)行如下命令:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
然后,拷貝默認(rèn)的配置文件作為配置文件,執(zhí)行如下命令:
cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
執(zhí)行命令cd /etc/nginx,進(jìn)入Nginx目錄中,使用命令ls查看當(dāng)前目錄中有三個(gè)nignx的配置文件:Nginx配置文件“nginx.conf”,Nginx配置備份文件“nginx.confbak”,以及Nginx默認(rèn)配置文件“nginx.conf.default”。

- 執(zhí)行命令vim /etc/nginx/nginx.conf,進(jìn)入nginx配置文件的編輯頁面,添加Nginx的fastcgi支持。

首先,將文件第45行修改為如下內(nèi)容,也就是首頁支持php語言。
index index.php index.html index.htm;

然后,將文件的65-72行代碼前的注釋“?!比サ?,并替換"root"和“fastcgi_param”參數(shù)值為如下內(nèi)容。也就是,使用/usr/share/nginx/html作為網(wǎng)站根目錄,進(jìn)行訪問。
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

最后,完成如上配置信息修改后,按ESC并輸入命令:wq保存并退出編輯頁面。
- 執(zhí)行命令vim /etc/php.ini,進(jìn)入文件php.ini的編輯頁面,在結(jié)尾的“;Local Variables:”之前添加如下內(nèi)容。完成后,執(zhí)行:wq保存并退出編輯頁面。
cgi.fix_pathinfo = 1


至此,完成LNMP環(huán)境的全部搭建內(nèi)容,下一個(gè)小節(jié)將驗(yàn)證搭建的LNMP的網(wǎng)站環(huán)境。
2.8 查看LNMP網(wǎng)站環(huán)境
本小節(jié),主要驗(yàn)證搭建的LNMP服務(wù)器是否可用。
- 首先,執(zhí)行如下命令,重啟nginx和php-fpm服務(wù)器。
service nginx restart
service php-fpm restart
注意:只有重啟Nginx和php-fpm服務(wù)器。修改的Nginx配置文件中的參數(shù)才能生效。

- 執(zhí)行命令vim /usr/share/nginx/html/info.php,在Nginx的網(wǎng)站訪問的主目錄下,創(chuàng)建一個(gè)info.php文件,并進(jìn)入新建文件的編輯頁面。并在編輯頁面中,輸入如下代碼,用于顯示php的基本信息頁面。完成后,輸入:wq,保存并退出編輯頁面。
<?php
phpinfo();
?>

- 最后,測試nginx是否成功解析php。打開本地瀏覽器,并在地址欄中輸入:http://xxx.xxx.xx.xx/info.php,若頁面顯示php介紹信息,證明LNMP環(huán)境搭建成功。
說明:xxx.xxx.xx.xx為云中沙箱提供ECS實(shí)例的“公網(wǎng)地址”。


