LNMP 演变

工作原理

  • linux + nginx + mariadb + php
  • 工作原理:
首先,浏览器发送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的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

安装

1.安装 环境

安装nginx

[root@web01 ~]# yum install nginx -y

安装php

[root@web01 ~]# yum install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-mcrypt php71w-pecl-memcached php71w-pecl-mongodb php71w-pecl-redis php71w-pecl-zip php71w-bcmath

安装mariadb

[root@web01 ~]# yum install mariadb-server mariadb  -y

2.Nginx与PHP集成的原理。

[root@web01 ~]# cat /etc/nginx/conf.d/php.oldxu.com.conf
server {
listen 80;
server_name php.oldxu.com;
root /code; location / {
index index.php info.php;
} location ~ \.php$ {
#将php请求交给本地9000端口处理,9000是php-fpm的默认端口
fastcgi_pass 127.0.0.1:9000; #告诉php-fpm解析本地的哪个路径下的哪个文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #包含一些其他的相关信息的变量
include fastcgi_params;
}
}

2.重启服务 nginx php-fpm 临时的 永久的

3.准备文件

4.hosts劫持

5.域名访问

PHP与MySQL集成的原理。

1.启动mariadb

[root@web01 ~]# systemctl start mariadb

[root@web01 ~]# systemctl enable mariadb

	2.配置mariadb密码
[root@web01 ~]# mysqladmin password 'oldxu.com'
[root@web01 ~]# mysql -uroot -poldxu.com
MariaDB [(none)]> quit 3.准备一个php连接mysql的脚本文件
[root@web01 ~]# cat /code/tt.php
<?php
$servername = "localhost";
$username = "root";
$password = "oldxu.com"; // 创建连接
$conn = mysqli_connect($servername, $username, $password); // 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php连接MySQL数据库成功";
?> 4.执行php命令测试是否能正常连接mysql
[root@web01 ~]# php /code/tt.php
php连接MySQL数据库成功 5.通过浏览器访问测试 整个 lnmp
http://php.oldxu.com/tt.php

1. 数据库的拆分

准备一台172.16.1.51数据库, 安装mariadb-server

[root@db01 ~]# yum install mariadb-server -y

[root@db01 ~]# systemctl start mariadb

[root@db01 ~]# systemctl enable mariadb.service

[root@db01 ~]# netstat -lntp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 8296/mysqld

2.备份172.16.1.7 数据库 -->推送至 172.16.1.51

[root@web01 ~]# mysqldump -uroot -p'oldxu.com' --all-databases > mysql-all.sql

3.172.16.1.51 恢复数据库, 创建远程连接的用户

1.推送

[root@web01 ~]# scp mysql-all.sql root@172.16.1.51:~

