LNMP架构(1)LNMP架构介绍及源码安装PHP

本文介绍了LNMP架构,详细阐述了用户请求流程,讲解了Fast-CGI和PHP-FPM的概念。此外,还提供了源码编译安装MySQL、PHP和Nginx的步骤,包括环境配置、依赖解决、权限设置和启动服务等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 什么是lnmp

说明:以前叫做lamp,因为那时候用的apache而现在用的是nginx。 lump=Linux Nginx Mysql Php
LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写
L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统
代表版本有:debian、centos、ubuntu、fedora、gentoo等
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器(不做动态)
Mysql是一个小型关系型数据库管理系统 PHP是一种在服务器端执行的嵌入HTML文档的脚本语言
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统

2 用户请求流程

1.用户通过 http 协议发起请求,请求会先抵达 LNMP 架构中的 Nginx
2.Nginx 会根据用户的请求进行判断,这个判断是有 Location 进行完成
3.判断用户请求的是静态页面, Nginx 直接进行处理
4.判断用户请求的是动态页面, Nginx 会将该请求交给 fastcgi 协议下发
5.fastgi 会将请求交给 php-fpm 管理进程, php-fpm 管理进程接收到后会调用具体的工作进程 wrapper
6.wrapper 进程会调用 php 程序进行解析,如果只是解析代码 php 直接返回
7.如果有查询数据库操作,则由 php 连接数据库(用户 密码 IP)发起查询的操作
8.最终数据由 mysql->php->php-fpm->fastcgi->nginx->http->user

3 Fast-CGI 介绍

CGI全称是“公共网关接口”(Common Gateway Interface)
HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上
cgi是通用网关接口,是外部应用程序与Web服务器之间的接口标准
cgi是为了保证web server传递过来的数据是标准格式的,方便cgi程序的编写者
Fast-CGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能
众所周知,CGI解释器的反复加载是CGI性能低下的主要原因
如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等
Fast-cgi像是一个常驻(long-live)型的cgi,是用来提高cgi程序性能的

fast-CGI是nginx和php之间的一个通信接口,该接口实际处理过程通过启动php-fpm进程来解析php脚本
即php-fpm相当于一个动态应用服务器,从而实现nginx动态解析php

因此,如果nginx服务器需要支持php解析,需要在nginx.conf中增加php的配置
将php脚本转发到fastCGI进程监听的IP地址和端口(php-fpm.conf中指定)
同时,php安装的时候,需要开启支持fastCGI选项,并且编译安装php-fpm补丁/扩展
同时,需要启动php-fpm进程,才可以解析nginx通过fastCGI转发过来的php脚本
php-cgi 是解释PHP脚本的程序,只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理

4 什么是PHP-FPM

PHP-FPM是一个实现了Fastcgi的程序,PHP-FPM的管理对象是php-cgi
后来PHP内核集成了PHP-FPM之后就方便多了,使用enalbe-fpm这个编译参数即可

php-fpm是一个完全独立的程序,不依赖php-cgi,也不依赖php。因为php-fpm是一个内置了php解释器的FastCGI服务,启动时能够自行读取php.ini配置和php-fpm.conf配置.

5 Nginx+FastCGI运行原理

nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用
FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)
wrapper: 为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+FastCGI的整个运作过程。
所以,我们首先需要一个wrapper,这个wrapper需要完成的工作
1、调用fastcgi(库)的函数通过socket和ningx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的)
2、调度thread,进行fork和kill
3、和application(php)进行通信

在这里插入图片描述

6.1 源码编译安装mysql的详细说明

(1)解压并进入目录

在这里插入图片描述

(2)安装cmake

[root@server1 mysql-5.7.30]# yum install -y cmake
[root@server1 mysql-5.7.30]# yum install gcc -y

(3)创建用户用来启动mysql

[root@server1 mysql-5.7.30]# useradd -s /sbin/nologin -M mysql

(4)若编译失败先删掉刚刚检测生成的缓存文件再进行编译

出现问题解决问题一次又一次的编译,即如下:
在这里插入图片描述
在这里插入图片描述

(5)安装

# make && make install

(6)配置mysql

