LNMP网站架构(构建动态网站页面)(Linux、nginx、MySQL、PHP)

一、LNMP架构组成部分

需求

处理动态请求,需借助动态服务进行处理

处理动态请求的架构

早期:LNMP架构 (Linux nginx(处理静态请求,实现负载均衡) MySQL(存储数据用户信息) php(处理动态请求 php程序))

普遍:LNMT架构(Linux 、nginx、MySQL、Tomcat(Java程序处理动态请求,多用于移动互联网访问))

新型:LNMP架构(Linux、nginx、MySQL、Python)

LNMP架构工作原理过程

1、用户向网站发起访问

动态请求访问

静态请求访问

2、nginx程序接受用户HTTP请求信息

静态请求信息由nginx程序直接作出响应

动态请求信息由nginx借助fastcgi_pass指令将请求通过fastcgi接口发送给php程序进行处理

3、PHP程序接受nginx发送动态请求信息

本身可以直接处理 通过解析器直接处理 转换成html代码信息返回给nginx程序

需要调用数据库处理 通过解析器访问数据库 数据库会进行处理后返回给php结果

4、nginx接受PHP返回的信息

将结果信息返回给用户




numma架构 lnmt架构_numma架构


三、LNMP架构安装过程

(一)、Linux操作系统

1、确认安全服务需要关闭

2、确认系统/tmp目录权限为1777

nginx服务软件安装

安装yum官方源nginx程序

(三)、mariadb服务软件安装

下载安装数据库程序软件


yum install mariadb-server mariadb -y


启动数据库程序服务进程


systemctl start mariadb.service 
systemctl enable mariadb.service


PS:无法启动服务解决方法

第一步:rpm -ql mariadb-server

第二步:将默认配置文件覆盖


cp /usr/share/mysql/my-small.cnf  /etc/my.cnf


(四)、PHP服务软件安装

1、解决yum安装软件冲突问题


yum remove php-mysql php php-fpm php-common


2、准备yum安装软件扩展源信息


rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm


3、利用yum安装PHP相关软件信息


yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded  php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache  php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb


4、修改php服务进程管理用户信息

(建议修改的用户和nginx worker进程用户一致)

vim /etc/php-fpm.d/www.conf


user = www
group = www


5、启动PHP服务程序


systemctl  start php-fpm


四、LNMP架构部署配置过程

(一)、nginx与PHP服务程序进行串联

第一步:编写nginx配置文件

vim /etc/nginx/conf.d/blog.conf


server {
        listen       80;
        server_name  blog.oldboy.com;
        root         /html/blog;
        index        index.php index.html;
        location ~ .php$ {
               root /www;     #让php程序可以知道当哪个路径中获取代码信息  
               fastcgi_index index.php;    #默认php程序识别首页文件 index.php  
               fastcgi_pass  127.0.0.1:9000;    #将动态请求发送给本地主机9000端口 
               fastcgi_param SCRIPT_FILENAME(变量信息) $document_root$fastcgi_script_name(调用内置变量);
			   #$document_root        --- 识别访问网站uri资源路径信息
			   #$fastcgi_script_name  --- 识别访问网站uri资源代码信息
               include fastcgi_params;   --- 让nginx程序可以识别一些内置变量
         }
     }


第二步:验证测试:编写测试文件

vim /html/blog/test.php


<?php phpinfo(); ?>


第三步:浏览器访问测试

浏览器访问http://blog.oldboy.com/test.php

(二)、PHP与mariadb服务程序建进行串联

第一步:编写测试文件

vim /html/blog/test_mairadb.php


<?php
 $servername = "localhost";
 $username = "root";
 $password = "oldboy123";
 //$link_id=mysql_connect('主机名','用户','密码');
 //mysql -u用户 -p密码 -h 主机
 $conn = mysqli_connect($servername, $username, $password);
 if ($conn) {
       echo "mysql successful by root !n";
    }else{
       die("Connection failed: " . mysqli_connect_error());
    }
?>


第二步:浏览器访问测试

浏览器访问http://blog.oldboy.com/test_mairadb.php

五、LNMP搭建动态网站

(一)、搭建动态博客网站

第一步:下载获取动态网站代码信息

