lnmp架构 - lnmp架构介绍和搭建

目录

  • 1. lnmp(lamp)的定义
  • 2. lnmp的工作原理
      • 2.1 用户请求流程
      • 2.2 Fast-CGI 介绍
      • 2.3 PHP-FPM
      • 2.4 Nginx+FastCGI运行原理
  • 3. 配置MySQL组件
      • 3.1 实验环境
      • 3.2 软件安装
      • 3.2 修改文件权限
      • 3.3 配置服务文件
      • 3.4 初始化及启动服务mysql
  • 4. 源码编译安装php
      • 4.1 php安装包处理
      • 4.2 预编译,解决依赖性
      • 4.3 安装
      • 4.4 php服务配置
          • 4.4.1 编辑fastcgi的进程管理文件
          • 4.4.2 修改扩展的配置文件
          • 4.4.3 修改主配置文件
          • 4.4.4 修改启动脚本
          • 4.4.5 开启php服务
  • 5. 源码编译安装nginx
      • 5.1 nginx安装包编译
      • 5.2 修改配置文件
          • 5.2.1 隐藏版本号
          • 5.2.2 关闭debug功能缩小所占内存
      • 5.3 重新编译安装
      • 5.4 配置nginx服务,使其支持动态页面访问

1. lnmp(lamp)的定义

apache一般是把php作为一个模块来启动;
ngnix则是把http请求变量转发给php进程,即php独立进程。与ngnix通信,这种方式叫做FastCGI运行方式。
apache所编译的php不能用于ngnix。

LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构

lamp=linux+apache+mysql+php
lnmp=linux+nginx+mysql+php

Linux : 一类Unix计算机操作系统的统称,是目前最流行的免费操作系统,代表版本有:debian、centos、ubuntu、fedora、gentoo等
Nginx : 一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器(不做动态)
Mysq l: 一个小型关系型数据库管理系统 PHP是一种在服务器端执行的嵌入HTML文档的脚本语言
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统

2. lnmp的工作原理

2.1 用户请求流程

1. 当用户请求静态页面时:

client —> nginx(location) ----> 若请求html静态页面 ----> client

2. 当用户请求动态页面时:

发送请求: client —> nginx(location) ----> fastcgi ----> php-fpm(php进程管理) ---->php调用wrapper进程 ----->php(‘@’) ---->mysql

返回:mysql----> php ----> php-fpm —> fastcgi ----> nginx ----> http ----> client

注: 发送时 进行到‘@’所在位置时,wrapper调用php进行解析,此时即可发送给客户端了。若还要查询数据库,php连接mysql。

2.2 Fast-CGI 介绍

CGI全称是"通用网关接口"(Common Gateway Interface)
web服务器与你的或其它机器上的程序进行"交谈"的一种工具,其程序一般运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

FastCGI是从CGI发展改进而来的。
传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。
这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。

FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。
当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。
这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能

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

2.3 PHP-FPM

PHP-FPM(PHP FastCGI Process Manager)
PHP FastCGI 进程管理器,用于管理PHP
进程池的软件,用于接受web服务器的请求。

PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。

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

lnmp架构 - lnmp架构介绍和搭建_第1张图片

2.4 Nginx+FastCGI运行原理

nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用
FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)

wrapper: 
为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。

1. 当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,
2. 然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;
3. 接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;
4. 最后,Nginx将返回的数据(html页面或者图片)发送给客户端。

这就是Nginx+FastCGI的整个运作过程。

所以,我们首先需要一个wrapper,这个wrapper需要完成的工作
1、调用fastcgi(库)的函数通过socket和ningx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的)
2、调度thread,进行fork和kill
3、和application(php)进行通信

3. 配置MySQL组件

  • yum安装和编译安装的区别
    yum安装会把所有的模块都安装进去,不管使用不使用都会安装
    手动编译安装,安装服务的时候需要什么就编译安装什么模块,这样系统比较干净

MySQL源码编译安装要求虚拟机内存硬盘大小不能小于20G否则的话编译过程会出问题,而且速度缓慢,为了加快速度,可以增加CPU核数和内存大小

3.1 实验环境

主机信息 主机功能
虚拟机server1(192.168.43.11) 搭建lnmp架构
真机(192.168.43.60) 测试

3.2 软件安装

mysql没有configure.可以使用cmake执行安装编译

  • 注意:
    每次编译失败都要把目录下的***CMzkeCache.txt***这个缓存文件删掉

lnmp架构 - lnmp架构介绍和搭建_第2张图片

lnmp架构 - lnmp架构介绍和搭建_第3张图片
lnmp架构 - lnmp架构介绍和搭建_第4张图片
lnmp架构 - lnmp架构介绍和搭建_第5张图片

[root@server1 mysql-5.7.30]#                                 #指定mysql安装位置 
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \
 -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \   #套接字文件存放位置,程序入口
 -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \
 -DEXTRA_CHARSETS=all \                                      #添加扩展
 -DDEFAULT_CHARSET=utf8\    								 #添加默认字符节
 -DDEFAULT_COLLATION=utf8_general_ci \ mysq     			 #存储引擎 
 -DWITH_MYISAM_STORAGE_ENGINE=1 \
 -DWITH_INNOBASE_STORAGE_ENGINE=1\ 
 -DWITH_MEMORY_STORAGE_ENGINE=1 
 -DWITH_READLINE=1\ 
 -DENABLED_LOCAL_INFILE=1 \      							#加载本地数据
 -DMYSQL_USER=mysql \             							#使用mysql用户运行程序
 -DMYSQL_TCP_PORT=3306\           							#指定默认端口号
 -DWITH_BOOST=boost/boost_1_59_0/

