动静分离
概念:
LNMP架构介绍
LNMP:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
原理:浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx.服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
动静分离,通过中间件将动态请求和静态请求进行分离,分离资源,减少不必要的请求消耗,减少请求延时。
好处:动静分离后,即使动态服务不可用,但静态资源不会受到影响
通过中间件可以将动态请求和静态请求进行分离
实验:
动静分离lnmp
#已经安装nginx
#安装mariadb
yum -y install mariadb*
#php安装编译
yum -y install gd libxml2-devel libjpeg-devel libpng-devel libXpm-devel
tar -zxf php-5.5.38.tar.gz
cd php-5.5.38/
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --with-gd --with-zlib --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-mysql=mysqlnd --with-mysqli=mysqlnd --enable-fpm --enable-mbstring && make && make install #httpd影响编译,检查htppd安装,--enable-fpm 开启php-fpm程序
#配置php解析器的配置文件
cp /root/php-5.5.38/php.ini-development /usr/local/php/php.ini #解压包的配置文件复制到安装目录
vim /usr/local/php/php.ini
202 short_open_tag = On #开启php-fpm程序
680 default_charset = "UTF-8" #中文编码
#php-fpm启动脚本
cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm #复制php-fpm启动脚本
chmod +x /etc/rc.d/init.d/php-fpm #为启动脚本加权限
chkconfig --add php-fpm #检查启动脚本
#php-fpm程序的配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
vim php-fpm.conf
25 pid = run/php-fpm.pid #开启pid设置
164 listen = 192.168.5.4:9000 #php的监听端口
/etc/rc.d/init.d/php-fpm start #启动php-fpm
netstat -anput |grep 9000
tcp 0 0 192.168.2.10:9000 0.0.0.0:* LISTEN
#验证访问静态页面
echo "nginx1" > /usr/local/nginx/html/index.html
curl 192.168.5.4
nginx1
#验证访问动态页面,不调用后端的数据库,nginx--php
vim /usr/local/nginx/conf/nginx.conf
location ~\.php$ { #写个location把所有以php结尾的请求匹配到这个location,转发到PHP处理
root html;
fastcgi_pass 192.168.5.4:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
#配置要访问的PHP页面(php配置页面)
vim /usr/local/nginx/html/index.php
<?
phpinfo();
?>
#访问
firefox 192.168.5.4/index.php
#验证访问动态页面,需要调用数据库,nginx+php+mysql
#mariadb授权准备
systemctl start mariadb
mysql -uroot -p #初始登录不需要密码
MariaDB [(none)]> SET password=PASSWORD('admini'); #设定密码
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on *.* to 'root'@'192.168.5.%' identified by "admini";
Query OK, 0 rows affected (0.00 sec)
#允许域名使用的授权
#MariaDB [(none)]> grant all on *.* to 'root'@'www.qqq.com' identified by "admini";
#Query OK, 0 rows affected (0.00 sec)
#刷新授权
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#修改php页面文件,使其调用数据库
vim /usr/local/nginx/html/index.php
<?
$conn=mysqli_connect('192.168.5.4','root','123.com'); #使用这个账号密码和数据库IP地址连接数据库
if($conn) {
echo "mysql connect success"; #成功则打印此项
}
else {
echo "mysql connect failed"; #不成功则打印此项
}
?>
firefox 192.168.5.4/index.php
mysql connect success
#部署discuz开发写好的页面包
论坛部署在lnmp当中
[root@localhost ~]# unzip Discuz_7.2_FULL_SC_UTF8.zip
[root@localhost ~]# cp -r upload/* /usr/local/nginx/html/
cp:是否覆盖"/usr/local/nginx/html/index.php"? y
[root@localhost ~]# chmod -R 777 /usr/local/nginx/html/
[root@localhost ~]# firefox 192.168.2.10/install/index.php
192.168.2.10/index.php
/usr/local/nginx/html/
[root@localhost ~]# firefox 192.168.2.10/install/index.php
192.168.2.10/index.php