博客网站开源代码:wordpress

代码下载地址

https://cn.wordpress.org/download/

第二步:将代码信息进行上传/修改站点目录权限


chown -R www.www /html/blog/


第三步:进行网站页面初始化/和网站数据库服务建立连接

访问blog网站:http://blog.oldboy.com

创建数据库信息:create database wordpress;

创建管理数据库用户信息:grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';

查看用户是否创建:select user,host from mysql.user;

第四步:直接访问网站

(二)、搭建官方首页网站

第一步:下载获取动态网站代码信息

官方网站开源代码:dedecms/phpcms

代码下载地址

phpcms

http://www.phpcms.cn/html/download/phpcms/#content

dedecms

产 品 / DedeCMS / 软件下载_织梦CMS

(三)、搭建动态论坛网站

第一步:下载获取动态网站代码信息

论坛网站开源代码:discuz

代码下载地址

附件 · DiscuzX/Discuz X3.4 - 码云 Gitee.com

(四)、搭建动态知乎网站

第一步:下载获取动态网站代码信息

知乎网站开源代码:wecenter

代码下载地址

免费获取 WeCenter | WeCenter创建你的知乎

(五)、搭建动态视频网站

第一步:下载获取动态网站代码信息

视频网站开源代码:movcms

代码下载地址

下载 - 电影程序 - MOVCMS官方 - Powered by movcms

动态网站搭建后上传数据

通过动态网站交互方式


numma架构 lnmt架构_php_02


上传数据权限不足

修改php-fpm服务程序进程用户与nginxworker进程用户一致

客户端数据上传大小受限制

限制因素一:由于nginx服务影响

修改nginx配置文件


server {
      listen        80;
      server_name   blog.oldboy.com;
      root         /html/blog;
      index        index.php index.html;
      client_max_body_size 10m;
}


限制因素二:由于PHP服务影响

修改php配置文件

vim /etc/php.ini


799	upload_max_filesize = 10M  -- 调整大小为10M


六、LNMP架构数据库分离

数据库分离原因:可以实现数据共享存储

(一)、数据库服务迁移过程

第一步:备份数据信息

(迁移之前web服务器)


mysqldump -uroot -poldboy123  -A > /tmp/backup.sql


第二步:迁移数据

(迁移之前web服务器)


scp -rp /tmp/backup.sql  172.16.1.51:/tmp/


第三步:恢复数据

(迁移之后mysql服务器)


mysql -uroot -poldboy123  < /tmp/backup.sql


数据库数据迁移完毕后需操作

第一步:关闭迁移前服务器数据库服务


systemctl stop mariadb.service 
systemctl disable mariadb.service


第二步:需要修改连接数据库代码信息

vim /html/blog/wp-config.php


32 define( 'DB_HOST', '172.16.1.51' );


第三步:需要调整数据库用户配置信息


grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123';


七、LNMP架构网站串联存储服务

串联原因:实现数据共享存储

(一)、串联过程

第一步:将本地存储好数据进行保存备份


