LNMP架构学习笔记

LNMP架构概述

定义

LNMP是一套开源的Web服务器架构 由四个核心组件组成 均为免费开源软件 广泛应用于中小型网站部署 具有轻量 高效 稳定的特点 是Linux系统下最常用的Web架构之一

核心组件对应:L(Linux)N(Nginx)M(MySQL/MariaDB)P(PHP)各组件各司其职协同工作 构成完整的Web服务运行环境

各组件作用

  • Linux:底层操作系统,提供稳定的运行环境,是整个架构的基础,常用发行版为CentOS、Ubuntu、Debian
  • Nginx:高性能的HTTP和反向代理服务器,负责接收用户的HTTP请求,处理静态资源(HTML、CSS、JS、图片等),将动态请求(PHP脚本)转发给PHP-FPM处理,提升并发处理能力
  • MySQL/MariaDB:关系型数据库,用于存储网站的动态数据(如用户信息、文章内容、订单数据等),提供数据的增删改查操作支持
  • PHP:服务器端脚本语言,用于编写动态网页逻辑,接收Nginx转发的请求,连接数据库获取数据,处理完成后将结果返回给Nginx,再由Nginx响应给用户

工作流程

  1. 用户通过浏览器发送HTTP请求到服务器的80(HTTP)或443(HTTPS)端口

  2. Nginx接收请求 判断请求类型 若是静态资源 直接读取服务器本地文件 返回给用户 若是动态请求(如.php后缀)则通过fastcgi协议转发给PHP-FPM

  3. PHP-FPM启动PHP进程 执行PHP脚本 脚本需要读取数据时 连接MySQL数据库 获取数据并处理

  4. PHP将处理后的结果(通常是HTML页面)返回给Nginx

  5. Nginx将最终结果响应给用户浏览器 完成一次请求闭环

LNMP各组件安装

安装顺序:Linux系统准备 → 安装Nginx → 安装MySQL/MariaDB → 安装PHP及PHP-FPM → 配置联动 → 测试运行

系统准备

  1. 关闭防火墙(测试环境,生产环境需配置端口放行)
bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
  1. 关闭SELinux
bash 复制代码
setenforce 0  # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  # 永久关闭
  1. 安装基础依赖(用于编译安装和组件运行)
bash 复制代码
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

安装Nginx

方式:yum安装(简单快捷,适合新手)也可源码编译安装(自定义配置更灵活)

bash 复制代码
# 1. 安装Nginx官方yum源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 2. 安装Nginx
yum install -y nginx

# 3. 启动并设置开机自启
systemctl start nginx
systemctl enable nginx

# 4. 验证安装(浏览器访问服务器IP,出现Nginx默认页面即为成功)
curl http://localhost

安装MariaDB(MySQL的分支,兼容MySQL,更轻量)

bash 复制代码
# 1. 安装MariaDB
yum install -y mariadb mariadb-server mariadb-devel

# 2. 启动并设置开机自启
systemctl start mariadb
systemctl enable mariadb

# 3. 初始化数据库(设置root密码,删除匿名用户,禁止远程空密码登录)
mysql_secure_installation

# 4. 验证安装(登录数据库)
mysql -u root -p  # 输入设置的root密码,登录成功即为安装完成

核心配置文件:/etc/my.cnf(数据库主配置)

常用命令:启动(systemctl start mariadb)停止(systemctl stop mariadb)重启(systemctl restart mariadb)查看状态(systemctl status mariadb)

安装PHP及PHP-FPM

bash 复制代码
# 1. 安装第三方yum源
yum install -y epel-release
rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm

# 2. 启用PHP 7.4仓库
yum install -y yum-utils
yum-config-manager --enable remi-php74

# 3. 安装PHP及所需扩展(php-fpm必须安装,其他扩展根据需求选择)
yum install -y php php-fpm php-mysql php-gd php-xml php-mbstring php-json php-cli

# 4. 启动并设置开机自启
systemctl start php-fpm
systemctl enable php-fpm

# 5. 验证安装(查看PHP版本)
php -v

LNMP组件联动配置

核心:配置Nginx 让其能识别PHP动态请求 并转发给PHP-FPM处理 配置PHP 让其能连接MySQL数据库

Nginx配置(关联PHP-FPM)

编辑默认站点配置文件 修改动态请求转发规则:

bash 复制代码
vim /etc/nginx/conf.d/default.conf

修改内容(关键部分)

bash 复制代码
server {
    listen       80;
    server_name  localhost;  # 可改为自己的域名,如www.example.com

    # 静态资源根目录(可自定义,如/www/html)
    root   /usr/share/nginx/html;
    index  index.html index.htm index.php;  # 新增index.php,优先解析PHP首页

    # 处理PHP动态请求
    location ~ \.php$ {
        root           /usr/share/nginx/html;  # 与上面的root一致
        fastcgi_pass   127.0.0.1:9000;  # PHP-FPM默认监听端口(9000)
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  # 关键参数,指定PHP脚本路径
        include        fastcgi_params;
    }
}

配置完成后,重启Nginx生效:

bash 复制代码
systemctl restart nginx

测试LNMP架构是否正常运行

测试静态页面

html 复制代码
<!DOCTYPE html>
静态页面测试LNMP静态页面测试成功!

测试PHP页面

php 复制代码
<?php
phpinfo();
?>

测试PHP连接MySQL

浏览器访问之前创建的test.php(http://服务器IP/test.php)显示"PHP连接MySQL成功!" 即为联动正常

常用命令汇总

Nginx相关

bash 复制代码
systemctl start nginx    # 启动Nginx
systemctl stop nginx     # 停止Nginx
systemctl restart nginx  # 重启Nginx
systemctl status nginx   # 查看Nginx状态
nginx -t                 # 检查Nginx配置文件语法是否正确

MariaDB相关

php 复制代码
systemctl start mariadb    # 启动MariaDB
systemctl stop mariadb     # 停止MariaDB
systemctl restart mariadb  # 重启MariaDB
systemctl status mariadb   # 查看MariaDB状态
mysql -u root -p           # 登录数据库

PHP-FPM相关

bash 复制代码
systemctl start php-fpm    # 启动PHP-FPM
systemctl stop php-fpm     # 停止PHP-FPM
systemctl restart php-fpm  # 重启PHP-FPM
systemctl status php-fpm   # 查看PHP-FPM状态
相关推荐
墨黎芜2 小时前
遥感数字图像处理:从入门到精通——作物旱情遥感监测
学习·信息可视化
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 基于uniapp的云笔记系统的设计与实现为例,包含答辩的问题和答案
笔记·uni-app
Wyawsl2 小时前
nginx安全笔记
笔记·nginx·安全
芯跳加速2 小时前
Obsidian智能体学习(二)
大数据·人工智能·学习
tumeng07112 小时前
springboot项目架构
spring boot·后端·架构
没有bug.的程序员3 小时前
撕裂微服务网关的认证风暴:Spring Security 6.1 与 JWT 物理级免登架构大重构
java·spring·微服务·架构·security·jwt
我不是程序猿儿3 小时前
【嵌入式】外部中断的学习小坑记录
单片机·嵌入式硬件·学习
学嵌入式的小杨同学3 小时前
STM32 进阶封神之路(十三):空气质量传感器实战 ——KQM6600 模块从协议到代码(串口通信 + 数据解析)
c++·stm32·单片机·嵌入式硬件·架构·硬件架构·嵌入式实时数据库
雾岛听蓝3 小时前
动静态库原理与ELF文件详解
linux·经验分享·笔记