手动搭建LNMP环境详细步骤

背景介绍:为什么选择 LNMP 架构?

LNMP(Linux + Nginx + MySQL + PHP)是目前最主流的 Web 服务架构之一,相比传统 LAMP(Apache)架构,其核心优势在于:

  • 高性能:Nginx 基于事件驱动模型,并发处理能力远超 Apache,尤其适合高流量网站;
  • 轻量级:Nginx 内存占用低,配置简洁,易于扩展;
  • 灵活的 PHP 处理:通过 PHP-FPM(FastCGI 进程管理器)实现 PHP 解析,支持进程池管理,性能更优;
  • Unix Socket 通信:Nginx 与 PHP-FPM 通过本地套接字通信,比 TCP 连接减少网络开销,进一步提升性能。

本文基于 CentOS 7 最小化安装系统,从基础环境准备到组件配置、功能测试,完整讲解 LNMP 架构的部署流程,适合搭建生产级 Web 服务或测试环境。

核心关键词解释

  • LNMP:Linux(操作系统)+ Nginx(Web 服务器)+ MySQL(数据库)+ PHP(后端语言)的组合架构;
  • PHP-FPM:PHP FastCGI 进程管理器,负责管理 PHP 解析进程,处理 Nginx 转发的 PHP 请求;
  • Unix Socket:本地进程间通信方式,比 TCP/IP 更高效,用于 Nginx 与 PHP-FPM 的本地通信;
  • FastCGI:一种通信协议,允许 Web 服务器(Nginx)与后端应用服务器(PHP-FPM)分离部署,提高并发处理能力;
  • epel-release:Extra Packages for Enterprise Linux,CentOS 官方源的扩展仓库,提供 Nginx 等额外软件包;
  • remi 仓库:第三方软件仓库,提供最新版本的 PHP 包(如 PHP 7.4),弥补 CentOS 默认源版本过旧的问题。

一、系统准备(基础环境配置)

1. 更新系统包

bash

sudo yum update -y
  • 作用:更新系统所有已安装包到最新版本,修复安全漏洞和已知 bug,确保基础环境稳定。

2. 安装常用工具

bash

sudo yum install -y vim wget curl net-tools yum-utils
  • vim:文本编辑器(用于修改配置文件);
  • wget/curl:网络下载工具(用于获取安装包);
  • net-tools:网络工具(如ifconfignetstat,用于查看网络状态);
  • yum-utils:YUM 工具集(提供yum-config-manager等命令,用于管理软件源)。

二、安装并配置 MySQL 5.7

1. 添加 MySQL 官方 YUM 仓库

bash

wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-11.noarch.rpm
  • 说明:该 RPM 包包含 MySQL 各版本的 YUM 仓库配置,默认启用 MySQL 8.0 仓库,需手动切换到 5.7。

2. 切换到 MySQL 5.7 仓库

bash

sudo yum-config-manager --disable mysql80-community  # 禁用MySQL 8.0仓库
sudo yum-config-manager --enable mysql57-community   # 启用MySQL 5.7仓库

3. 验证仓库配置

bash

yum repolist enabled | grep mysql
  • 预期输出:mysql57-community/x86_64 MySQL 5.7 Community Server(表示 5.7 仓库已启用)。

4. 安装 MySQL 5.7

bash

sudo yum install -y mysql-community-server
  • 说明:自动安装 MySQL 服务器、客户端及依赖包,默认安装路径为/var/lib/mysql(数据目录)、/usr/bin(命令目录)。

5. 启动并设置开机自启

bash

sudo systemctl start mysqld  # 启动MySQL服务
sudo systemctl enable mysqld # 设置开机自启(避免服务器重启后服务中断)

6. 获取临时密码

bash

sudo grep 'temporary password' /var/log/mysqld.log
  • 说明:MySQL 5.7 安装后会自动生成临时密码并写入错误日志,用于首次登录。

7. 安全配置(必做)

bash

sudo mysql_secure_installation

执行步骤:

  1. 输入临时密码(来自上一步);
  2. 设置新 root 密码(需满足强度要求:至少 8 位,包含大小写字母、数字和特殊字符,如MyPass123!);
  3. 后续选项全部输入Y
    • 移除匿名用户(避免未授权访问);
    • 禁止 root 远程登录(提升安全性,生产环境建议创建专用用户);
    • 删除 test 数据库(默认测试库,无实际用途);
    • 重载权限表(使配置生效)。

