zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    做技术选型时,要注意些什么?
    .net core 实现默认图片
    启用跨源请求 (CORS)
    使用 Cookie 而无需 ASP.NET 核心标识的身份验证
    Windbg+Procdump解决w3wp.exe CPU过百问题
    .NET Core 2.0 Cookie中间件 权限验证
    想要学习设计模式,你得先会看类图,一张图读懂UML
    ef core
    Dapper MySql DateTime 异常
    简单理解Socket
  • 原文地址:https://www.cnblogs.com/heroke/p/9930151.html
Copyright © 2011-2022 走看看