进入lnmp目录,可以看到生成了mysql目录
建立data目录(因为编译是指定套接字在data目录下)和mysql用户
在这里插入图片描述
将data主目录的权限变为mysql,只有这样才可以生成它的数据目录
在这里插入图片描述

   ln -s /usr/local/lnmp/mysql/bin/* /usr/local/bin/ #bin目录下的都是mysql的执行命令,为了方便做个软连接
   cd include/
   cp default_my.cnf /etc/my.cnf #备份配置文件

复制启动脚本,添加可执行权限:
在这里插入图片描述

开机启动
在这里插入图片描述

初始化数据库生成基本的信息:
注以mysql身份初始化
在这里插入图片描述

在这里插入图片描述

利用初始密码登录数据库
发现只有改了密码之后才可以查看数据库
在这里插入图片描述
在这里插入图片描述

只有最后刷新授权表时用yes,其他都填no。
在这里插入图片描述

6.2源码编译安装php的详细说明(硬盘必须得是20G及以上)

(1)解压编译

软件下载:https://www.php.net/
软件编译:
# tar jxf php-7.4.6.tar.bz2
# cd php-7.4.6
# ./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx  --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring  --enable-bcmath --with-fpm-systemd

(2)解决依赖性

根据提示逐一解决依赖性,若系统有的依赖包不存在,可通过阿里云下载。

yum install sqlite-devel.x86_64 -y
yum install -y libxml2-devel
yum install -y libpng-devel

(3)安装

make && make install

(4)复制fastcgi的进程管理文件——php-fpm模板

[root@server etc]# pwd
/usr/local/lnmp/php/etc
[root@server etc]# cp php-fpm.conf.default php-fpm.conf  ##复制php-fpm模板

查看配置文件中以下几项是否开启:

[root@server1 etc]# vim php-fpm.conf  编辑fastcgi的进程管理文件
 
 17 pid = run/php-fpm.pid			#打开进程

(5)拷贝子配置文件

因为用户和用户组都是nginx,user和group全部改为nginx用户

[root@server5 php-fpm.d]# pwd
/usr/local/lnmp/php/etc/php-fpm.d
[root@server4 php-fpm.d]# cp www.conf.default www.conf
[root@server4 php-fpm.d]# vim www.conf
 
 23 user = nginx
 24 group = nginx 

(6)拷贝更改 php 主配置文件php.ini

[root@server1 php-fpm.d]# cd
[root@server1 ~]# cd php-7.4./
[root@server5 php-7.4.6]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 php-7.4.]# vim /usr/local/lnmp/php/etc/php.ini
修改时区:
 961 date.timezone = Asia/Shanghai

(7)拷贝 php 启动脚本至/etc/init.d/

[root@server1 php-7.4.6]# cd /root/lnmp/php-7.4.6/sapi/fpm
[root@server fpm]# cp init.d.php-fpm /etc/init.d/php-fpm  ##复制php启动脚本
添加执行权限
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm
添加用户:
[root@server1 fpm]# useradd -s /sbin/nologin -M nginx

(8)启动

/etc/init.d/php-fpm start
#FastCGI = Fast Common Gateway Interface		
#(快速通用网关接口)
netstat -tnlp  ##查看端口

在这里插入图片描述

HTTP 服务器与你的或其它机器上的程序进行“交谈”的一种工具
启动报错可能因为没有 nginx 用户,需要手动创建
PHP配置完成

6.3 源码编译安装nginx的详细说明

(1)获取安装包:

在这里插入图片描述

(2)在server1上面解压并且进入解压后的目录

[root@server1 ~]# tar zxf nginx-1.18.0.tar.gz 
[root@server1 ~]# cd nginx-1.18.0/

(3)检测编译安装的环境是否满足

在这里插入图片描述
在这里插入图片描述

隐藏版本号
在这里插入图片描述
在这里插入图片描述
关闭debug功能缩小所占内存
在这里插入图片描述
在这里插入图片描述

(4)重新编译安装一下

[root@server1 nginx-1.18.0]# rm -fr /usr/local/lnmp/nginx/
[root@server1 nginx-1.18.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx
[root@server1 nginx-1.18.0]# make && make install

在这里插入图片描述

(5)配置nginx服务

使其支持动态页面访问:

编辑nginx服务的配置文件
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
加入index.php(现在要做lnmp(把php和nginx关联起来))
开启php模块:注释掉fastcgi_param,把文件写为 fastcgi.conf

在这里插入图片描述
在这里插入图片描述

为了方便访问做个链接:
[root@server1 conf]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/ 把nginx服务的启动脚本做软连接,方便管理nginx服务
nginx -t检测配置文件的语法是否存在错误
nginx 开启nginx服务

在这里插入图片描述
测试:
当没有php是默认访问nginx,即index.html里的内容

在这里插入图片描述
有了php首先访问php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值