✅ 至此 MySQL 5.7 已安装并完成安全加固,可正常使用。

三、安装并配置 Nginx

1. 安装 EPEL 仓库

bash

sudo yum install -y epel-release
  • 说明:CentOS 默认源不含 Nginx,需通过 EPEL 仓库安装。

2. 安装 Nginx

bash

sudo yum install -y nginx

3. 启动并设置开机自启

bash

sudo systemctl start nginx  # 启动Nginx服务
sudo systemctl enable nginx # 设置开机自启

4. 开放防火墙端口

bash

sudo firewall-cmd --permanent --add-service=http  # 开放80端口(HTTP)
sudo firewall-cmd --permanent --add-service=https # 开放443端口(HTTPS,可选)
sudo firewall-cmd --reload  # 重载防火墙规则使配置生效

🔍 测试:浏览器访问http://你的服务器IP,应看到 Nginx 默认欢迎页(表示 Nginx 启动成功)。

四、安装并配置 PHP(PHP 7.4)

1. 添加 Remi 仓库

bash

sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
  • 说明:Remi 仓库提供最新版本的 PHP 包,解决 CentOS 7 默认源仅提供 PHP 5.4 的问题。

2. 启用 PHP 7.4 仓库

bash

sudo yum-config-manager --enable remi-php74

3. 安装 PHP 及扩展

bash

sudo yum install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-opcache
  • 组件说明:
    • php:PHP 核心模块;
    • php-fpm:PHP FastCGI 进程管理器;
    • php-mysqlnd:MySQL 原生驱动(替代传统php-mysql,性能更好);
    • php-gd:图片处理扩展(支持 JPG/PNG 等格式);
    • php-xml:XML 解析扩展;
    • php-mbstring:多字节字符串处理扩展(支持中文等多字节字符);
    • php-json:JSON 解析扩展;
    • php-opcache:PHP opcode 缓存扩展(提升 PHP 执行性能)。

4. 确认 nginx 用户存在

bash

id nginx || sudo useradd -r -s /sbin/nologin nginx
  • 说明:若系统中无nginx用户,自动创建(用于运行 Nginx 和 PHP-FPM 进程,避免 root 权限风险)。

5. 配置 PHP-FPM(关键优化)

bash

sudo vim /etc/php-fpm.d/www.conf

修改以下配置项(注释部分为原配置,需替换):

ini

; 运行用户和组改为nginx(原配置为apache或nobody)
user = nginx
group = nginx

; 使用Unix Socket通信(原配置为listen = 127.0.0.1:9000,TCP方式)
listen = /var/run/php-fpm/php-fpm.sock

; 设置Socket文件权限(确保Nginx可访问)
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

; 进程管理配置(根据服务器内存调整,示例为2GB内存配置)
pm = dynamic          ; 动态进程管理模式(根据负载自动调整进程数)
pm.max_children = 50  ; 最大子进程数(内存越大可设越高)
pm.start_servers = 5  ; 启动时的进程数
pm.min_spare_servers = 5  ; 最小空闲进程数
pm.max_spare_servers = 35 ; 最大空闲进程数

6. 启动并设置开机自启

bash

sudo systemctl start php-fpm  # 启动PHP-FPM服务
sudo systemctl enable php-fpm # 设置开机自启

7. 验证 Socket 文件

bash

ls -l /var/run/php-fpm/php-fpm.sock
  • 预期输出:srw-rw---- 1 nginx nginx ... /var/run/php-fpm/php-fpm.sock(权限和属主正确)。

五、配置 Nginx 支持 PHP(关键步骤)

1. 编辑 Nginx 默认配置

bash

sudo vim /etc/nginx/conf.d/default.conf

替换为以下配置(支持 PHP 解析):

nginx

server {
    listen       80;          # 监听80端口
    server_name  localhost;   # 服务器域名(可改为实际域名,如example.com)
    root         /usr/share/nginx/html;  # 网站根目录
    index        index.php index.html index.htm;  # 默认首页(优先解析index.php)

    location / {
        try_files $uri $uri/ =404;  # 尝试访问文件或目录,不存在则返回404
    }

    # PHP请求处理规则
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;  # 通过Unix Socket连接PHP-FPM
        fastcgi_index  index.php;  # 默认PHP首页
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  # PHP脚本路径
        include        fastcgi_params;  # 加载FastCGI参数配置
    }

    # 禁止访问.htaccess文件(Apache配置文件,Nginx不识别)
    location ~ /\.ht {
        deny all;
    }
}

