zoukankan      html  css  js  c++  java
  • LNMP环境应用

        

    企业LNMP环境应用

    L=linux 丨 N=nginx 丨 A=apache 丨 P=php 丨 T=tomcat

    Nginx和Apache都是Web应用服务器

    相对来说,Nginx处理静态数据快,Apache处理动态快

    Nginx对系统资源占用小,Apache资源占用高

    Nginx用得是epoll模型(异步非阻塞IO),Apache用的是select模型(同步阻塞IO)

     

    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需要访问网页,需不需要挂存储,要看它什么功能,如果是读网页不需要挂存储。

           

    http数据包特点:格式松散,因此解析速度慢,但是数据包比fastsgi格式数据包小
    
    fastsgi数据包:格式严谨,因此解析速度快,但是严谨的数据包大,所以fastsgi格式数据包大于http数据包

             

           

                    

             

    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
     

    Nginx FastCGI的运行原理

    Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,为了调用CGI程序,还需要一个FastCGI的wrapper(可以理解为用于启动另一个程序的程序),这个wrappper绑定在某个固定的socket上,如端口或文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或外部程序处理脚本来读取返回的数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。

     

    LNMP搭建流程

     

    首先搭建Nginx服务

     

    用本地yum仓库安装依赖包

    yum install -y pcre-devel openssl-devel gcc gcc-c++ make automake

              

    下载软件源码包

    wget -q http://nginx.org/download/nginx-1.10.2.tar.gz 
    没有wget命令需要手动安装 
    yum -y install wget

            

    创建程序用户

    useradd -s /sbin/nologin -M www

           

    解压缩和预配置,编译和安装

    tar xf nginx-1.10.2.tar.gz -C /usr/src/

    cd /usr/src/nginx-1.10.2

    ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

    make && make install

           

    做Nginx软链接

    ln -s /usr/local/nginx/sbin/* /usr/local/sbin

          

    修饰一下Nginx配置文件

    cd /usr/local/nginx/conf

    egrep -v "#|^$" nginx.conf.default > nginx.conf

           

    特别提示

    因为安装PHP需要MySQL的安装环境,所以需要先安装MySQL,不然PHP编译会报错

    如何没有安装MySQL需要把--with-mysql=/usr/local/mysql改成--with-mysql=mysqlnd

    MySQL二进制搭建方法

     

    创建程序用户

    useradd -s /sbin/nologin -M mysql

           

    获取MySQL二进制软件包

    链接:https://pan.baidu.com/s/1dzCH1GsOiMR3i_omOZliHA

    提取码:u6h8

    二进制方式安装MySQL

    tar xf mysql-5.5.32-linux2.6-x86_64.tar.gz -C /usr/local

    cd /usr/local

    ln -s mysql-5.5.32-linux2.6-x86_64 mysql

           

    初始化MySQL配置文件my.cnf

    cd /usr/local/mysql

    /bin/cp support-files/my-small.cnf /etc/my.cnf

           

    工作中如果主机名,在你本地没有映射,有可能会有错误出现

    echo "192.168.200.129 LNMP" >> /etc/hosts

           

    初始化MySQL数据库文件

    chown -R mysql.mysql /usr/local/mysql

          

    光盘源安装依赖包,否则编译会报错

    yum -y install libaio

    /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

           

    设置MySQL启动脚本

    cp support-files/mysql.server /etc/init.d/mysqld

    chmod +x /etc/init.d/mysqld

    /etc/init.d/mysqld start

    ss -antup | grep 3306

    chkconfig --add mysqld

    chkconfig mysqld on

    chkconfig --list mysqld

          

    制作软连接,让linux有mysql命令

    ln -s /usr/local/mysql/bin/* /usr/local/bin

    which mysql

           

    创建MySQL密码

    mysqladmin -uroot password '123321'

          

          

           

            

    PHP服务搭建

     

    安装PHP所需的lib库

    yum -y install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel

    yum -y install freetype-devel libpng-devel gd libcurl-devel libxslt-devel

          

    安装yum无法安装的libiconv库

    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

    tar xf libiconv-1.14.tar.gz -C /usr/src/

    cd /usr/src/libiconv-1.14/

    ./configure --prefix=/usr/local/libiconv && make && make install

           

    安装libmcrypt库

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

    yum -y install libmcrypt-devel

           

    安装mhash加密扩展库

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

    yum -y install mhash

           

    安装mcrvpt加密扩展库

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

    yum -y install mcrypt

            

    获取PHP软件包

    wget http://cn2.php.net/distributions/php-5.3.28.tar.gz

           

    解压配置PHP

    tar xf php-5.3.28.tar.gz -C /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

    最后的正确输出提示为:Thank you for using PHP.

         

          

    编译详解

     
    1. --prefix=/usr/local/php5.2.28
    2. 表示指定PHP的安装路径为/usr/local/php5.3.28
    3. --with-mysql=/usr/local/mysql
    4. 表示需要指定MySQL的安装路径,安装PHP需要的MySQL相关内容。当然,如果没有MySQL软件包,也可以不单独安装,这样的情况可使用--with-mysql=mysqlnd替代--with-mysql=/usr/local/mysql,因为PHP软件里已经自带了连接MySQL的客户端工具。
    5. --with-fpm-user=www
    6. nginx表示指定PHP-FPM进程管理的用户为www,此处最好和Nginx服务用户统一
    7. --with-fpm-group=www
    8. 表示指定PHP-FPM进程管理的组为www,此处最好与Nginx服务用户组统一。
    9. --enable-fpm
    10. 表示激活PHP-FPM方式服务,即以FastCGIF方式运行PHP服务。
     

    编译PHP

    ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64

    touch ext/phar/phar.phar

    make

           

           

    make最后的正确提示

    Build complete. 
    Don't forget to run 'make test'.

            

    安装PHP生成文件到系统

    make install

           

    设置软链接

    ln -s /usr/local/php5.3.28/ /usr/local/php

     

            

    PHP配置默认模版文件

    生产环境:php.ini-development 开发环境:php.ini-production

    开发环境更多的是开启日志,调试信息,而生产环境都是关闭状态

    cd /usr/src/php-5.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-fpm.conf,暂时可用默认的配置,先把服务搭好,以后再进行优化。

     

           

    分离式部署特别提示

    vim php-fpm.conf

    listen = 127.0.0.1:9000 --->如要分离式部署,需要把本地IP改成远程IP

     

           

     

    启动PHP服务

    /usr/local/php/sbin/php-fpm

    ss -antup | grep 9000

     

            

    修改Nginx配置文件

    cd /usr/local/nginx

    vim conf/nginx.conf

     
    1. worker_processes 1;
    2. error_log logs/error.log;
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. server {
    12. listen 80;
    13. server_name blog.yunjisuan.com;
    14. location / {
    15. root html/blog;    网页目录
    16. index index.html index.htm;
    17. }
    18. location ~ .*.(php|php5)?$ {   动态网页
    19. root html/blog;
    20. fastcgi_pass 127.0.0.1:9000;    推到127.0.0.1:9000
    21. fastcgi_index index.php;        动态网页首页
    22. include fastcgi.conf;           引进fastcgi.conf模板
    23. }
    24. }
    25. }
            
     
     

    检查并启动Nginx

    /usr/local/nginx/sbin/nginx -t 
    检查Nginx配置文件的语法

    /usr/local/nginx/sbin/nginx

    ss -antup | grep 80

    此步在生产环境很关键,如不提前检查语法,重启后发现语法错误会导致Nginx无法提供服务,,给用户访问体验带来不好的影响。

     

           

     

    创建网页目录

    cd html

    mkdir blog   

           

    针对静态网页测试

    echo "`hostname -I` blog.yunjisuan.com" > blog/index.html

           

    添加虚假机映射并测试静态

    vim /etc/hosts

    192.168.200.70 LNMP blog.yunjisuan.com

    curl blog.yunjisuan.com

           

    针对动态网页测试

    echo "<?php phpinfo(); ?>" > blog/test_info.php  或者vim写入

           

    添加windows映射并测试动态

    C:WindowsSystem32driversetc --->windows映射文件位置

    192.168.200.70 blog.yunjisuan.com

    在浏览器输入blog.yunjisuan.com/test_info.php

          

    针对MySQL测试

    cd blog

    vim test_mysql.php

     
    1. <?php
    2. $link_id=mysql_connect('localhost','root','123321'); 连接mysql的信息交给一个变量,本地,账号,密码
    3. if($link_id){         如果能连接上
    4. echo "mysql successful by zz ! ";    如果能连接上输出
    5. }else{
    6. echo mysql_error();             如果连接不上显示错误页面
    7. }
    8. ?>

              

    用PHP命令测试

    如果没有PHP命令就是没做软链接

    ln -s /usr/local/php/bin/* /usr/local/bin

    php test_mysql.php

    用PHP命令激活这个脚本

            

    windows网页测试

    blog.yunjisuan.com/test_mysql.php

            

         

    开源博客程序WordPress介绍

    WordPress 是一套利用PHP语言和MySQL数据库开发的开源免费的blog(博客,网站)程序,用户可以在支持PHP环境和MySQL数据库的服务器上建立blog站点。它的功能非常强大,拥有众多插件,易于扩充功能。其安装和使用也都非常方便。目前WordPress已经成为搭建blog平台的主流,很多发布平台都是根据WordPress二次开发的,如果你也想像他们一样拥有自己的blog,可购买网上的域名及空间,然后搭建LNMP环境,部署WordPress程序后就可以轻松成就自己的梦想了。

    WordPress是单用户个人博客与多用户博客是有区别的。

     

    部署一个blog程序服务

     

    MySQL环境配置准备

    mysql -uroot -p123321 --->登陆MySQL数据库

    create database wordpress; --->创建一个名字为wordpress的数据库存放blog数据

    grant all on wordpress.* to wordpress@'localhost' identified by '123321'; 
    创建一个专用的WordPress blog管理用户 
    localhost只允许本机通过wordpress用户访问数据库

    flush privileges; --->刷新权限,使得创建用户生效

    exit

           

    Nginx及PHP环境配置准备

     

    在Nginx配置文件里补充一个动态首页文件

    vim /usr/local/nginx/conf/nginx.conf

    需要在index后补一个首页文件index.php

           

    修改完配置文件平滑重启服务

    /usr/local/nginx/sbin/nginx -t

    /usr/local/nginx/sbin/nginx -s reload

          

    获取WordPress博客程序

    www.wordpress.org下载博客程序

    链接:https://pan.baidu.com/s/1hGyd1xFuL0oPBsFeROuUYQ 
    提取码:tmgk

     

    解压并放置到blog域名到对应虚拟主机的站点目录下

    tar xf wordpress-4.9.8.tar.gz

    cd /usr/local/nginx/html/blog

    rm -rf *

    mv ~/wordpress/* .

           

    授权用户访问

    chown -R www.www /usr/local/nginx/html/blog

           

    开始安装blog博客程序

    浏览器输入blog.yunjisuan.com,进入界面安装,选择中文

           

            

    数据库名 --->前面创建的数据库
    用户 --->专用的用户名
    密码 --->数据库密码
    数据库主机 --->允许访问的数据库主机,这里是LNMP一体的环境所以localhost最安全
    表前缀 --->为了安全改一下,防止黑客猜你的表名

             

              

           

    image_1crh8olfc1snv12tr1dd1vgc1qcd1p.png-24.6kB


    站点标题 --->博客主页的名字

    用户名 --->登陆博客的用户

    密码 --->登陆博客的密码

    您的电子邮件 --->有问题发送的邮箱

    对搜索引擎的可见性 --->测试环境需要取消,有的时候会打不开,会导致浏览速度很慢

           

     


    安装完WrodPress后直接登陆即可,进入的是后台页面

     网页输入域名测试

          

    实现WordPress博客程序URL静态化

    实现此功能时,首先要在Settings-固定链接-自定义结构-添加代码-保存更改

    /archives/%post_id%.html

           

    然后修改Nginx配置文件

    vim /usr/local/nginx/conf/nginx.conf

     
    1. worker_processes 1;
    2. error_log logs/error.log;
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. server {
    12. listen 80;
    13. server_name blog.yunjisuan.com;
    14. location / {
    15. root html/blog;
    16. index index.php index.html index.htm;
    17. if (-f $request_filename/index.html){
    18. rewrite (.*) $1/index.html break;
    19. }
    20. if (-f $request_filename/index.php){
    21. rewrite (.*) $1/index.php;
    22. }
    23. if (!-f $request_filename){
    24. rewrite (.*) /index.php;
    25. }
    26. location ~ .*.(php|php5)?$ {
    27. root html/blog;
    28. fastcgi_pass 127.0.0.1:9000;
    29. fastcgi_index index.php;
    30. include fastcgi.conf;
    31. }
    32. }
    33. }
    34. }
                

    检查语法并重新加载Nginx服务

    /usr/local/nginx/sbin/nginx -t

    /usr/local/nginx/sbin/nginx -s reload

    通过浏览器访问测试,是否静态化

    blog.yunjisuan.com

        创建文章,点击文章可以看见:

      

     

    用户浏览器端的图片解析规则

    上传图片需要做2个操作,图片放到存储里,放在存储的位置需要写到数据库里


     

    测试阶段

     

    主配置文件

    vim /usr/local/nginx/conf/nginx.conf

     
    1. worker_processes 1;
    2. events {
    3. worker_connections 1024;
    4. }
    5. http {
    6. include mime.types;
    7. default_type application/octet-stream;
    8. sendfile on;
    9. keepalive_timeout 65;
    10. server {
    11. listen 80;
    12. server_name xxx.yunjisuan.com;
    13. location / {
    14. root html/xxx;
    15. index index.html index.htm;
    16. }
    17. }

               

      

    检查语法并重新加载Nginx服务

    /usr/local/nginx/sbin/nginx -t

    /usr/local/nginx/sbin/nginx -s reload

    生成目录和导入图片

    cd /usr/local/nginx/html

    mkdir xxx

    chown -R www.www xxx/

    vim xxx/index.html      

    在把需要用的图片,导入虚拟机里

     

    1. welcom
    2. <img src="http://192.168.200.132/666.jpg" />

             

             

    加入本地映射   vim /etc/hosts

           

            windows映射就不演示了,自己添加一下就好

            

    网站测试

           
     
      

    清空nginx日志文件

     
    1. cd /usr/local/nginx/logs
    2. >access.log
     

     浏览器中打开 xxx.yunjisuan.com,然后看access.log日志文件

     

    分析Nginx日志文件

    浏览器单独发起请求在去拿图片,图片都是后拿的

     
        
     

     PHP两个功能.1 读(可以不挂存储)

                            2 上传(写),上传的数据保存到数据库,下次用户访问可以在数据库里找 

  • 相关阅读:
    ajax专题
    luogu P1346 电车 最短路
    luogu P1462 通往奥格瑞玛的道路 最短路
    luogu P1328 生活大爆炸版石头剪刀布
    luogu P1315 联合权值 枚举
    luogu P1156 垃圾陷阱 背包问题
    luogu P1217 回文质数 枚举
    luogu P3650 滑雪课程设计 枚举
    luogu1209 修理牛棚 贪心
    luogu P1223 排队接水 贪心
  • 原文地址:https://www.cnblogs.com/ZXJ-/p/9931817.html
Copyright © 2011-2022 走看看