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