LNMP环境应用实践

LNMP环境应用实践

一、LNMP介绍

大约在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环境的搭建,优化及维护方法。

  LNMP组合工作流程

在深入学习LNMP组合之前,有必要先来了解以下LNMP环境组合的基本原理,也就是它们之间到底是怎样互相调度的?
在LNMP组合工作时,首先是用户通过浏览器输入域名请求Nginx Web服务,如果请求是静态资源,则由Nginx解析返回给用户;如果是动态请求(.php结尾), 
那么Nginx就会把它通过FastCGI接口(生产常用方法)发送给PHP引擎服务(FastCGI进程php-fpm)进行解析,如果这个动态请求要读取数据库数据, 
那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户, 
这就是LNMP环境的基本请求顺序流程。这个请求流程是企业使用LNMP环境的常用流程。

  用户的请求一定是遵循HTTP协议的因此是通过浏览器过来的

(1)Nginx=http格式数据包,9http数据包特点格式很松散,因此解析的速度慢,但是数据包比fastcgi格式数据包小

(2)接口规则=快速接口,fastcgi数据包,这种规则的数据包,格式非常严谨,因此PHP解析的速度非常快,但是越严谨的数据包越大,所以fastcgi数据包大小要绝对大于http数据包

(3)软件的设计架构分为C/S和B/S,作为客户端Client的fastcgi和作为Server端的PHP-fpm,因为经常用,fastcgi_pass和Nginx合并,而PHP-fpm和PHP功能合并了

(4)nginx和apache其实一样,如果没有PHP支持,那么都处理不了所谓的静态请求,它们自身其实都只能处理静态,只能apache转发动态数据包的速度快,但是只是单个包速度快,apache并发低

(5)代码是绝对不往存储里放的,代码是不需要做备份的,保证安全的是图片和视频。

(6)PHP需要访问网页,需不需要挂存储,要看它什么功能,如果是读网页不需要挂存储。

image_1cr41dhno1u681o0dnjl1kf9i4829.png-102.3kB

二、常见web框架结构

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

Nginx和Apache都是web应用服务器
Nginx处理静态数据快,Apache处理动态快
Nginx对系统资源占用小,Apache资源占用高
Nginx用的是epoll模型,Apache用的select模型

三、LNMP的部署方式分为两种

全都部署在一台上 LNMP

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

只分离MySQL NP+M

四、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并发低。

五、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

 六、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

添加如下所示:

在浏览器输入:

 

连接成功

七、部署博客

先在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

原文地址:https://www.cnblogs.com/heroke/p/9930151.html