LNMP環境應用實踐

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環境組合的基本原理,也就是它們之間究竟是怎樣互相調度的?
在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須要訪問網頁,需不須要掛存儲,要看它什麼功能,若是是讀網頁不須要掛存儲。

image_1cr41dhno1u681o0dnjl1kf9i4829.png-102.3kB

2、常見web框架結構

好比:LNMP和LAMP
L=Linux N=nginx A=pache
P=php T=tomcat

Nginx和Apache都是web應用服務器
Nginx處理靜態數據快,Apache處理動態快
Nginx對系統資源佔用小,Apache資源佔用高
Nginx用的是epoll模型,Apache用的select模型

3、LNMP的部署方式分爲兩種

全都部署在一臺上 LNMP

全都不在一臺上 N+P+M

只分離MySQL NP+M

4、FastCGI介紹

  什麼是CGI

CGI的全稱爲「通用網關接口」(Common Gateway Interface),爲HTTP服務器與其餘機器上的程序服務通訊交流的一種工具,CGI程序須運行在網絡服務器上。

傳統CGI接口方式的主要缺點是性能較差,由於每次HTTP服務器遇到動態程序時都須要從新啓動解析器來執行解析,以後結果纔會被返回給HTTP服務器。這在處理高併發訪問時幾乎是不可用的,所以就誕生了FastCGI。另外,傳統的CGI接口方式安全性也不好,故而如今已經不多被使用了。

  什麼是FastCGI

FastCGI是一個可伸縮的,高速地在HTTP服務器和動態腳本語言間通訊的接口(在Linux下,FastCGI接口即爲socket,這個socket能夠是文件socket,也能夠是IP socket),主要優勢是把動態語言和HTTP服務器分離出來。多數流行的HTTP服務器都支持FastCGI,包括Apache,Nginx和Lighttpd等。

同時,FastCGI也被許多腳本語言所支持,例如當前比較流程的腳本語言PHP。FastCGI接口採用的是C/S架構,它能夠將HTTP服務器和腳本解析服務器分開,同時還能在腳本解析服務器上啓動一個或多個腳原本解析守護進程。當HTTP服務器遇到動態程序時,能夠將其直接交付給FastCGI進程來執行,而後將獲得的結果返回給瀏覽器。這種方式可讓HTTP服務器專注地處理靜態請求,或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提升了整個應用系統的性能。

  1. FastCGI的重要特色以下:
  2. HTTP服務器和動態腳本語言間通訊的接口或工具。
  3. 可把動態語言解析和HTTP服務器分離開。
  4. NginxApacheLighttpd,以及多數動態語言都支持FastCGI
  5. FastCGI接口方式採用C/S結構,分爲客戶端(HTTP服務器)和服務器端(動態語言解析服務器)
  6. PHP動態語言服務器端能夠啓動多個FastCGI的守護進程(例如php-fpmfcgi process mangement))
  7. HTTP服務器經過(例如Nginx fastcgi_passFastCGI客戶端和動態語言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數據

登陸mysqlmysql -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

相關文章
相關標籤/搜索