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

相关文章
相关标签/搜索