2.登录51服务器恢复数据
[root@db01 ~]# mysql -uroot < mysql-all.sql
[root@db01 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress |
| zh |
+--------------------+
6 rows in set (0.00 sec) 3.重启一下数据库
[root@db01 ~]# systemctl restart mariadb
[root@db01 ~]# mysql -uroot -poldxu.com #重启后密码会变更 4.创建远程连接用户
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'oldxu.com'; 5.远程连接测试 登录172.16.1.7
[root@web01 ~]# mysql -h172.16.1.51 -uall -poldxu.com
Welcome to the MariaDB monitor. Commands end with ; or \g. MariaDB [(none)]>

4.应用割接 wordpress--->连接本地数据库 修改为 连接 远程数据库

1.停止本地数据库
[root@web01 ~]# systemctl stop mariadb
[root@web01 ~]# systemctl disable mariadb 2.修改wordpress连接数据库的信息
[root@web01 wordpress]# vim /code/wordpress/wp-config.php
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpress' ); /** MySQL数据库用户名 */
define( 'DB_USER', 'all' ); /** MySQL数据库密码 */
define( 'DB_PASSWORD', 'oldxu.com' ); /** MySQL主机 */
define( 'DB_HOST', '172.16.1.51' ); 3.修改wecenter连接数据库的信息
[root@web01 ~]# find ./ -type f | xargs grep -Ri "oldxu.com"
[root@web01 ~]# cat /code/zh/system/config/database.php
<?php $config['charset'] = 'utf8mb4';
$config['prefix'] = 'aws_';
$config['driver'] = 'MySQLi';
$config['master'] = array (
'charset' => 'utf8mb4',
'host' => '172.16.1.51',
'username' => 'all',
'password' => 'oldxu.com',
'dbname' => 'zh',
);
$config['slave'] = false;

2.扩展应用节点 ( 多个web组织在一起--->web集群)

主机名称 应用环境 外网地址 内网地址

web01 nginx+php 10.0.0.7 172.16.1.7

web02 nginx+php 10.0.0.8 172.16.1.8

db01 mysql 172.16.1.51

1.对web02进行初始化操作
[root@web02 ~]# groupadd -g666 www
[root@web02 ~]# useradd -u666 -g666 www
[root@web02 ~]# scp 172.16.1.7:/etc/yum.repos.d/* /etc/yum.repos.d/ 2.在要扩展的节点上安装对应的环境: nginx+php
[root@web02 ~]# yum install nginx -y [root@web02 ~]# rpm -e $(rpm -qa |grep php)
[root@web02 ~]# yum install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-mcrypt php71w-pecl-memcached php71w-pecl-mongodb php71w-pecl-redis php71w-pecl-zip php71w-bcmath -y 3.将web01上的Nginx php-fpm php.ini配置 以及 代码 拷贝至web02 1.nginx.conf nginx virtualHost
[root@web02 ~]# rsync -avz --delete 172.16.1.7:/etc/nginx/ /etc/nginx/ 2.php-fpm.d/www.conf php.ini
[root@web02 ~]# rsync -avz 172.16.1.7:/etc/php.ini /etc/php.ini
[root@web02 ~]# rsync -avz 172.16.1.7:/etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf 3.代码目录 /code
[root@web02 ~]# rsync -avz --delete 172.16.1.7:/code /
[root@web02 ~]# ll /code/
drwxr-xr-x 5 www www 4096 12月 6 12:41 wordpress
drwxr-xr-x 15 www www 4096 12月 6 11:44 zh 4.重新加载 nginx php-fpm 服务 1.检查nginx与php的语法是否存在错误
[root@web02 ~]# nginx -t
[root@web02 ~]# php-fpm -t 2.重新加载nginx php-fpm程序
[root@web02 ~]# systemctl restart nginx php-fpm 3.将nginx php-fpm 加入开机自启动
[root@web02 ~]# systemctl enable nginx php-fpm 5.进行测试 tail -f

多个应用节点会带来新的问题:
1.静态资源不一致?
2.多个节点无法同时工作?
0.手动DNS切换
1.DNS轮询 (所有的web节点都需要有公网IP)
不安全
成本高
没有监控检查
2.nginx代理->负载均衡

3.准备一个NFS共享目录?

#初始化环境
[root@nfs01 ~]# groupadd -g666 www
[root@nfs01 ~]# useradd -u666 -g666 www #安装-配置-启动-nfs
[root@nfs01 ~]# yum install nfs-utils -y
[root@nfs01 ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) [root@nfs01 ~]# rm -rf /data
[root@nfs01 ~]# mkdir /data/blog /data/zh -p #重启nfs服务
[root@nfs01 ~]# systemctl restart nfs

2.找到web存储静态资源的位置?

#查找图片存储的路径-->浏览器 -->F12 --> Select -->选择图片
http://blog.oldxu.com/wp-content/uploads/2019/12/ks.jpeg
/code/wordpress/wp-content/uploads/2019/12/ks.jpeg

3.将所有节点的图片,都选拷贝至 nfs存储中?

#在有图片的web节点上
[root@web02 ~]# scp -rp /code/wordpress/wp-content/uploads/* 172.16.1.31:/data/blog/ #回到nfs存储上 重新授权
[root@nfs01 ~]# chown -R www.www /data/blog/

4.所有的web节点执行挂载的操作?

--------------------------------------------------------
# wordpress
[root@web02 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/ #切换到web01 测试后 在进行挂载测试
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/

LNMP架构的演变的更多相关文章

  1. 网站Web业务架构从小到大演变

    有一天,我突发奇想创建了一个站点,基于 LNMP 架构,起初只有我自己访问,后来因为我点儿正,访问量越来越大,所以最终导致下面的架构演变. 1.单台机器 单台机器因为只是一个小站,访问量一天也没有多少 ...

  2. 第20章 使用LNMP架构部署动态网站环境

    章节概述: 本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别.并能够理解它们的优缺点. Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳 ...

  3. lnmp架构下php安全配置分享

    目录[-] 1. 使用open_basedir限制虚拟主机跨目录访问 2. 禁用不安全PHP函数 3. 关注软件安全资讯 4. php用户只读 5. 关闭php错误日志 6. php上传分离 7. 关 ...

  4. 自己动手写处理器之第一阶段(2)——MIPS指令集架构的演变

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第三篇.我尽量每周四篇 MIPS指令集架构自上世纪80年代出现后.一直在进行着更新换代,从最初的MIPS I到MIPS V,发 ...

  5. lnmp架构(第一篇)

    lnmp 架构 第一篇 nginx 源码安装 nginx的安装包:nginx-1.12.0.tar.gz 建议安装前的修改: 在nginx的解压包中修改文件nginx-1.12.0/src/core/ ...

  6. LNMP架构部署

    第1章 部署LNMP架构步骤 1.1 ①部署Linux系统(OK) 基本优化完成(ip地址设置 yum源更新 字符集设置) 安全优化完成(iptables关闭 selinux关闭 /tmp/ 1777 ...

  7. 企业级LNMP架构搭建实例(基于Centos6.x)

    1.1 部署LNMP架构说明 1.1.1 LNMP架构内容 01.部署linux系统 02.部署nginx网站服务 03.部署mysql数据库服务 04.部署php动态解析服务 1.1.2 配置LNM ...

  8. LAMP与LNMP架构的区别及其具体的选择说明

    LAMP==Linux+Apache+Mysql+PHP LNMP==Linux+Nginx+Mysql+PHP 以上两只架构是目前网站的主流架构 LAMP和LNMP最主要的区别在于: 一个使用的是A ...

  9. nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken

    nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...

  10. linux的LNMP架构介绍、MySQL安装、PHP安装

    LNMP架构介绍 和LAMP唯一不同的是,LNMP中的N指的是Nginx(类似于Apache的一种web服务软件).目前这种环境的应用也非常多.Nginx设计的初衷是提供一种快速.高效.多并发的Web ...

随机推荐

  1. windows sshd powershell 配置

    安装sshd打开"设置",选择"应用">"应用和功能",然后选择"可选功能" .扫描列表,查看是否已安装 Open ...

  2. 前后端分离--token过期策略方案1

    https://blog.csdn.net/weixin_38827340/article/details/86287496?utm_medium=distribute.pc_aggpage_sear ...

  3. studiostyl.es网站scheme文件无法下载

    原因网站引用Google的服务 解决方法:查看网页源码.选择选取页面中的元素,选择download按钮,如下图所示 downloadExisting后面的数字代表主题的ID. 在网站中输入https: ...

  4. PyMySQL插入

    title: PyMySQL插入 author: 杨晓东 permalink: PyMySQL插入 date: 2021-10-02 11:27:04 categories: - 投篮 tags: - ...

  5. Java语言程序设计课后小结

    运行结果:Size s = Size.SMALL;此时,s = SMALL.Size t = Size.LARGE:此时t = LARGE. System.out.println(s==t).由于s和 ...

  6. ios自动化测试学习

    原文:https://blog.csdn.net/jinjiangongzuoshi/article/details/126552806 内测发布工具 fir.im 为开发者提供测试应用极速发布,应用 ...

  7. elmentui 表单验证问题

    <template> <div class="container"> <el-form ref="ruleForm" :model ...

  8. Python学习笔记之7.5 - 定义有默认参数的函数》》》直接在函数定义中给参数指定一个默认值,默认参数的值应该是不可变的对象

    问题: 你想定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值. 解决方案: 定义一个有可选参数的函数是非常简单的,直接在函数定义中给参数指定一个默认值,并放到参数列表最后就行了.例如: ...

  9. How to Check and Repair EXT4 Filesystem in Linux

    The fsck (stands for File System Consistency Check) is used to check and repair one or more Linux fi ...

  10. python爬虫代码中_获取状态码

    '两种方式' import urllib status=urllib.urlopen("//www.jb51.net").code print status import requ ...