《从0搭建LNMP环境(小白实战)》

4 阅读11分钟

前言

LNMP 是目前国内最主流的网站服务器环境架构,四个字母分别对应:

  • L:Linux 服务器操作系统(本文以国内云服务器主流的 CentOS 7.9 64 位为例,Ubuntu 用户会标注专属命令)

  • N:Nginx 高性能 Web 服务器,负责接收用户的浏览器访问请求,处理静态资源,转发动态请求

  • M:MySQL/MariaDB 数据库,用于存储网站的所有数据(比如用户账号、文章内容、商品信息)

  • P:PHP 后端脚本解释器,负责处理网站的动态业务逻辑,和数据库交互生成页面内容

工作流程:用户在浏览器输入地址 → Nginx 接收请求 → 静态图片 / 网页直接返回给用户;动态 PHP 请求转发给 PHP-FPM 处理 → PHP 调用 MySQL 读取 / 写入数据 → PHP 生成最终页面内容交给 Nginx → Nginx 返回给用户浏览器

第一部分:前置准备

1. 服务器与工具准备

(1)服务器选择
  • 推荐新手直接用云服务器(阿里云、腾讯云、华为云均可),1 核 2G 配置起步,系统选择「CentOS 7.9 64 位」,自带公网 IP,搭建完成可直接访问验证,无需折腾本地网络。
  • 若用本地虚拟机,VMware 安装 CentOS 7.9 即可,操作步骤完全一致。
(2)远程连接工具

推荐免费工具:FinalShell、Tabby、Xshell,安装后输入服务器的公网 IP、root 账号、密码,即可连接服务器,全程所有操作都在远程连接工具中执行。

(3)核心权限说明

本文全程使用root 超级管理员账号操作,新手无需用 sudo 切换,避免权限不足导致的安装失败。

2. 新手避坑 3 个关键操作(不做必翻车)

(1)关闭 SELinux(CentOS 专属,Ubuntu 跳过)

SELinux 是 Linux 的安全机制,新手配置不当会导致 Nginx 访问 403、PHP 文件无法解析,直接永久关闭即可(测试环境适用,生产环境可后续精细化配置)。

bash

运行

# 1. 临时关闭SELinux(立即生效,重启后失效)
setenforce 0

# 2. 永久关闭SELinux(重启服务器后永久生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 验证:执行后显示Permissive/Disabled即为成功
getenforce
(2)防火墙配置

新手测试环境可直接关闭防火墙,避免端口不通导致访问失败;生产环境建议仅开放所需端口。

bash

运行

# ========== CentOS用户执行 ==========
# 1. 临时关闭防火墙(立即生效,重启后失效)
systemctl stop firewalld

# 2. 永久关闭防火墙(禁止开机自启)
systemctl disable firewalld

# 验证:执行后显示inactive(dead)即为成功
systemctl status firewalld

# ========== Ubuntu用户执行 ==========
# 1. 关闭防火墙
ufw disable

# 验证:执行后显示Status: inactive即为成功
ufw status

重要补充:云服务器用户必须额外去控制台的「安全组」,放行 80(HTTP)、443(HTTPS)、3306(MySQL)端口,否则公网无法访问!

(3)更换国内 yum 源 + 更新系统

CentOS 默认的国外源下载速度极慢,甚至超时,更换为阿里云源,一键解决下载问题。

bash

运行

# ========== CentOS用户执行 ==========
# 1. 安装wget下载工具
yum install wget -y

# 2. 备份原有源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 3. 下载阿里云yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 4. 清除原有缓存,生成新缓存
yum clean all && yum makecache

# 5. 更新系统所有软件包(避免依赖缺失,耐心等待执行完成)
yum update -y

# ========== Ubuntu用户执行 ==========
# 1. 更换国内源并更新
sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
apt update && apt upgrade -y

第二部分:分步搭建 LNMP 环境

搭建顺序:Nginx → MySQL/MariaDB → PHP-FPM,全程 yum/apt 一键安装,无需复杂的源码编译,新手零门槛。

第一步:安装并配置 Nginx Web 服务器

1. 安装 Nginx

CentOS 默认 yum 源的 Nginx 版本过老,我们配置 Nginx 官方源,安装稳定版。

bash

运行

# ========== CentOS用户执行 ==========
# 1. 配置Nginx官方yum源
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 2. 一键安装Nginx
yum install nginx -y

# ========== Ubuntu用户执行 ==========
apt install nginx -y
2. 启动 Nginx 并设置开机自启

bash

