day51 LNMP黄金架构---基本概念的梳理
day51 LNMP黄金架构---基本概念的梳理
之前我们学习Apache了解过LAMP(Linux , apache,MySQL per|php| python )
由于上述的架构对性能的追求,nignx的版本的发布,卓越的性能,更加简单的配置,更加强大的功能,LAMP逐渐被LNMP所取代。
对于黄金架构lnmp
1.如果单单的部署一个静态的网站,仅仅使用nginx的知识点即可,那是部署一个静态的页面。
2.为了理解nginx和后端的协同的工作,完成动态网站的部署,网站支持数据库等动态的功能,nginx+ 编程的语言, 如 nginx+ 编程的语言 + 数据库(反向的代理)
3. 动态网站的部署,才是一个完整的网站的功能(对于不同的后端的语言,要基于不同的协议,nginx的设置去链接。)
今天的主要的语言是php
目前主流的开发语言 如php ,python java
学会这3个,市面上的网站的部署差不多都应该会拉。

1.今天是单机的部署,以后是集群的部署机器
nignx -> php -> mysql ->nignx
lnmp架构就是永恒不变的,最好用的架构
1.对于脚本型语言,php,pyton,2个月后端就写完了。脚本语言开发的效率很高,用时间去换效率
2.对于选择java golang ,4个月才能把后端全部写完,开发的效率低但是,运行的效率高,cpu的使用率高。
LNMP的部署的流程
lnmp 的协同工作,与动静态处理的流程图

nginx和php协同工作的原理
1. 浏览器 发出静态图片的请求, 和login动态的请求。
2,用户接入层(nginx) http的请求转发给后端, 静态的请求转发给nfs服务器
3. fastcgi 协议 用于nginx和php之间的通信
4. php服务器(进程的配置的文件)php-fpm.conf 以fastcgi高速的接口的协议运行性能很高。

换一种方式说----生活方式去理解
1. nginx 货拉拉的司机
2. Fastcgi 高速公路
3. php-fpm 收费站
4. wrapper 卸货师傅
5. systemctl start php-fpm (整个高速公路开始工作)
1.用户发出登录的请求。
2.用户层的接入(货拉拉的司机)nginx不认识转发给后端(携带数据)
3.fastcgi协议(高速公路)
4.php-fpm(收费站) ----> wrapper(卸货的师傅)
这里的php-fpm进场开始干活,处理解析的请求,基于fastcgi协议运行进程(php-fpm)--->相当于包工头
↓
找工人干活,在干活的底层的驱动,wrpper(卸货的师傅)是看不到的。
代码执行完毕后,产生处理的结果的数据基于php-fpm进程返回给用户

1. 用户发起http请求,请求到达LNMP中的nginx
2.nginx根据用户请求的url进行判断,通过location进行匹配
3.location判断出url是静态请求,nginx直接查找静态资源,返回响应。
4.location判断出是动态的请求,nginx的反向的代理,转发给后端(这个架构是fastcgi的php)程序
fastcgi(也就是连接nignx和php之间的高速公路)nginx处理不了php语言
5.nginx通过fascgi模块把请求转发给php-fpm(高速路口收费站)进程,php-fpm进行后续的处理
(php-fpm进程调用wrapper进程)
6.如果请求的是xxx.php文件,那么php解释器就直接阅读程序,完成php的脚本
7. 如果需要调用的是数据库,php就直接通过代码直接和数据库进行连接,发起sql语句的操作。
8.最终数据库返回的流程
mysal
↓
php
↓
php-fpm
↓
fastcgi
↓
nginx
↓
http
↓
浏览器

fastcgi 是什么
nginx和php语言之间的桥梁
fastcgi 是一个可伸缩,高速的在HTTP服务器和动态的脚本之间通信的接口,
在Linux的环境下,fastcgi接口也就是socket,这个socket可以是文件,也可以是ip,socket.
也就意味着本地通信,远程通信两种,主要优点是把动态的语言(用sock进程运行)和http服务器(nginx)分离
- 多数主流的web服务器都可以接收,识别这个协议如apache,nginx
- 同时很多的脚本也可以实现该协议如php
- fastcgi接口以c/s架构运行
1. nginx接收到请求,fastcgi_pass转发给fastcgi进程
2. fastcgi 进行解析请求,处理php代码的逻辑
3. 处理的结果通过socket,或者ip:port 返回给nginx
4. nginx 构造http response 给浏览器

对于协议这个东西,只能依靠自己看看关于http相关的书籍
纯纯的理论知识,补充自己的知识量
重要的事情说三遍
如何配置,是最重要的,先会用,会用之后,以后有时间看看相关的书籍。
在生产环境下能遇见的
#反向代理篇在去说#
1. 关于http协议的通信,基于proxy_pass转发,如两个nignx之间的请求的转发
2.关于php,fastcgi 协议的通信,基于fastcgi_pass转发,如nginx和php之间的转发。
(1.安装php,修改配置文件,支持fastcgi的协议)
3.关于python,uwsgi协议的通信,基于swsgi_pass的转发,如nginx和python的转发
nginx 发出的http的请求
↓
通信的桥梁,要支持高并发协议的桥梁,大神开发出来高性能的在http和python
之间一个通信转换接口叫做,(uswgi协议)
参考如下文档,获取更多关于nginx和php的知识
https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html


浙公网安备 33010602011771号