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静态化

posted on 2020-08-20 23:18  光军彦  阅读(182)  评论(0编辑  收藏  举报