运行

# 1. 启动Nginx服务
systemctl start nginx

# 2. 设置开机自启(服务器重启后自动运行,无需手动启动)
systemctl enable nginx

# 3. 验证安装:执行后显示active(running)即为成功
systemctl status nginx
3. 访问验证

打开浏览器,输入你的服务器公网 IP,如果出现「Welcome to nginx!」的默认欢迎页,说明 Nginx 安装成功!

若访问失败:回头检查防火墙是否关闭、云服务器安全组是否放行 80 端口、SELinux 是否关闭。

第二步:安装并配置 MySQL/MariaDB 数据库

CentOS 7 默认 yum 源已将 MySQL 替换为 MariaDB,完全兼容 MySQL 的所有命令和功能,新手无需额外配置 MySQL 官方源,一键安装即可。

1. 安装 MariaDB

bash

运行

# ========== CentOS用户执行 ==========
# 一键安装MariaDB服务端+客户端
yum install mariadb-server mariadb -y

# ========== Ubuntu用户执行 ==========
apt install mysql-server mysql-client -y
2. 启动服务并设置开机自启

bash

运行

# ========== CentOS用户执行 ==========
# 1. 启动MariaDB服务
systemctl start mariadb

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

# 3. 验证:执行后显示active(running)即为成功
systemctl status mariadb

# ========== Ubuntu用户执行 ==========
systemctl start mysql
systemctl enable mysql
systemctl status mysql
3. 数据库安全初始化(必做!)

刚安装的数据库有匿名用户、默认无 root 密码,存在安全风险,执行初始化命令,按提示一步步操作即可,全程我会告诉你怎么选

bash

运行

# 执行安全初始化命令
mysql_secure_installation

执行后按以下步骤操作,新手直接照搬:

  1. 第一步提示Enter current password for root (enter for none):刚安装无密码,直接按回车
  2. 第二步提示Set root password? [Y/n]:设置数据库 root 密码,输入Y按回车,输入你要设置的密码(输入时屏幕不显示,正常现象,输完回车即可),再次确认密码回车
  3. 第三步提示Remove anonymous users? [Y/n]:删除匿名用户,输入Y回车
  4. 第四步提示Disallow root login remotely? [Y/n]:禁止 root 账号远程登录,新手测试环境可输入Y回车(生产环境必须选 Y)
  5. 第五步提示Remove test database and access to it? [Y/n]:删除测试数据库,输入Y回车
  6. 第六步提示Reload privilege tables now? [Y/n]:刷新权限使配置生效,输入Y回车
4. 验证数据库登录

bash

运行

# 登录数据库,执行后输入你刚才设置的root密码,回车
mysql -u root -p

若出现MariaDB [(none)]>mysql> 提示符,说明数据库安装配置成功!输入exit回车即可退出数据库。

第三步:安装并配置 PHP-FPM

重点说明:Nginx 本身不能直接处理 PHP 代码,需要通过PHP-FPM(PHP FastCGI 进程管理器) 来解析 PHP 动态请求,这是 LNMP 和 LAMP 环境的核心区别,新手必须记住。

CentOS 7 默认 yum 源的 PHP 版本是 5.4,过于老旧,目前主流网站程序(WordPress、Typecho 等)都要求 PHP7.4 及以上版本,我们通过国内稳定的 Remi 源安装 PHP7.4(兼容性最好,新手零踩坑)。

1. 配置 PHP 安装源

bash

运行

# ========== CentOS用户执行 ==========
# 1. 安装EPEL源(依赖包)
yum install epel-release -y

# 2. 安装Remi源
yum install https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm -y

# 3. 启用PHP7.4源(默认关闭,手动启用)
yum-config-manager --enable remi-php74

# ========== Ubuntu用户执行 ==========
# 1. 添加PHP源
apt install software-properties-common -y
add-apt-repository ppa:ondrej/php -y
apt update
2. 一键安装 PHP+PHP-FPM + 常用扩展

一次性安装网站必备的所有扩展,避免后续运行网站时提示缺失扩展。

bash

运行

# ========== CentOS用户执行 ==========
yum install php php-fpm php-mysqlnd php-gd php-curl php-mbstring php-xml php-zip php-json -y

# ========== Ubuntu用户执行 ==========
apt install php7.4 php7.4-fpm php7.4-mysql php7.4-gd php7.4-curl php7.4-mbstring php7.4-xml php7.4-zip -y
3. 启动 PHP-FPM 并设置开机自启

bash

运行