mkdir /tmp/blog_backup
mv /html/blog/wp-content/uploads/* /tmp/blog_backup/


第二步:检查确认存储服务是否可以正常使用


showmount -e 172.16.1.31


第三步:进行存储服务挂载操作


mount -t nfs 172.16.1.31:/data/blog/  /html/blog/wp-content/uploads/


第四步:将之前备份的数据进行恢复


cp /tmp/blog_backup/*  /html/blog/wp-content/uploads/


八、编译安装PHP

第一步:检查是否安装PHP


systemctl status php-fpm.service
systemctl stop php-fpm.service


第二步:获取PHP源码包


wget http://php.net/distributions/php-7.1.0.tar.gz


第三步:解决PHP依赖关系


yum install -y libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel


第四步::解压软件程序


tar -zxvf php-7.1.0.tar.gz


第五步:编译安装

1、将解压后的目录移动到指定目录并创建软链接


mv php-7.1.0 /app
cd /app
ln -s php-7.1.0/ php


2、进入php目录并进行编译


cd php
./configure --prefix=/application/php-7.1 --enable-fpm --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-soap --with-libxml-dir --with-xmlrpc --with-openssl --with-mcrypt --with-mhash --with-pcre-regex --with-sqlite3 --with-zlib --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-native-ttf --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --with-libmbfl --with-onig --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir --with-xsl --enable-zip --enable-mysqlnd-compression-support --with-pear --enable-opcache


3、安装


make && make install


第六步:调整或创建配置文件


cd /application/php-7.1/    #进入到程序目录
cp etc/php-fpm.conf.default etc/php-fpm.conf
cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
cd /app/php    #进入到源码包目录
cp php.ini-production /application/php-7.1/lib/php.ini


第七步:启动php服务程序


/application/php/sbin/php-fpm


第八步:测试PHP是否启动成功

编写网站配置文件

vim /etc/nginx/conf.d/www.conf


server {
    listen        80;
    server_name   www.oldboy.com;
    root         /html/www;
    index        index.html index.php; 
location ~ .php$ {
    root /html/www;
    fastcgi_index index.php;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
 }
}


编写测试页面站点文件

/html/www/test_php.php


<?php
phpinfo();
?>


页面访问测试文件

www.oldboy.com/test_php.php

第九步:查看PHP安装时编译了哪些参数


/application/php/bin/php -i|grep configure


九、PHP优化

(一)、PHP缓存加速器优化

作用

缓存加速器主要用于提升动态解析效率

实现方式

部署前准备

配置环境变量


echo 'export LC_ALL=C'>> /etc/profile
source /etc/profile


安装Perl相关软件依赖


yum -y install perl-devel


方式一:利用eAccelerator

1、eAccelerator介绍

安装及配置参数更简单,加速效果也不错。

文档资料较多,但官方对软件的更新很慢,社区不活跃。

仅适合PHP版本5.4以下的程序

2、eAccelerator安装

进入源码包目录


cd /server/tools


获取源码包


wget  https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2


解压源码包


tar xf  eaccelerator-0.9.6.1.tar.bz2


编译安装


cd eaccelerator-0.9.6.1
/application/php-7.1/bin/phpize    #可以让缓存加速软件源码包中生成配置命令文件信息
./configure --enable-eaccelerator --with-php-config=/application/php-7.1/bin/php-config
make && make install


方式二:利用xcache

1、xcache介绍

经过测试,XCache效率更高、速度更快。

XCache软件开发社区更活跃,最新版2014年底发布。

支持更高版本的PHP,例如PHP 5.5、PHP 5.6。

2、xcache安装

进入源码包目录


cd /server/tools


获取源码包


wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2


解压源码包


tar xf xcache-3.2.0.tar.bz2


编译安装包


cd xcache-3.2.0
/application/php-7.1/bin/phpize    #可以让缓存加速软件源码包中生成配置命令文件信息
./configure --enable-xcache --with-php-config=/application/php/bin/php-config
make && make install


方式三:利用zend opcache

1、 zend opcache介绍

默认已经集成在php程序中, 不用单独安装加速软件

2、 zend opcache安装

进入源码包目录


cd /server/tools


获取源码包


wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgz


解压源码包


tar xf zendopcache-7.0.5.tgz


编译安装


cd zendopcache-7.0.5
/application/php-7.1/bin/phpize    #可以让缓存加速软件源码包中生成配置命令文件信息
./configure --enable-opcache --with-php-config=/application/php/bin/php-config
make && make install


(二)、PHP缓存功能优化

1、memcache缓存插件

PHP缓存优化原理


numma架构 lnmt架构_numma架构_03


mencache插件安装部署

第一步:获取插件源码包


wget https://github.com/websupport-sk/pecl-memcache/archive/NON_BLOCKING_IO_php7.zip


第二步:解压源码包到指定目录


cd /server/tools 
unzip NON_BLOCKING_IO_php7.zip


第三步:编译安装memcache


cd pecl-memcache-NON_BLOCKING_IO_php7/
/application/php-7.1/bin/phpize 
./configure --enable-memcache --with-php-config=/application/php-7.1/bin/php-config
make && make install


memcache插件应用配置

第一步:修改配置文件

PS:添加到最后

vim /application/php-7.1/lib/php.ini


extension = "/application/php-7.1/lib/php/extensions/no-debug-non-zts-20160303/memcache.so"


第二步:重启php-fpm