LNMP架构部署实战全解析

技能目标

  1. 掌握 LNMP 架构的完整部署流程
  2. 掌握 LNAMP 架构的动静分离实现原理与配置方法

前言

在互联网技术迭代升级的当下,LNMP(Linux+Nginx+MySQL/MariaDB+PHP/Python)与 LNAMP(Linux+Nginx+Apache+MySQL/MariaDB+PHP/Python)作为开源轻量级 Web 架构,凭借高并发处理能力、良好的兼容性和灵活的扩展特性,成为企业级 Web 应用部署的核心方案,广泛应用于电商平台、社区论坛、API 服务等各类业务场景。

本章节将围绕两种架构展开实操教学,帮助运维技术人员吃透架构核心原理,熟练完成从基础环境搭建、各服务配置到性能调优的全流程操作。通过对比 LNMP 轻量级高并发的优势与 LNAMP 混合架构的兼容性特点,让学习者能够根据实际业务的资源需求、访问量特征灵活选择技术架构,同时具备排查生产环境中常见服务故障、性能瓶颈的实战能力。

基于 LNMP 架构部署 Web 应用

此前已完成 LNMP 架构的基础认知与简单配置,本小节将以开源社区论坛程序PHPWind 为实例,完成 LNMP 架构的完整落地部署。PHPWind 是基于 PHP+MySQL 开发的开源社区论坛系统,具备功能完善、运行稳定、易扩展的特点,是国内主流的论坛搭建解决方案之一,官方网站为www.phpwind.net

1. 编译安装 Nginx 服务

Nginx 运行依赖 pcre、zlib 等基础库支持,需通过源码编译方式安装,保证功能模块的自定义性。

(1)安装编译依赖包

bash

运行