lnmp架构 - lnmp架构介绍和搭建_第6张图片
lnmp架构 - lnmp架构介绍和搭建_第7张图片
lnmp架构 - lnmp架构介绍和搭建_第8张图片
lnmp架构 - lnmp架构介绍和搭建_第9张图片

3.2 修改文件权限

lnmp架构 - lnmp架构介绍和搭建_第10张图片
lnmp架构 - lnmp架构介绍和搭建_第11张图片

3.3 配置服务文件

复制启动脚本,添加可执行权限和开机启动
lnmp架构 - lnmp架构介绍和搭建_第12张图片

3.4 初始化及启动服务mysql

lnmp架构 - lnmp架构介绍和搭建_第13张图片

 systemctl start mysqld

lnmp架构 - lnmp架构介绍和搭建_第14张图片
lnmp架构 - lnmp架构介绍和搭建_第15张图片

4. 源码编译安装php

  • 硬盘必须得是20G及以上

4.1 php安装包处理

lnmp架构 - lnmp架构介绍和搭建_第16张图片

4.2 预编译,解决依赖性

[root@server1 php-7.4.6]# ./configure 
--prefix=/usr/local/lnmp/php 
--with-config-file-path=/usr/local/lnmp/php/etc 
--with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config 
--enable-soap --enable-mbstring=all 
--enable-sockets 
--with-pdo-mysql=/usr/local/lnmp/mysql 
--enable-gd --without-pear --enable-fpm
  • 根据报错,依次解决依赖性
    lnmp架构 - lnmp架构介绍和搭建_第17张图片
    lnmp架构 - lnmp架构介绍和搭建_第18张图片
    lnmp架构 - lnmp架构介绍和搭建_第19张图片
    lnmp架构 - lnmp架构介绍和搭建_第20张图片
    lnmp架构 - lnmp架构介绍和搭建_第21张图片

4.3 安装

lnmp架构 - lnmp架构介绍和搭建_第22张图片
在这里插入图片描述

4.4 php服务配置

4.4.1 编辑fastcgi的进程管理文件

lnmp架构 - lnmp架构介绍和搭建_第23张图片
lnmp架构 - lnmp架构介绍和搭建_第24张图片

4.4.2 修改扩展的配置文件

lnmp架构 - lnmp架构介绍和搭建_第25张图片
lnmp架构 - lnmp架构介绍和搭建_第26张图片

4.4.3 修改主配置文件

lnmp架构 - lnmp架构介绍和搭建_第27张图片

lnmp架构 - lnmp架构介绍和搭建_第28张图片

4.4.4 修改启动脚本

lnmp架构 - lnmp架构介绍和搭建_第29张图片

4.4.5 开启php服务

lnmp架构 - lnmp架构介绍和搭建_第30张图片

5. 源码编译安装nginx

5.1 nginx安装包编译

lnmp架构 - lnmp架构介绍和搭建_第31张图片

./configure 
--prefix=/usr/local/lnmp/nginx 
--with-http_ssl_module 
--with-http_stub_status_module 
--user=nginx --group=nginx

lnmp架构 - lnmp架构介绍和搭建_第32张图片
lnmp架构 - lnmp架构介绍和搭建_第33张图片

5.2 修改配置文件

5.2.1 隐藏版本号

lnmp架构 - lnmp架构介绍和搭建_第34张图片

[root@server1 nginx-1.18.0]# vim src/core/nginx.h

lnmp架构 - lnmp架构介绍和搭建_第35张图片

5.2.2 关闭debug功能缩小所占内存
[root@server1 nginx-1.18.0]# vim auto/cc/gcc 

lnmp架构 - lnmp架构介绍和搭建_第36张图片

5.3 重新编译安装

lnmp架构 - lnmp架构介绍和搭建_第37张图片
lnmp架构 - lnmp架构介绍和搭建_第38张图片

  • 调整大小,隐藏版本号之后
    lnmp架构 - lnmp架构介绍和搭建_第39张图片

5.4 配置nginx服务,使其支持动态页面访问

lnmp架构 - lnmp架构介绍和搭建_第40张图片
lnmp架构 - lnmp架构介绍和搭建_第41张图片
lnmp架构 - lnmp架构介绍和搭建_第42张图片

  • 测试:
    当没有php是默认访问nginx,即index.html里的内容
    在这里插入图片描述
    lnmp架构 - lnmp架构介绍和搭建_第43张图片
  • 手动写一个php会默认加载php的
    lnmp架构 - lnmp架构介绍和搭建_第44张图片
  • 最终测试:
    在浏览器输入ip就可以看到php的页面了(此时nginx和php已经关联起来了)

    lnmp架构 - lnmp架构介绍和搭建_第45张图片

你可能感兴趣的:(lnmp)