實(shí)驗(yàn)概述
本實(shí)驗(yàn)提供LNMP(linux+nginx+mysql+php)服務(wù)器環(huán)境配置揪漩。首先,準(zhǔn)備安裝環(huán)境吏口;然后奄容,分別安裝nginx服務(wù)器、mysql數(shù)據(jù)庫(kù)和php語(yǔ)言環(huán)境产徊;最后昂勒,修改nginx服務(wù)器配置文件,使Nginx支持php語(yǔ)言環(huán)境舟铜。
實(shí)驗(yàn)?zāi)繕?biāo)
完成此實(shí)驗(yàn)戈盈,有能力掌握:
- 搭建簡(jiǎn)單的LNMP網(wǎng)站環(huán)境
2. Nginx服務(wù)器的安裝和部署
3. MySQL數(shù)據(jù)庫(kù)的安裝
4. PHP語(yǔ)言環(huán)境的安裝和部署
學(xué)前建議
- 了解Linux的基本命令;
2. 了解基本的網(wǎng)站搭建知識(shí)
免費(fèi)學(xué)習(xí)地址:
1.1 背景知識(shí)
LNMP簡(jiǎn)介
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ù)庫(kù)管理系統(tǒng)根吁。
PHP:是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語(yǔ)言员淫。
這四種軟件均為免費(fèi)開(kāi)源軟件,組合到一起击敌,成為一個(gè)免費(fèi)介返、高效、擴(kuò)展性強(qiáng)的網(wǎng)站服務(wù)系統(tǒng)沃斤。
Nginx簡(jiǎn)介和使用場(chǎng)景
Nginx是俄羅斯人編寫(xiě)的十分輕量級(jí)的HTTP服務(wù)器,Nginx圣蝎,它的發(fā)音為 “engine X”, 是一個(gè)高性能的HTTP和反向代理服務(wù)器衡瓶,同時(shí)也是一個(gè)IMAP/POP3/SMTP 代理服務(wù)器.Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問(wèn)量第二的 Rambler.ru站點(diǎn)開(kāi)發(fā)的徘公,它已經(jīng)在該站點(diǎn)運(yùn)行超過(guò)三年了。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ā)訪問(wèn)的 Squid等太、Memcached都采用的是epoll網(wǎng)絡(luò)I/O模型。
處理大量的連接的讀寫(xiě)蛮放,Apache所采用的select網(wǎng)絡(luò)I/O模型非常低效缩抡。下面用一個(gè)比喻來(lái)解析Apache采用的select模型和Nginx采用的epoll模型進(jìn)行之間的區(qū)別:假設(shè)你在大學(xué)讀書(shū),住的宿舍樓有很多間房間包颁,你的朋友要來(lái)找你瞻想。select版宿管大媽就會(huì)帶著你的朋友挨個(gè)房間去找,直到找到你為止娩嚼。而epoll版 宿管大媽會(huì)先記下每位同學(xué)的房間號(hào)蘑险,你的朋友來(lái)時(shí),只需告訴你的朋友你住在哪個(gè)房間即可待锈,不用親自帶著你的朋友滿大樓找人。如果來(lái)了10000個(gè)人嘴高,都要 找自己住這棟樓的同學(xué)時(shí)竿音,select版和epoll版宿管大媽,誰(shuí)的效率更高拴驮,不言自明春瞬。同理,在高并發(fā)服務(wù)器中套啤,輪詢I/O是最耗時(shí)間的操作之 一宽气,select和epoll的性能誰(shuí)的性能更高随常,同樣十分明了。
在高并發(fā)連接的情況下萄涯,Nginx是Apache服務(wù)器不錯(cuò)的替代品绪氛。Nginx同時(shí)也可以作為7層負(fù)載均衡服務(wù)器來(lái)使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬(wàn)以上的并發(fā)連接數(shù)涝影,相當(dāng)于同等環(huán)境下Apache的10倍枣察。
第 2 章:實(shí)驗(yàn)內(nèi)容
2.2 實(shí)驗(yàn)資源申請(qǐng)
2.3 安裝開(kāi)發(fā)包和庫(kù)文件
在部署LNMP環(huán)境之前,首先燃逻,用戶需要安裝Nignx服務(wù)器序目,MySQL數(shù)據(jù)庫(kù),以及PhP環(huán)境相關(guān)的開(kāi)發(fā)包和庫(kù)文件伯襟,若缺少開(kāi)發(fā)包或庫(kù)文件猿涨,會(huì)導(dǎo)致后續(xù)LNMP環(huán)境部署失敗。
-
遠(yuǎn)程登錄到“LNMP環(huán)境”的ECS服務(wù)器姆怪,請(qǐng)使用本實(shí)驗(yàn)提供的ECS服務(wù)器的“外網(wǎng)地址”叛赚,“用戶名”和“密碼”。
- 輸入命令cat /etc/redhat-release片效,查看當(dāng)前Linux系統(tǒng)版本红伦。
說(shuō)明:本實(shí)驗(yàn)使用CentOS 6.5版本,若Linux系統(tǒng)為Ubuntu或者CentOS的低版本淀衣,可能會(huì)導(dǎo)致實(shí)驗(yàn)?zāi)_本不可用昙读。
-
執(zhí)行命令:chkconfig iptables off,關(guān)掉防火墻膨桥,避免實(shí)驗(yàn)中出現(xiàn)服務(wù)器無(wú)法訪問(wèn)的情況蛮浑。在真實(shí)的生產(chǎn)環(huán)境中,請(qǐng)根據(jù)實(shí)際需求只嚣,配置相應(yīng)的防火墻規(guī)則沮稚。
4. 執(zhí)行如下命令,安裝LNMP環(huán)境所需的開(kāi)發(fā)包和庫(kù)文件册舞,若不安裝蕴掏,則會(huì)導(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í)盛杰,請(qǐng)勿換行,否則會(huì)導(dǎo)致部分開(kāi)發(fā)包和庫(kù)文件沒(méi)有安裝藐石,以及后續(xù)操作中即供,安裝錯(cuò)誤等問(wèn)題。
安裝過(guò)程需要等待1分鐘左右于微。安裝完成后逗嫡,頁(yè)面顯示“Complete!”青自。
5. 在真實(shí)的生產(chǎn)環(huán)境中,若用戶的服務(wù)器中驱证,已安裝的apache延窜、mysql、php雷滚。請(qǐng)執(zhí)行命令 yum remove mysql httpd php 卸載相關(guān)軟件需曾,否則系統(tǒng)原有軟件會(huì)對(duì)部署的LNMP環(huán)境中數(shù)據(jù)有影響。由于本實(shí)驗(yàn)中提供的ECS環(huán)境祈远,沒(méi)有安裝如上軟件呆万,因此,頁(yè)面提示“Package xx available, but not installed.” (xx為軟件名车份,例如mysql 等)谋减。
至此,已完成LNMP環(huán)境的所需的基本開(kāi)發(fā)包和庫(kù)環(huán)境的相關(guān)安裝和部署扫沼。
2.4 安裝nginx服務(wù)器
本小節(jié)出爹,將主要介紹在Linux系統(tǒng)的ECS實(shí)例上,進(jìn)行LNMP環(huán)境中安裝Nignx服務(wù)器的操作步驟缎除。
說(shuō)明:本實(shí)驗(yàn)中严就,安裝的Nginx服務(wù)器版本為Nignx 1.10.1。
- 輸入命令yum -y install nginx器罐,通過(guò)yum的方式安裝nginx梢为。
等待幾秒鐘,頁(yè)面顯示“Complete轰坊!”铸董。證明已完成Nignx的基本安裝。
- 使用命令 vi /etc/nginx/conf.d/default.conf肴沫,進(jìn)入nginx配置文件“default.conf”的編輯頁(yè)面粟害。
在Nginx配置文件的編輯頁(yè)面中,默認(rèn)監(jiān)聽(tīng)使用ipv4和ipv6颤芬。
使用鍵盤方向鍵將光標(biāo)移動(dòng)到“l(fā)isten [::]:80 default_server;”位置悲幅,并輸入dd命令,刪除此行站蝠,也就是刪除其中監(jiān)聽(tīng)為ipv6的配置汰具。因?yàn)椋壳鞍⒗镌剖褂玫氖莍pv4沉衣,若使用ipv6郁副,運(yùn)行時(shí)會(huì)報(bào)錯(cuò)减牺。完成后豌习,輸入“:wq”存谎,保存退出編輯頁(yè)面。
- 輸入命令service nginx start肥隆,啟動(dòng)nginx服務(wù)器既荚。若頁(yè)面顯示“Starting nignx [OK]”,證明Nginx服務(wù)器已啟動(dòng)栋艳。若報(bào)錯(cuò)恰聘,請(qǐng)檢查如上Nginx配置是否正確。
- 打開(kāi)瀏覽器吸占,并在地址欄中晴叨,輸入云中沙箱提供的ECS實(shí)例“公網(wǎng)地址”。若頁(yè)面顯示“Welcome to Nginx on EPEL!”矾屯,則證明Nginx服務(wù)器已部署且啟動(dòng)成功兼蕊。
- 執(zhí)行命令chkconfig --levels 235 nginx on,設(shè)置2件蚕、3孙技、5級(jí)別開(kāi)機(jī)啟動(dòng)nginx。通過(guò)設(shè)置如上開(kāi)機(jī)啟動(dòng)級(jí)別排作,在下次啟動(dòng)或者運(yùn)行ECS服務(wù)器的時(shí)候牵啦,就可以自動(dòng)運(yùn)行Nignx服務(wù)器。
至此妄痪,已完成Nginx的全部安裝部署哈雏,下一小節(jié)將介紹如何安裝MySQL數(shù)據(jù)庫(kù)。
2.5 安裝mysql數(shù)據(jù)庫(kù)
本小節(jié)拌夏,將主要介紹在Linux系統(tǒng)的ECS實(shí)例上僧著,安裝LNMP環(huán)境中MySQL數(shù)據(jù)庫(kù)的操作步驟。
說(shuō)明:本實(shí)驗(yàn)中障簿,安裝的MySQL數(shù)據(jù)庫(kù)版本為MySQL 5.1.73版本盹愚。
- 首先,在安裝MySQL之前站故,執(zhí)行命令yum -y install mysql mysql-server mysql-devel 皆怕,安裝mysql及其組件mysql-server,mysql-devel西篓。
等待幾秒鐘愈腾,頁(yè)面顯示“Complete!”,證明已完成MySQL的安裝岂津。
2. 輸入命令service mysqld start虱黄,啟動(dòng)mysql數(shù)據(jù)庫(kù)。
等待幾秒鐘吮成,頁(yè)面顯示“Starting mysqld [ok]”橱乱。證明mysql啟動(dòng)成功辜梳。
- 輸入命令mysql,進(jìn)入MySQL數(shù)據(jù)庫(kù)的命令頁(yè)面泳叠,證明已經(jīng)成功安裝并運(yùn)行MySQL數(shù)據(jù)庫(kù)作瞄。
- 在mysql的命令行中,輸入exit危纫,頁(yè)面提示“bye”宗挥,退出mysql的命令頁(yè)面。
- 最后种蝶,執(zhí)行命令chkconfig --levels 235 mysqld on契耿,設(shè)置2、3螃征、5級(jí)別開(kāi)機(jī)啟動(dòng)mysql宵喂。這樣,用戶在下次啟動(dòng)ECS服務(wù)器時(shí)会傲,ECS實(shí)例會(huì)自動(dòng)運(yùn)行mysql數(shù)據(jù)庫(kù)锅棕,無(wú)需用戶手動(dòng)啟動(dòng)。
至此淌山,完成MySQL的全部安裝裸燎。
2.6 安裝php語(yǔ)言環(huán)境
本小節(jié),將主要介紹在Linux系統(tǒng)的ECS實(shí)例上泼疑,安裝LNMP環(huán)境中安裝PHP語(yǔ)言環(huán)境的操作步驟德绿。
說(shuō)明:本實(shí)驗(yàn)中,安裝的是PHP 5.3.3版本退渗。
- 首先移稳,用戶執(zhí)行如下命令,安裝php及其常用擴(kuò)展包会油。若缺少擴(kuò)展包个粱,可能會(huì)導(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語(yǔ)言基本環(huán)境桨仿。
- 完成PHP語(yǔ)言基本環(huán)境的安裝后睛低。執(zhí)行如下命令,安裝PHP的相關(guān)組件。這樣钱雷,可以使PHP支持MySQL莺戒、FastCGI模式。
yum install php-tidy php-common php-devel php-fpm php-mysql
說(shuō)明:CGI全稱是“公共網(wǎng)關(guān)接口”(Common Gateway Interface)急波,HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序一般運(yùn)行在網(wǎng)絡(luò)服務(wù)器上瘪校。 CGI可以用任何一種語(yǔ)言編寫(xiě)澄暮,只要這種語(yǔ)言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量阱扬。如php,perl,tcl等泣懊。FastCGI像是一個(gè)常駐(long-live)型的CGI,它可以一直執(zhí)行著麻惶,只要激活后馍刮,不會(huì)每次都要花費(fèi)時(shí)間去fork一次。
等待幾秒鐘窃蹋,頁(yè)面提示“Is this ok [y/N]”,輸入y卡啰,允許安裝大小總計(jì)為6.7M的組件。
等待幾秒鐘警没,頁(yè)面提示“Complete!”匈辱,證明組件已安裝成功。此時(shí)杀迹,PHP支持MySQL和FastCGI模式亡脸。
- 執(zhí)行命令service php-fpm start,啟動(dòng)php-fpm树酪,界面顯示“OK”浅碾。由于Nginx是個(gè)輕量級(jí)的HTTP server,必須借助第三方的FastCGI處理器才可以對(duì)PHP進(jìn)行解析续语,PHP-FPM是一個(gè)第三方的FastCGI進(jìn)程管理器垂谢,只用于PHP。
- 最后疮茄,執(zhí)行命令chkconfig --levels 235 php-fpm on埂陆,設(shè)置2、3娃豹、5級(jí)別開(kāi)機(jī)啟動(dòng)php-fpm焚虱。這樣,用戶在下次啟動(dòng)ECS服務(wù)器時(shí)懂版,ECS會(huì)自動(dòng)運(yùn)行php-fpm鹃栽,無(wú)需用戶手動(dòng)運(yùn)行。
至此,已成功安裝LNMP的所有環(huán)境民鼓。下一小節(jié)中薇芝,用戶將配置Nginx服務(wù)器,使Nginx支持php語(yǔ)言環(huán)境丰嘉。
2.7 配置nginx支持php
本小節(jié)中夯到,將設(shè)置Nginx 的配置文件,允許Nginx服務(wù)器支持PHP語(yǔ)言環(huán)境饮亏。
1. 在真實(shí)的生產(chǎn)工組環(huán)境中耍贾,一般均需要備份Nginx配置文件,這樣的做法可以快速恢復(fù)原有Nginx配置信息路幸。若之后用戶需要對(duì)配置文件進(jìn)行修改荐开,均需要在修改前對(duì)配置文件進(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配置文件的編輯頁(yè)面予借,添加Nginx的fastcgi支持越平。
首先,將文件第45行修改為如下內(nèi)容灵迫,也就是首頁(yè)支持php語(yǔ)言秦叛。
index index.php index.html index.htm;
然后,將文件的65-72行代碼前的注釋“F僦啵”去掉挣跋,并替換"root"和“fastcgi_param”參數(shù)值為如下內(nèi)容。也就是狞换,使用/usr/share/nginx/html作為網(wǎng)站根目錄避咆,進(jìn)行訪問(wè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保存并退出編輯頁(yè)面。
- 執(zhí)行命令vim /etc/php.ini黄琼,進(jìn)入文件php.ini的編輯頁(yè)面樊销,在結(jié)尾的“;Local Variables:”之前添加如下內(nèi)容。完成后围苫,執(zhí)行:wq保存并退出編輯頁(yè)面裤园。
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)站訪問(wèn)的主目錄下,創(chuàng)建一個(gè)info.php文件库倘,并進(jìn)入新建文件的編輯頁(yè)面临扮。并在編輯頁(yè)面中,輸入如下代碼教翩,用于顯示php的基本信息頁(yè)面杆勇。完成后,輸入:wq饱亿,保存并退出編輯頁(yè)面蚜退。
<?php
phpinfo();
?>
- 最后,測(cè)試nginx是否成功解析php彪笼。打開(kāi)本地瀏覽器钻注,并在地址欄中輸入:http://xxx.xxx.xx.xx/info.php,若頁(yè)面顯示php介紹信息配猫,證明LNMP環(huán)境搭建成功幅恋。
說(shuō)明:xxx.xxx.xx.xx為云中沙箱提供ECS實(shí)例的“公網(wǎng)地址”。