• LNMP一体化配置及分离式部署异同点


    文章目录

    1 简介

    一种常用的web服务环境组合
    linux,nginx,mysql,php(手机端是tomcat)

    2 工作流程

    用户通过http请求访问web服务器,如果是静态资源,则由nginx解释返回给用户;若是动态请求(.php结尾),那么nginx就会把它通过fastcgi接口,发送给php引擎服务进行解析;若该动态请求要求读取数据库数据,那么PHP就会向后请求MySQL数据库,读取需要的数据,最终通过nginx服务把获取的数据返回给用户。

    3 配置步骤

    3.1 配置nginx服务

    3.2 二进制方式安装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
    
    #修改配置文件
    
    cd /usr/local/mysql
    /bin/cp support-files/my-small.cnf /etc/my.cnf 
    
    #初始化MySQL数据库文件
    
    useradd -s /sbin/nologin -M mysql
    mkdir -p /usr/local/myql/data
    chown -R 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
    #初始化成功会有两个OK的字样,并且在数据目录下生成一些数据库运行的必需基本文件
    
    #配置并启动MySQL数据库
    
    cp support-files/mysql.server /etc/init.d/mysqld 
    chmod +x /etc/init.d/mysqld
    /etc/init.d/mysqld start
    ss -antup | grep mysql
    
    #加入开机自启动
    chkconfig --add mysqld
    #创建命令软连接
    ln -s /usr/local/mysql/bin/* /usr/local/bin
    #给root用户设置密码
    mysqladmin -u root password '123123'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    3.3 Fastcgi介绍

    • 简介
      一种可伸缩,高速地在http服务器和动态脚本语言间通信的接口,主要优点是把动态语言和http服务器分离出来
      fastcgi客户端:fastcgi_pass(nginx集成了fastcgi的客户端)
      服务端:php-fpm(php集成了服务端)
      fastcgi接口软件采用的是C/S架构,在这里,client相当于nginx,它接收nginx发送过来的http请求,并将其解析为fastcgi数据包(这种包的格式更为严谨,因此大小也比http数据包大),发送到fastcgi服务端,通过socket进程(监听端口默认9000)发送到php服务,向后方获取数据

    3.4 PHP服务的安装和准备

    3.4.1 准备工作

    检查nginx和MySQL的安装和启动
    ls -ld /usr/local/nginx
    ls -ld /usr/local/mysql
    ss -antup | egrep "80|3306"
    测试nginx
    wget 127.0.0.1
    测试登录mysql
    mysql -uroot -p123123
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.4.2 安装PHP所需的lib库

    yum -y install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
    yum -y install freetype-devel libpng gd libcurl-devel libxslt-devel
    #安装后最好检查一下,命令1安装4个包应该仅缺少libiconv-devel包,默认yum源没有此包,需要编译安装
    
    rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
    #检查结果
    zlib-devel-1.2.3-29.el6.x86_64
    libxml2-devel-2.7.6-14.el6.x86_64
    libjpeg-turbo-devel-1.2.1-1.el6.x86_64
    
    rpm -qa freetype-devel libpng-devel gd libcurl-devel libxslt-devel
    #检查结果
    freetype-devel-2.3.11-14.el6_3.1.x86_64
    libpng-devel-1.2.49-1.el6_2.x86_64
    libcurl-devel-7.19.7-37.el6_4.x86_64
    libxslt-devel-1.1.26-2.el6_3.1.x86_64
    gd-2.0.35-11.el6.x86_64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.4.3 编译安装libiconv-devel

    tar xf libiconv-1.14.tar.gz -C /usr/src
    cd /usr/src/libiconv-1.14
    ./configure --prefix=/usr/local/libiconv && make && make install
    
    • 1
    • 2
    • 3
    • CentOS 7.5版本在执行make环节时,可能出现
    ./stdio.h:1010:2: error: invalid preprocessing directive #_GL_WARN_ON_USE
     #_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
      ^
    make[2]: *** [progname.o] Error 1
    make[2]: Leaving directory `/usr/src/libiconv-1.14/srclib'
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/usr/src/libiconv-1.14/srclib'
    make: *** [all] Error 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 解决办法是将srclib/stdio.in.h文件中,698行删除,重新make

    3.4.4 安装其他的库和加密扩展库

    使用rpm安装,或者云yum安装,34存在顺序关系,这里没指定版本,使用rpm安装需要指定完整的软件包名

    rpm -ivh libmcrypt
    rpm -ivh libmcrypt-devel
    rpm -ivh mhash
    rpm -ivh mcrypt
    
    • 1
    • 2
    • 3
    • 4

    3.4 解压,预配置PHP(Fastcgi方式)服务

    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=ocal/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=nginx --with-fpm-group=nginx --enable-ftp
    #出现thank you for using php则为正确
    
    • 1
    • 2
    • 3
    • 4
    • 部分参数说明:
      指定安装目录
      –prefix=/usr/local/php5.2.28
      指定mysql的安装路径,因为需要安装php所需的mysql相关内容 如果本地没有mysql,那么这个参数可用--with-mysql=mysqlnd代替,这是php自带的连接mysql的客户端工具
      (分离式部署需要用到–with-mysql=mysqlnd)
      –with-mysql=/usr/local/mysql
      指定php-fpm进程管理的用户和组,最好和nginx用户统一
      –with-fpm-user=nginx
      –with-fpm-group=nginx
      表示激活php-fpm方式服务,以fastcgi方式运行php
      (php与nginx分离部署时,需要在php服务器上,也创建nginx的程序用户,保证两台主机上的程序用户相同,否则无法启动php-fpm)

    3.5 编译安装PHP

    cd /usr/src/php-5.3.28
    ln -s /usr/local/lib/libmysqlclient.so.18 /usr/lib64/
    touch ext/phar/phar.phar
    
    • 1
    • 2
    • 3

    (需要注意的是,分离式部署不需要上面这一步,预配置完成后,直接编译)

    make
    #正确提示为Don't forget to run 'make test'.,最后完成编译
    make install
    
    • 1
    • 2
    • 3

    3.6 修改配置文件

    #设置软连接以方便访问
    ln -s /usr/local/php5.3.28 /usr/local/php
    cd /usr/src/php-5.3.28/
    ls php.ini*
    
    #有两个模板配置文件,一个生产用,一个测试用,我们用生产配置文件,拷贝到php默认目录并更名,这是php解析fastcgi服务的配置文件
    cp php.ini-production /usr/local/php/lib/php.ini
    
    #配置php(fastcgi方式)的配置文件php-fpm.conf,这是fastcgi服务端的socket进程配置文件
    cd /usr/local/php/etc/
    cp php-fpm.conf.default php-fpm.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (分离式部署式,需要修改配置文件151行,监听IP改为php服务器的IP,否则不能收到远程主机发送过来的fashcgi数据包(一体化监听127.0.0.1)

    #启动php-fpm监听进程并检查端口占用,暂时用默认配置,以后再进行优化
    /usr/local/php/sbin/php-fpm
    lsof -i:9000
    
    • 1
    • 2
    • 3

    3.7 配置nginx支持php程序请求访问

    修改配置文件,增加动态location模块(虚拟主机为blog.yunjisuan.com)

    location ~ .*.(php|php5)?$ {
        root html/blog;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        include     fastcgi.conf;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    检查nginx配置文件并重启nginx服务
    测试php解析请求是否OK
    (分离式部署,fastcgi推送IP改为php主机IP,fastcgi可以通过推送给不同服务器池,来处理不同的动态业务,类似于反向代理)

    #创建php用于测试的动态网页文件
    cd /usr/local/nginx/html/blog
    echo "<?php phpinfo(); ?>" > test_info.php
    
    • 1
    • 2
    • 3

    打开浏览器测试http://blog.yunjisuan.com/test_info.php 测试正常,进行下一步

    3.8 针对nginx访问php,测试php连接MySQL

    cd /usr/local/nginx/html/blog/
    vim test_mysql.php
    #内容为
    <?php
        //$link_id=mysql_connect('主机名','用户','密码');
    $link_id=mysql_connect('localhost','root','123123');
        if($link_id){
            echo "mysql successful by joe";
        }else{
            echo mysql_error();
        }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在浏览器中测试访问http://blog.yunjisuan.com/test_mysql.php 成功则会出现已设定的提示语
    (分离式部署时,测试登录mysql的用户需要能远程登录mysql)

    3.9 有动态主页时需要注意的问题

    • 当nginx默认location模块指定主页文件为index.php时,当访问主页,nginx会去网页目录下找index.php页面,若页面存在,则触发动态location模块,通过fastcgi转发请求给php去找动态主页,若页面不存在,由于安全机制,不会返回404,而返回403权限拒绝

    • 所以,分离式部署情况时,要保证两台主机都有网页目录,且属主为nginx程序用户,网页目录下的文件都相同,且都存在动态主页文件,而静态数据,upload和static目录,都需要挂载到NFS存储上

    4. 部署个人blog服务

    4.1 mysql数据库配置准备

    1.登录mysql数据库创建专用的库wordpress,用于存放blog数据

    2.创建专用wordpress blog管理用户wordpress
    用户权限为对库wordpress有all权限, 登录IP设置为php服务同主机(此处为localhost)

    4.2 nginx及php环境配置准备

    1. 在nginx配置文件中,默认localhost模块t添加一个首页文件index.php

      index index.php index.html index.htm;

    2. 将blog服务相关文件解压至blog网页目录中

      tar xf wordpress-4.7.4-zh_CN.tar.gzz -C /usr/local/nginx/html/blog/
      cd /usr/local/nginx/html/blog

    3. 删除无用文件,保证目录下只有blog服务的网页文件,并授权nginx程序用户

    rm -f index.html test_info.php test_mysql.php
    mv wordpress/* .
    chown -R nginx /usr/local/nginx/html/blog/
    nginx -s reload
    
    • 1
    • 2
    • 3
    • 4
    1. 打开浏览器开始安装wordpress个人博客
      需要准备的内容有:
      前文创建的mysql库wordpress
      专用用户wordpres及密码
      允许访问的数据库主机IP,这里是LNMP一体环境,所以是localhost
      表的前缀,自定义

    2. 然后进行个人信息注册

    3. 登录后实现wordpress博客程序URL静态化
      在wordpress后台依次点击
      设置——固定链接——自定义结构
      然后输入代码
      /archives/%post_id%.html

    然后,修改nginx配置文件,在默认的location模块中加入以下内容:

    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
        }
    if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
        }
    if (!-f $request_filename){
        rewrite (.*) /index.php;
        }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    最后重新启动nginx服务,这样访问blog时就成功实现URL静态化

  • 相关阅读:
    Cocos2D学习笔记(1)- 常用的类
    C++头文件的重复定义错误处理
    python3中的sort和sorted函数
    numpy提供的快速的元素级数组函数
    HDU 1180 诡异的楼梯(BFS)
    POJ 1020 Anniversary Cake(DFS)
    POJ 1564 Sum It Up(DFS)
    POJ 1190 生日蛋糕(DFS)
    HDU 1026 Ignatius and the Princess I(BFS+优先队列)
    HDU 1172 猜数字(DFS)
  • 原文地址:https://www.cnblogs.com/huibaobao/p/13538499.html
Copyright © 2020-2023  润新知