# ========== CentOS用户执行 ==========
# 1. 启动PHP-FPM服务
systemctl start php-fpm

# 2. 设置开机自启
systemctl enable php-fpm

# 3. 验证:执行后显示active(running)即为成功
systemctl status php-fpm

# ========== Ubuntu用户执行 ==========
systemctl start php7.4-fpm
systemctl enable php7.4-fpm
systemctl status php7.4-fpm
4. 关键配置:修正 PHP-FPM 运行用户

这一步是新手出现 502 Bad Gateway 错误的核心原因,必须保证 PHP-FPM 和 Nginx 的运行用户一致,否则会出现权限不足。

bash

运行

# ========== CentOS用户执行 ==========
# 1. 编辑PHP-FPM配置文件
vi /etc/php-fpm.d/www.conf

# 2. 找到以下两行,把默认的apache改成nginx(按i进入编辑模式,改完按ESC,输入:wq回车保存)
user = nginx
group = nginx

# 3. 重启PHP-FPM使配置生效
systemctl restart php-fpm

# ========== Ubuntu用户执行 ==========
# Ubuntu默认用户为www-data,Nginx默认也是www-data,无需修改,直接跳过即可

第三部分:核心配置:打通 Nginx 与 PHP

这一步是整个 LNMP 环境的核心,配置完成后,Nginx 就能正常转发 PHP 请求给 PHP-FPM 解析,实现动态网站的运行。

1. 新建 Nginx 站点配置文件

新手不要直接修改 Nginx 主配置文件,我们在专属目录新建站点配置,方便管理,出错也不影响主配置。

bash

运行

# ========== CentOS用户执行 ==========
# 新建站点配置文件
vi /etc/nginx/conf.d/default.conf

# ========== Ubuntu用户执行 ==========
vi /etc/nginx/sites-available/default

2. 写入完整的配置文件(注释拉满,小白能看懂)

i进入编辑模式,把下面的内容完整复制进去,公网 IP / 域名记得替换成你自己的,改完按ESC,输入:wq回车保存。

nginx

server {
    # 监听80端口(HTTP默认端口)
    listen       80;
    # 绑定你的服务器公网IP或域名,没有域名就填公网IP
    server_name  你的公网IP;

    # 网站根目录,所有网站文件都放在这个文件夹里
    root   /usr/share/nginx/html;
    # 默认索引文件,优先加载index.php,其次index.html
    index  index.php index.html index.htm;

    # 处理静态资源请求
    location / {
        try_files $uri $uri/ =404;
    }

    # 核心配置:处理所有.php结尾的PHP请求,转发给PHP-FPM处理
    location ~ .php$ {
        # 快速cgi参数,提升性能
        fastcgi_pass   127.0.0.1:9000; # CentOS默认端口,Ubuntu用户改成:unix:/run/php/php7.4-fpm.sock
        fastcgi_index  index.php;
        # 核心参数:指定PHP文件的路径,写错会出现File not found
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        # 引入Nginx默认的fastcgi参数
        include        fastcgi_params;
    }
}

重点提醒:Ubuntu 用户必须把fastcgi_pass的值改成unix:/run/php/php7.4-fpm.sock,否则会出现 502 错误!

3. 验证配置并重载 Nginx

新手改完配置必须先验证,再重载,避免配置错误导致 Nginx 服务崩溃。

bash

运行

# 1. 验证Nginx配置文件是否正确
nginx -t

执行后出现以下两行,说明配置完全正确:

plaintext

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

若报错,根据提示修改配置文件,直到验证通过。

bash

运行

# 2. 重载Nginx配置,使修改生效
systemctl reload nginx

第四部分:实战验证:确认 LNMP 环境全链路正常

我们分两步验证,确保 Nginx、PHP、MySQL 完全打通,环境搭建成功。

1. 验证 PHP 解析是否正常

在网站根目录新建一个 PHP 测试文件,验证 Nginx 能否正常解析 PHP 代码。

bash

运行

# 新建phpinfo.php测试文件
vi /usr/share/nginx/html/phpinfo.php

进入编辑模式,写入以下内容,保存退出:

php

运行

<?php
// 输出PHP的所有配置信息,验证解析功能
phpinfo();
?>

打开浏览器,输入http://你的公网IP/phpinfo.php,如果出现 PHP 的详细信息页面,说明Nginx 和 PHP-FPM 完全打通,PHP 解析正常

安全提醒:验证完成后,务必执行以下命令删除这个测试文件,避免泄露服务器配置信息:

bash

运行

