LNMP環境應用實踐php
1、LNMP介紹html
大約在2010年之前,互聯網公司最經常使用的經典Web服務環境組合就是LAMP(即Linux,Apache,MySQL,PHP),近幾年隨着Nginx Web服務的逐漸流行,
又出現了新的Web服務環境組合--LNMP或LEMP,其中LNMP爲Linux,Nginx,MySQL,PHP等首字母的縮寫,而LEMP中的E則表示Nginx,
它取自Nginx名字的發音(engine x)。如今,LNMP已經逐漸成爲國內大中型互聯網公司網站的主流組合環境,所以,咱們必須熟練掌握LNMP環境的搭建,優化及維護方法。mysql
在深刻學習LNMP組合以前,有必要先來了解如下LNMP環境組合的基本原理,也就是它們之間究竟是怎樣互相調度的?
在LNMP組合工做時,首先是用戶經過瀏覽器輸入域名請求Nginx Web服務,若是請求是靜態資源,則由Nginx解析返回給用戶;若是是動態請求(.php結尾),
那麼Nginx就會把它經過FastCGI接口(生產經常使用方法)發送給PHP引擎服務(FastCGI進程php-fpm)進行解析,若是這個動態請求要讀取數據庫數據,
那麼PHP就會繼續向後請求MySQL數據庫,以讀取須要的數據,並最終經過Nginx服務把獲取的數據返回給用戶,
這就是LNMP環境的基本請求順序流程。這個請求流程是企業使用LNMP環境的經常使用流程。linux
用戶的請求必定是遵循HTTP協議的所以是經過瀏覽器過來的
nginx
(1)Nginx=http格式數據包,9http數據包特色格式很鬆散,所以解析的速度慢,可是數據包比fastcgi格式數據包小web
(2)接口規則=快速接口,fastcgi數據包,這種規則的數據包,格式很是嚴謹,所以PHP解析的速度很是快,可是越嚴謹的數據包越大,因此fastcgi數據包大小要絕對大於http數據包sql
(3)軟件的設計架構分爲C/S和B/S,做爲客戶端Client的fastcgi和做爲Server端的PHP-fpm,由於常常用,fastcgi_pass和Nginx合併,而PHP-fpm和PHP功能合併了數據庫
(4)nginx和apache其實同樣,若是沒有PHP支持,那麼都處理不了所謂的靜態請求,它們自身其實都只能處理靜態,只能apache轉發動態數據包的速度快,可是隻是單個包速度快,apache併發低apache
(5)代碼是絕對不往存儲裏放的,代碼是不須要作備份的,保證安全的是圖片和視頻。vim
(6)PHP須要訪問網頁,需不須要掛存儲,要看它什麼功能,若是是讀網頁不須要掛存儲。
好比:LNMP和LAMP
L=Linux N=nginx A=pache
P=php T=tomcatNginx和Apache都是web應用服務器
Nginx處理靜態數據快,Apache處理動態快
Nginx對系統資源佔用小,Apache資源佔用高
Nginx用的是epoll模型,Apache用的select模型
全都部署在一臺上 LNMP
全都不在一臺上 N+P+M
只分離MySQL NP+M
CGI的全稱爲「通用網關接口」(Common Gateway Interface),爲HTTP服務器與其餘機器上的程序服務通訊交流的一種工具,CGI程序須運行在網絡服務器上。
傳統CGI接口方式的主要缺點是性能較差,由於每次HTTP服務器遇到動態程序時都須要從新啓動解析器來執行解析,以後結果纔會被返回給HTTP服務器。這在處理高併發訪問時幾乎是不可用的,所以就誕生了FastCGI。另外,傳統的CGI接口方式安全性也不好,故而如今已經不多被使用了。
FastCGI是一個可伸縮的,高速地在HTTP服務器和動態腳本語言間通訊的接口(在Linux下,FastCGI接口即爲socket,這個socket能夠是文件socket,也能夠是IP socket),主要優勢是把動態語言和HTTP服務器分離出來。多數流行的HTTP服務器都支持FastCGI,包括Apache,Nginx和Lighttpd等。
同時,FastCGI也被許多腳本語言所支持,例如當前比較流程的腳本語言PHP。FastCGI接口採用的是C/S架構,它能夠將HTTP服務器和腳本解析服務器分開,同時還能在腳本解析服務器上啓動一個或多個腳原本解析守護進程。當HTTP服務器遇到動態程序時,能夠將其直接交付給FastCGI進程來執行,而後將獲得的結果返回給瀏覽器。這種方式可讓HTTP服務器專注地處理靜態請求,或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提升了整個應用系統的性能。
FastCGI的重要特色以下:
HTTP服務器和動態腳本語言間通訊的接口或工具。
可把動態語言解析和HTTP服務器分離開。
Nginx,Apache,Lighttpd,以及多數動態語言都支持FastCGI。
FastCGI接口方式採用C/S結構,分爲客戶端(HTTP服務器)和服務器端(動態語言解析服務器)
PHP動態語言服務器端能夠啓動多個FastCGI的守護進程(例如php-fpm(fcgi process mangement))
HTTP服務器經過(例如Nginx fastcgi_pass)FastCGI客戶端和動態語言FastCGI服務器端通訊(例如php-fpm)
軟件的設計架構分爲C/S和B/S
做爲客戶端Client和fastcgi_pass和做爲Server端的PHP-fpm(9000端口)
由於常用,因此fastcgi_pass和Nginx合併
而PHP-fpm和PHP功能合併了用戶的請求必定是遵循HTTP協議的,由於是經過瀏覽器過來的。
Nginx和Apache其實同樣,若是沒有PHP支持,那麼都處理不了動態請求。
他們自身其實都只能處理靜態。只是Apache轉發動態數據包的速度快,
但只是單個數據包快,Apache併發低。
5、LNMP搭建
安裝mysql二進制
直接解壓便可:解壓到/usr/local/
建立用戶:
useradd -s /sbin/nologin -M mysql
進入/usr/local/mysql-5.5.32-linux/
作個軟鏈接方便使用==>
ln -s mysql-5.5.32-linux /usr/local/mysql
複製配置文件:
/bin/cp support-files/my-small.cnf /etc/my.cnf
作初始化:
映射==>
echo "192.168.200.131 LNMP" > /etc/hosts
建立mysql數據文件目錄==>
mkdir -p /usr/local/mysql/data
受權mysql用戶管理mysql的安裝目錄==>
chown -R mysql.mysql /usr/local/mysql
安裝初始化mysql依賴包==>
yum -y install libaio
初始化mysql數據庫文件==>
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
複製mysql啓動腳本到mysql的命令路徑==>
cd /usr/local/mysql cp support-files/mysql.server /etc/init.d/mysqld
加x權限,使腳本可執行==>
chmod +x /etc/init.d/mysqld
啓動mysql==>
/etc/init.d/mysqld start
給mysql命令作軟鏈接==>
ln -s /usr/local/mysql/bin/* /usr/local/bin
給mysql添加密碼==>
mysqladmin -uroot password '123123'
PHP端
須要zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel
libiconv-devel freetype-devel libpng-devel gd
libcurl-devel libxslt-devel支持包
yum沒法安裝libiconv庫,須要手動下載==>
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
解壓libiconv到/usr/src/
進入:cd /usr/src/libiconv-1.14.tar.gz進行編譯
./configure --prefix=/usr/local/libiconv && make && make install
須要使用epel源安裝libmcrypt庫、mhash加密擴展庫、mcrypt加密擴展庫
下載epel源到yum配置文件,從新清空生成緩存,下載epel源地址==>
wget http://mirrors.aliyun.com/repo/epel-6.repo
PHP下載路徑==>
wget http://cn2.php.net/get/php-5.3.28.tar.gz/from/this/mirror
解壓PHP包到/usr/src/
進入cd /usr/src/php-5.3.28進行編譯:
./configure \ --prefix=/usr/local/php5.3.28 \ --with-mysql=/usr/local/mysql \ --with-iconv-dir=/usr/local/libiconv \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-xml \ --disable-rpath \ --enable-safe-mode \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --with-curl \ --with-curlwrappers \ --enable-mbregex \ --enable-fpm \ --enable-mbstring \ --with-mcrypt \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-zip \ --enable-soap \ --enable-short-tags \ --enable-zend-multibyte \ --enable-static \ --with-xsl \ --with-fpm-user=www \ --with-fpm-group=www \ --enable-ftp
安裝完以後須要作軟連接==>
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64
手動建立一個文件==>
touch ext/phar/phar.phar
建立完以後直接make && make install
將PHP作個軟連接方便使用==>
ln -s /usr/local/php5.3.28 /usr/local/php
複製php.ini-production==>
cd /usr/src/php5.3.28 cp php.ini-production /usr/local/php/lib/php.ini
須要啓動一個配置文件==>
cd /usr/local/php/etc/ cp php-fpm.conf.default php-fpm.conf
啓動php服務php-fpm==>
/usr/local/php/sbin/php-fpm
6、PHP實例
配置nginx配置文件==>vim /usr/local/nginx/conf/nginx.conf
添加一個網頁
作一個動態首頁,測試一下成不成功
在/usr/local/nignx/html/blog首頁裏建立一個text_info.php
在裏面輸入:
<?php phpinfo(); ?>
——配置完成
在主機添加映射,而後開始測試
打開瀏覽器輸入:
回車出現以下所示:
測試成功
測試mysql鏈接是否成功
在/usr/local/nginx/html/blog裏建立test_mysql.php
添加以下所示:
在瀏覽器輸入:
鏈接成功
7、部署博客
先在mysql建立專用數據庫wordpress,用於存放blog數據
登陸mysql:mysql -uroot -p123123
create database wordpress;
建立一個wordpress專用管理用戶
grant all on wordpress.* to wordpress@’localhost’ identified by ‘123123’;
配置nginx文件
下載wordpress的包wordpress-4.9.8.tar.gz
連接:https://pan.baidu.com/s/1_HjxLp2A_3FzEk43FLK50A
提取碼:0xyp
解壓到當前文件
將wordpress裏的內容移動到/usr/local/nginx/html/bolg首頁裏
mv wordpress/* /usr/local/nginx/html/blog/
在瀏覽器登陸網址:
實現wordpress博客程序URL靜態化
網頁修改設置:
在nginx配置文件添加以下圖所示:
重啓nginx服務==>/usr/local/nginx/sbin/nginx.conf -s reload