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)分离

  1. 多数主流的web服务器都可以接收,识别这个协议如apache,nginx
  2. 同时很多的脚本也可以实现该协议如php
  3. 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

posted @ 2025-04-21 22:05  国家一级冲浪yzk  阅读(17)  评论(0)    收藏  举报