rm -rf /usr/share/nginx/html/phpinfo.php

2. 验证 PHP 与 MySQL 的连通性

新建测试文件,验证 PHP 能否正常连接数据库,确认整个 LNMP 环境全链路正常。

bash

运行

# 新建数据库连接测试文件
vi /usr/share/nginx/html/test_mysql.php

进入编辑模式,写入以下内容,把数据库 root 密码改成你自己设置的,保存退出:

php

运行

<?php
// 数据库连接信息
$servername = "127.0.0.1";
$username = "root";
$password = "你的数据库root密码";

// 创建连接
$conn = mysqli_connect($servername, $username, $password);

// 检测连接
if (!$conn) {
    die("数据库连接失败:" . mysqli_connect_error());
}
echo "恭喜!LNMP环境全链路搭建成功,PHP与MySQL正常连通!";

// 关闭连接
mysqli_close($conn);
?>

打开浏览器,输入http://你的公网IP/test_mysql.php,如果页面显示「恭喜!LNMP 环境全链路搭建成功,PHP 与 MySQL 正常连通!」,说明你的 LNMP 环境已经 100% 搭建完成

同样,验证完成后删除测试文件,避免安全风险:

bash

运行

rm -rf /usr/share/nginx/html/test_mysql.php

第五部分:小白必看:高频踩坑 & 排错指南

99% 的新手问题都在这里,按现象找原因,直接对应解决方案,无需到处搜教程。

表格

报错现象核心原因一键解决方案
公网 IP 访问不了 Nginx 欢迎页1. 防火墙未关闭 / 端口未放行;2. 云服务器安全组未放通 80 端口;3. Nginx 未启动;4. SELinux 未关闭1. 回头执行防火墙关闭命令;2. 去云控制台安全组放行 80 端口;3. 执行 systemctl start nginx 启动服务;4. 关闭 SELinux
访问 PHP 文件出现 403 Forbidden1. 网站目录权限不足;2. Nginx 和 PHP-FPM 运行用户不一致;3. SELinux 未关闭1. 执行 chown -R nginx:nginx /usr/share/nginx/html 修改目录权限;2. 确认 PHP-FPM 配置文件的用户和 Nginx 一致;3. 关闭 SELinux
访问 PHP 文件出现 502 Bad Gateway1. PHP-FPM 服务未启动;2. fastcgi_pass 地址和 PHP-FPM 配置不一致;3. PHP-FPM 和 Nginx 用户不一致1. 执行 systemctl restart php-fpm 重启服务;2. 核对 Nginx 配置里的 fastcgi_pass 地址,和 PHP-FPM 配置保持一致;3. 统一两者运行用户
访问 PHP 文件出现 File not found1. 网站根目录路径写错;2. fastcgi_param SCRIPT_FILENAME 参数配置错误1. 核对 Nginx 配置里的 root 路径是否正确;2. 确保参数值为documentr​ootfastcgi_script_name,不要写错
数据库连接失败1. MariaDB/MySQL 服务未启动;2. 数据库账号密码错误;3. 数据库权限配置错误1. 执行 systemctl restart mariadb 重启服务;2. 核对代码里的账号密码,确认能正常登录数据库;3. 重新执行数据库安全初始化命令

第六部分:新手进阶可选操作

1. 绑定域名

  1. 去你的域名服务商控制台,添加 A 记录,把域名解析到你的服务器公网 IP;
  2. 修改 Nginx 配置文件里的server_name,把公网 IP 换成你的域名;
  3. 执行nginx -t验证配置,systemctl reload nginx重载即可。

2. 搭建你的第一个网站

环境已经就绪,你可以直接安装主流的网站程序:

  • 个人博客:WordPress、Typecho
  • 企业官网:织梦 CMS、易优 CMS
  • 论坛:Discuz! X只需把程序压缩包上传到网站根目录/usr/share/nginx/html,解压后按程序的安装向导操作即可。

3. 配置 HTTPS

可以用 Let's Encrypt 免费 SSL 证书,通过 certbot 一键配置,实现 HTTPS 加密访问,提升网站安全性和搜索引擎收录。


结尾

恭喜你!跟着本文一步步操作,已经完成了从 0 到 1 的 LNMP 环境搭建,不仅实现了环境的正常运行,还搞懂了每个组件的作用和核心工作流程。

后续你可以继续深入学习 Nginx 的反向代理、负载均衡配置,MySQL 数据库的优化,PHP 的基础开发,逐步从 Linux 小白成长为运维入门选手。