学习b记 · 第二阶段
六、LNMP架构
LNMP是一套技术的组合,L=Linux、N=Nginx、M~=MySQL、P~=PHP
1、LNMP架构是如何工作的
首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。
当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过fastcgi协议转交给后端的PHP程序处理
上图解析↑
1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx
2.Nginx会根据用户的请求进行判断,这个判断是有Location进行完成
3.判断用户请求的是静态页面,Nginx直接进行处理
4.判断用户请求的是动态页面,Nginx会将该请求交给fastcgi协议下发
5.fastgi会将请求交给php-fpm管理进程, php-fpm管理进程接收到后会调用具体的工作进程warrap
6.warrap进程会调用php程序进行解析,如果只是解析代码php直接返回
7.如果有查询数据库操作,则由php连接数据库(用户 密码 IP)发起查询的操作
8.最终数据由*mysql->php->php-fpm->fastcgi->nginx->http->user
图上面的是外网,每个设备还有内网的,但是在这结构体现出来没什么用,下一章负载均衡再说,但配置还是走的内网,我先写出来吧。
web01:172.16.1.202
web02:172.16.1.204
mariadb:172.16.1.208
nfs:172.16.1.203
#都是我自己设的 ip所以有点乱
①LNMP架构环境配置
上面这个图是最后结果的架构图,配置多台web服务器能提升更高的访问速度
1、使用官网仓库安装nginx
#网址
https://nginx.org/en/linux_packages.html#RHEL
#创建nginx.repo,把下面的粘贴进去
[root@web01 /]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
#安装
yum -y install nginx
2、统一用户权限
#创建组和用户
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M
#修改配置文件
sed -i '/^user/c user www;' /etc/nginx/nginx.conf
#启动就可以了
systemctl start nginx
systemctl enable nginx
3、使用第三方扩展源安装php7.1
#准备tar包直接拉到xshell
#链接:https://pan.baidu.com/s/1BB1YbWXNadP6JJbnpJrXNw?pwd=kxxw
#提取码:kxxw
#直接解压安装
yum -y localinstall *
4、修改文件指定运行用户
sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
#运行就行了
systemctl start php-fpm
5、安装Mariadb数据库
#这个直接yum安装就行不需要仓库
yum install mariadb-server -y
#安装完直接启动
systemctl start mariadb
6、给Mariadb配置登陆密码
mysqladmin password '123456'
#登录测试一下
mysql -uroot -p123456
7、nginx集成php进行使用
#Fastcgi代理配置讲解就不写了直接上配置,想了解原理网上有的是
#先把/etc/nginx/conf.d/default.conf删除,重新建一个文件
rm -rf /etc/nginx/conf.d/default.conf
vim /etc/nginx/conf.d/php.conf
#把配置添加进去
server {
listen 80;
server_name php.qxl.com;
location / {
root /tools;
index index.php index.html;
}
location ~ \.php$ {
root /code;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
8、创建目录和php文件
vim /tools/index.php
#添加以下代码
<?php
phpinfo();
?>
9、把服务都重启运行测试
#重启
systemctl restart php-fpm nginx
#测试
浏览器直接输入ip或者做host解析输入网址php.qxl.com都可以
访问出现php版本信息就可以了
10、测试php连接数据库
vim /tools/mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php可以连接MySQL...";
?>
#测试直接在浏览器ip或者域名后面加/mysql.php就可以
显示php可以连接MySQL...就成功
#做下面的安装服务,把刚才创建的 /etc/nginx/conf.d/这下面的东西都删了,重新写一个文件
②部署phpshe、phpMyAdmin产品
1、产品包下载
#还是网盘分享
链接:https://pan.baidu.com/s/1MIT6lP1gYSMjJSKF0-DZ1Q?pwd=kxxw
提取码:kxxw
#放到/tools目录下解压
直接把包拉到/tools
#解压
unzip phpshe1.8.zip -d phpshenn#目录没有就建 mkdir phpshe 要是解压出来就有文件夹就直接解压
tar xf phpMyAdmin-4.9.11-all-languages.tar.gz
2、添加配置文件
server {
listen 80;
server_name phpshe.qxl.com;
location / {
root /tools/phpshe;
index index.php index.html;
}
location ~ \.php$ {
root /tools/phpshe;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include parames;
}
}
server {
listen 80;
server_name phpmyadmin.qxl.com;
location / {
root /tools/phpmyadmin;
index index.php index.html;
}
location ~ \.php$ {
root /tools/phpmyadmin;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include parames;
}
}
#还有一个模块优化
vim /etc/nginx/params
#把这些粘贴进去
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
3、权限
#都解压出来之后的目录结构就是这样的
/tools/phpmyadmin
/tools/phpshe
#不是这样的也可以 改配置文件或者修改目录都行 只要路径能对上就行
#目录都给www权限,要不在运行的时候写入文件会报错
chown -R www.www /tools
4、创建数据库
mysql -uroot -p123456
create database phpshe;
5、测试
#直接windows测试就行,记得添加hosts解析
访问域名出现安装页面就对了 phpmyadmin.qxl.com phpshe.qxl.com 这个 就是域名
#测试的时候phpmyadmin会报一个权限错误有问题
给一个权限就行了
chown -R www.www #加目录
③拆分数据库至独立服务器
1、把web01的数据库导出一份
mysqldump -uroot -p'123456' -A > mysql-all.sql
2、发送到mariadb服务器
scp mysql-all.sql root@172.16.1.208:/tools#放哪都行
3、你前面的mariadb的安装好在导入
mysql -uroot -p'123456' < /tools/mysql-all.sql
4、授权
#先重启一下
systemctl restart mariadb
#登录看一下
mysql -uroot -p123456
#授权从外部访问不用root用户,#将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) 'all'@'%'
grant all on *.* to qxl@'%' identified by '123456';
flush privileges;flush privileges;
5、把web01上的服务重新制定一下数据库连接
vim /etc/tools/phpshe/config.php
#phpshe服务改成这样
<?php
$pe['db_host'] = '172.16.1.208'; //数据库主机地址#这里
$pe['db_name'] = 'phpshe'; //数据库名称
$pe['db_user'] = 'qxl'; //数据库用户名#这里
$pe['db_pw'] = '123456'; //数据库密码
$pe['db_coding'] = 'utf8';
$pe['url_model'] = 'pathinfo_safe'; //url模式,可选项(pathinfo/pathinfo_safe/php)
$pe['h5_host'] = ''; //手机版网址
define('dbpre','pe_'); //数据库表前缀
?>
#phpmyadmin也得改 这个改一下连接主机就可以
vim /tools/phpmyadmin/libraries/config.default.php
131 $cfg['Servers'][$i]['host'] = '172.16.1.208';
6、把web01上的mariadb服务关掉 重新刷新页面测试
systemctl stop mariadb
④扩展多台相同的Web服务器
·为什么要扩展多台web节点
单台web服务器能抗住的访问量是有限的,配置多台web服务器能提升更高的访问速度。
1、创建用户www和上面的一样,复制就完了
2、安装php和nginx也是和上面的步骤一样
3、把配置文件复制过来一份
#phpshe phpmyadmin
scp -r /tools 172.16.1.204:/tools
#同步一下nginx
rsync -avz --delete /etc/nginx root@172.16.1.204:/etc/nginx
4、启动一下服务测试
systemctl start nginx php-fpm
#直接浏览器输入web02的ip就行 phpmyadmin那里还会报错 还是给目录www权限就行
⑤拆分资源至独立服务器NFS
·为什么拆分静态资源至独立存储服务器
当后端的web节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台web服务器,那么其他的web服务器则无法访问到该图片。
1、安装并配置nfs
#这个前面的文章也有写
yum install nfs-utils -y
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
2、权限
#/data 目录给一下666用户的权限
chown -R www.www /data
3、直接挂载web01和web02的/tools
#挂载之前先把tools里面的服务移出来 要是直接挂载会覆盖原来目录里面的文件 挂在完目录在移动回去
mv /tools/ /
mount -t nfs 172.16.1.203:/data /tools
mv /phpshe /tools
mv /phpmyadmin /tools
#两个web都这么操作就行
4、还是浏览器测试,网页出来了就ok