复制代码
[root@localhost ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar
(2)创建专用运行用户及日志目录

为保证 Nginx 运行安全性,创建无登录权限的专用用户,并配置专属日志目录及权限:

bash

运行

复制代码
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# mkdir -p /var/log/nginx
[root@localhost ~]# chown -R nginx:nginx /var/log/nginx
(3)源码编译安装 Nginx

本次选用 Nginx 1.28.0 版本,编译时启用 SSL、HTTP/2、状态监控等核心模块:

bash

运行

复制代码
[root@localhost ~]# tar zxf nginx-1.28.0.tar.gz
[root@localhost ~]# cd nginx-1.28.0
[root@localhost nginx-1.28.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream
[root@localhost nginx-1.28.0]# make && make install

参数说明

  • --prefix=/usr/local/nginx:指定 Nginx 安装根目录
  • --user/--group=nginx:指定 Nginx 运行的用户 / 用户组
  • --with-http_ssl_module:启用 SSL 模块,支持 HTTPS 协议
  • --with-http_v2_module:开启 HTTP/2 协议,提升访问速度
  • --with-http_realip_module:获取客户端真实 IP 地址
  • --with-http_stub_status_module:启用 Nginx 状态监控模块
  • --with-http_gzip_static_module:启用静态资源 gzip 压缩,减小传输体积
  • --with-stream:启用四层 TCP/UDP 代理功能

创建主程序软链接,方便系统全局调用:

bash

运行

复制代码
[root@localhost nginx-1.28.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
(4)配置 Nginx 系统服务

通过 systemd 管理 Nginx 服务,实现开机自启、便捷的启停操作:

bash

运行

复制代码
[root@localhost ~]# vim /lib/systemd/system/nginx.service

写入以下配置内容:

ini

复制代码
[Unit]
Description=The NGINX HTTP and Reverse Proxy Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStartPre=/usr/local/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/local/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/local/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target

重新加载系统服务配置,启动并设置开机自启:

bash

运行

复制代码
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx

2. 快速安装 MySQL 数据库服务

为提升部署效率,采用 dnf 包管理器方式安装 MySQL 服务,替代源码编译:

bash

运行

复制代码
[root@localhost ~]# dnf install -y mysql mysql-server
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl enable mysqld

登录 MySQL 并重置 root 用户密码(默认无密码,直接回车登录):

bash

运行

复制代码
[root@localhost ~]# mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Kgc@123456';
mysql> FLUSH PRIVILEGES;
mysql> exit

3. 源码编译安装 PHP-FPM 服务

PHP-FPM 是 PHP 的 FastCGI 进程管理工具,专为高并发场景设计,是 Nginx 处理 PHP 动态请求的核心组件,本次采用源码编译安装 PHP 8.3.0 版本。

(1)安装编译依赖环境

bash

运行

复制代码
[root@localhost ~]# dnf install -y gcc make cmake autoconf libtool bison re2c gcc-c++ openssl-devel libxml2-devel zlib-devel curl-devel libpng-devel libjpeg-turbo-devel freetype-devel libicu-devel oniguruma-devel sqlite-devel libxslt-devel libzip-devel pcre-devel apr-devel apr-util-devel ncurses-devel wget
(2)源码编译安装 PHP

bash

运行

复制代码
[root@localhost ~]# tar xzf php-8.3.0.tar.gz
[root@localhost ~]# cd php-8.3.0
[root@localhost php-8.3.0]# ./configure \
--prefix=/usr/local/php \
--with-openssl \
--with-zlib \
--with-curl \
--enable-mbstring \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-freetype \
--with-jpeg \
--with-zip \
--with-libxml \
--enable-intl \
--enable-gd \
--enable-opcache \
--enable-fpm
[root@localhost php-8.3.0]# make -j$(nproc) && make install
(3)配置 PHP 核心文件

复制并修改 PHP 配置文件,设置时区、内存限制等核心参数:

bash

运行

复制代码
[root@localhost php-8.3.0]# cp php.ini-development /usr/local/php/lib/php.ini
[root@localhost php-8.3.0]# sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/' /usr/local/php/lib/php.ini
[root@localhost php-8.3.0]# sed -i 's/memory_limit = 128M/memory_limit = 512M/' /usr/local/php/lib/php.ini
(4)配置 PHP-FPM 服务

初始化 PHP-FPM 配置文件,创建专用运行用户并修改配置:

bash

运行

复制代码
[root@localhost ~]# mv /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@localhost ~]# mv /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# 创建PHP-FPM专用运行用户
[root@localhost ~]# useradd -M -s /sbin/nologin php-fpm
# 修改运行用户
[root@localhost ~]# sed -i 's/user = nobody/user = php-fpm/' /usr/local/php/etc/php-fpm.d/www.conf
[root@localhost ~]# sed -i 's/group = nobody/group = php-fpm/' /usr/local/php/etc/php-fpm.d/www.conf
(5)配置 PHP-FPM 系统服务

bash

运行

复制代码
[root@localhost ~]# vim /etc/systemd/system/php-fpm.service

写入以下配置:

ini

复制代码
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target mysqld.service
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGQUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
(6)PHP-FPM 进程参数优化

PHP-FPM 进程分为static(固定进程数)和dynamic(动态进程数)两种启动模式,需根据服务器内存和业务负载调整。以2G 内存的论坛服务器为例,优化 dynamic 模式参数:

bash

运行

复制代码
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 30      # 最大进程数
pm.start_servers = 8      # 启动初始进程数
pm.max_spare_servers = 15 # 最大空闲进程数
pm.min_spare_servers = 3  # 最小空闲进程数

启动 PHP-FPM 并设置开机自启:

bash

运行

复制代码
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start php-fpm
[root@localhost ~]# systemctl enable php-fpm

4. 验证 LNMP 架构协同工作

通过编写测试文件,分别验证 Nginx 对 PHP 的解析能力、PHP 与 MySQL 的连接能力。

(1)验证 PHP 解析功能

在 Nginx 网站根目录创建 PHP 测试文件:

bash

运行

复制代码
[root@localhost ~]# vim /usr/local/nginx/html/info.php
<?php
phpinfo();
?>

修改 Nginx 配置文件,开启 PHP 解析支持:

bash

运行

复制代码
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

server配置段中添加 / 修改以下内容:

nginx

复制代码
location / {
    root   html;
    index  index.html index.htm index.php;
}
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

检查配置文件语法并重新加载:

bash

运行

复制代码
[root@localhost ~]# nginx -t
[root@localhost ~]# nginx -s reload

通过浏览器访问http://服务器IP/info.php,若能正常显示 PHP 环境信息,说明 Nginx 与 PHP-FPM 协同工作正常。

(2)验证 PHP 与 MySQL 连接能力

修改测试文件,编写 MySQL 连接代码:

bash

运行

复制代码
[root@localhost ~]# vim /usr/local/nginx/html/info.php
<?php
$link = mysqli_connect('127.0.0.1','root','Kgc@123456');
if($link){
    echo "MySQL数据库连接成功!";
}else{
    echo "MySQL数据库连接失败:".mysqli_connect_error();
}
mysqli_close($link);
?>

浏览器访问该地址,若显示MySQL 数据库连接成功,说明三者协同工作正常。

5. 部署 PHPWind 论坛应用

(1)解压部署源码包

下载 PHPWind 源码包后,解压并将核心文件移至 Nginx 网站根目录,配置目录权限:

bash

运行

复制代码
[root@localhost ~]# mkdir -p /usr/local/nginx/html/bbs
[root@localhost ~]# unzip PHPWind_9.0.1_UTF8.zip
[root@localhost ~]# cp -ra upload/* /usr/local/nginx/html/bbs/
# 修改目录所属用户,保证PHP-FPM的写入权限
[root@localhost ~]# chown -R php-fpm:php-fpm /usr/local/nginx/html/bbs/
(2)创建论坛专用数据库及用户

为提升数据库安全性,避免使用 root 用户直接连接应用,创建专用数据库和授权用户:

bash

运行

复制代码
[root@localhost ~]# mysql -uroot -pKgc@123456
mysql> CREATE DATABASE phpwind_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> CREATE USER 'phpwind_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Phpwind@123';
mysql> GRANT ALL PRIVILEGES ON phpwind_db.* TO 'phpwind_user'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit
(3)完成论坛网页端安装

通过浏览器访问http://服务器IP/bbs/install,按照安装向导完成以下步骤:

  1. 环境检测:确认服务器环境满足 PHPWind 安装要求
  2. 数据库配置:填写创建的数据库名、用户名、密码
  3. 站点配置:设置论坛名称、管理员账号和密码
  4. 安装完成:删除安装目录,进入论坛后台或前台访问

LNAMP 架构部署与动静分离验证

LNAMP 架构融合了 Nginx 高并发处理静态资源的优势与 Apache 对 PHP 等动态脚本的良好兼容性,通过动静分离 + 反向代理技术,将静态资源由 Nginx 直接处理,动态请求转发至 Apache 服务器解析,大幅提升 Web 应用的访问速度和服务稳定性,适用于中大型高并发 Web 业务场景。

本次实验需准备两台 Linux 服务器,基础配置均为 2C4G,具体服务分工如下:

表格

操作系统 服务器 IP 部署服务 功能定位
CentOS 9 192.168.20.100 Nginx 反向代理 + 静态资源处理
CentOS 9 192.168.20.101 Apache+PHP+MySQL 动态请求解析 + 数据存储

1. Nginx 服务器反向代理与静态资源配置

(1)安装并配置 Nginx 反向代理

bash

运行

复制代码
[root@nginx ~]# dnf install -y nginx
[root@nginx ~]# systemctl stop firewalld && systemctl disable firewalld
[root@nginx ~]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
[root@nginx ~]# vim /etc/nginx/nginx.conf

修改server配置段,实现静态资源本地处理、动态请求转发:

nginx

复制代码
server {
    listen       80;
    server_name  localhost;
    root         /usr/share/nginx/html;
    index        index.html index.php;

    # 处理静态资源(图片、CSS、JS、视频等)
    location ~* \.(jpg|jpeg|png|gif|css|js|ico|mp4)$ {
        expires 30d;  # 静态资源缓存30天
        add_header Cache-Control "public, max-age=2592000";
    }

    # 转发PHP动态请求至Apache服务器
    location ~ \.php$ {
        proxy_pass http://192.168.20.101:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
    }
}

核心配置说明

  • proxy_pass:将 PHP 动态请求转发至 Apache 服务器 IP
  • X-Real-IP/X-Forwarded-For:将客户端真实 IP 传递给后端 Apache 服务器
  • expires:设置静态资源缓存时间,减少重复请求
(2)创建静态资源目录并上传文件

bash

运行

复制代码
[root@nginx ~]# mkdir -p /usr/share/nginx/html/images
[root@nginx ~]# cp logo.png /usr/share/nginx/html/images/
[root@nginx ~]# systemctl start nginx && systemctl enable nginx

2. Apache 服务器搭建 LAMP 环境

在 192.168.20.101 服务器上,通过 dnf 快速搭建 LAMP 环境,处理 Nginx 转发的动态请求。

(1)安装 LAMP 相关服务

bash

运行

复制代码
[root@apache ~]# dnf install -y httpd php php-mysqlnd mysql mysql-server
[root@apache ~]# systemctl start httpd mysqld
[root@apache ~]# systemctl enable httpd mysqld
(2)配置 MySQL 数据库

重置 root 密码,创建测试数据库、用户并插入测试数据:

bash

运行

复制代码
[root@apache ~]# mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Kgc@123456';
mysql> CREATE DATABASE test_db DEFAULT CHARACTER SET utf8mb4;
mysql> CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'Test@123';
mysql> GRANT ALL ON test_db.* TO 'test_user'@'localhost';
mysql> FLUSH PRIVILEGES;
# 创建测试表并插入数据
mysql> USE test_db;
mysql> CREATE TABLE goods (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), price DECIMAL(10,2));
mysql> INSERT INTO goods (name, price) VALUES ('手机', 2999.00), ('电脑', 5999.00), ('平板', 1999.00);
mysql> exit

3. 编写 PHP 动态测试页面

在 Apache 网站根目录创建 PHP 测试文件,实现数据库查询并嵌入 Nginx 端的静态图片:

bash

运行

复制代码
[root@apache ~]# vim /var/www/html/goods.php
<?php
// 连接MySQL数据库
$servername = "127.0.0.1";
$username = "test_user";
$password = "Test@123";
$dbname = "test_db";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 查询商品数据
$sql = "SELECT id, name, price FROM goods";
$result = $conn->query($sql);

// 输出查询结果
if ($result->num_rows > 0) {
    echo "<h2>商品列表</h2>";
    echo "<table border='1' cellpadding='8' cellspacing='0'>";
    echo "<tr><th>ID</th><th>商品名称</th><th>价格</th></tr>";
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["price"]."</td></tr>";
    }
    echo "</table>";
} else {
    echo "暂无商品数据";
}
$conn->close();

// 嵌入Nginx端的静态图片(由Nginx直接解析)
echo "<br><img src='images/logo.png' alt='测试logo' width='200'>";
?>

4. 验证 LNAMP 动静分离效果

通过浏览器访问Nginx 服务器 IP 的测试页面:http://192.168.20.100/goods.php,可观察到以下效果:

  1. 页面显示商品列表数据:由 Apache 服务器解析 PHP 脚本,从 MySQL 数据库查询后返回,属于动态资源;
  2. 页面显示测试 logo 图片:由 Nginx 服务器直接读取本地静态文件并返回,属于静态资源;
  3. 查看 Apache 日志:/var/log/httpd/access_log,可看到动态 PHP 请求的访问记录,无静态资源请求记录;
  4. 查看 Nginx 日志:/var/log/nginx/access.log,可看到静态图片的访问记录,无 PHP 动态请求记录。

以上现象说明 LNAMP 架构的动静分离配置成功,静态资源和动态资源实现了独立处理。

总结

本章节通过实操完成了 LNMP 架构的完整部署与 PHPWind 论坛的落地,同时实现了 LNAMP 架构的动静分离配置,核心知识点总结如下:

  1. LNMP 架构以 Nginx 为核心 Web 服务器,结合 PHP-FPM 处理动态请求,MySQL 存储数据,轻量级高并发的特点适用于中小规模 Web 应用;
  2. LNAMP 架构通过 Nginx 反向代理实现动静分离,静态资源由 Nginx 本地快速处理,动态请求转发至 Apache 解析,兼顾了高并发与兼容性,适用于中大型复杂 Web 业务;
  3. 服务优化的核心要点:Nginx 启用静态资源缓存、PHP-FPM 根据服务器内存调整进程数、数据库创建专用应用用户提升安全性;
  4. 架构协同的关键:Nginx 正确配置 PHP 解析规则或反向代理规则,PHP 开启对应的 MySQL 扩展,保证各服务之间的网络互通和权限匹配。

通过本章节的学习,能够掌握两种主流 Web 架构的部署与优化方法,根据实际业务场景选择合适的技术方案,同时具备排查架构中服务连接、解析、转发等常见问题的能力。

相关推荐
AMoon丶2 小时前
C++模版-函数模版,类模版基础
java·linux·c语言·开发语言·jvm·c++·算法
ryan007liu3 小时前
shell 批量执行locust 脚本压测
linux·服务器·压力测试
AMoon丶3 小时前
Golang--多种数据结构详解
linux·c语言·开发语言·数据结构·c++·后端·golang
高旭的旭4 小时前
Ubuntu 无显示器远程桌面完美方案
linux·ubuntu·计算机外设
峥嵘life4 小时前
Android16 【CTS】CtsWindowManagerDeviceAnimations存在fail项
android·linux·学习
VermouthSp4 小时前
上下文切换
linux·rust
我爱学习好爱好爱6 小时前
Logstash 数据管道测试案例:从 Filebeat 接收日志并输出至黑屏幕与 Elasticsearch(基于Rocky Linux 9.6)
大数据·linux·elasticsearch
桌面运维家6 小时前
Windows VHD虚拟磁盘技术详解与应用指南
linux·运维·服务器
hy____1236 小时前
Linux_网络基础2
linux·服务器·网络