2. 验证 Nginx 配置

bash

sudo nginx -t
  • 输出syntax is oktest is successful表示配置无语法错误。

3. 重载 Nginx 配置

bash

sudo systemctl reload nginx
  • 说明:无需重启服务,直接重载配置使修改生效。

六、测试 LNMP 是否正常工作

1. 测试 PHP 解析

bash

echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/info.php
  • 作用:在网站根目录创建info.php文件,输出 PHP 环境信息。

访问http://你的服务器IP/info.php,应看到 PHP 信息页面(包含 PHP 版本、配置、扩展等信息),表示 Nginx 与 PHP-FPM 通信正常。

2. 测试 MySQL 连接

bash

sudo vim /usr/share/nginx/html/test_mysql.php

写入以下代码(替换你的MySQL密码为实际密码):

php

<?php
$mysqli = new mysqli("127.0.0.1", "root", "你的MySQL密码");
if ($mysqli->connect_error) {
    die("❌ 连接失败: " . $mysqli->connect_error);
}
echo "✅ MySQL 连接成功!";
?>

访问http://你的服务器IP/test_mysql.php,显示✅ MySQL 连接成功!表示 PHP 与 MySQL 通信正常。

七、常见问题排查

问题现象可能原因解决方案
502 Bad GatewayNginx 无法连接 PHP-FPM1. 检查fastcgi_pass路径是否与 PHP-FPM 配置的 Socket 路径一致;2. 检查 Socket 文件权限(确保 Nginx 用户可访问);3. 确认 PHP-FPM 服务是否运行(systemctl status php-fpm)。
Permission deniedNginx 用户无权访问 Socket 文件确保 PHP-FPM 配置中listen.ownerlisten.groupnginx,且listen.mode = 0660
info.php 下载而非执行Nginx 未正确配置 PHP 解析规则检查location ~ \.php$配置块是否存在,且fastcgi_param SCRIPT_FILENAME路径正确。
PHP 连接 MySQL 失败密码错误 / MySQL 未授权 / 防火墙拦截1. 确认 MySQL 密码正确;2. 检查 MySQL 用户权限(root@127.0.0.1是否允许访问);3. 关闭 MySQL 防火墙或开放 3306 端口。

八、安全建议(生产环境必做)

  1. 删除测试文件

    bash

    sudo rm -f /usr/share/nginx/html/info.php /usr/share/nginx/html/test_mysql.php
    
    • 说明:info.php会泄露服务器环境信息,存在安全风险,测试完成后需删除。
  2. 创建 MySQL 专用用户

    sql

    -- 登录MySQL后执行
    CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'WebPass123!';
    GRANT ALL PRIVILEGES ON your_db.* TO 'webuser'@'localhost';
    FLUSH PRIVILEGES;
    
    • 说明:避免使用 root 用户连接数据库,降低权限泄露风险。
  3. 配置 SELinux(若启用)

    bash

    sudo setsebool -P httpd_can_network_connect 1  # 允许Nginx/PHP访问网络(如MySQL)
    sudo chcon -R -t httpd_sys_rw_content_t /usr/share/nginx/html/  # 设置网站目录SELinux上下文
    
  4. 定期更新系统

    bash

    sudo yum update -y  # 每月至少更新一次,修复安全漏洞
    

总结

LNMP 环境搭建的核心步骤为:

  1. 系统基础配置(更新包、安装工具);
  2. MySQL 5.7 安装与安全配置(切换仓库、设置密码);
  3. Nginx 安装与端口开放;
  4. PHP 7.4 安装与 PHP-FPM 优化(Unix Socket 配置);
  5. Nginx 与 PHP-FPM 联动配置(关键解析规则);
  6. 功能测试与安全加固。

通过 Unix Socket 通信、进程池优化等配置,可充分发挥 LNMP 架构的性能优势,满足生产环境的高并发需求。后续部署 Web 应用时,只需将代码放入/usr/share/nginx/html目录,或配置新的server块即可。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值