全部文档
当前文档

共搜索到 0 条结果

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

CentOS8部署LNMP环境实践教程

最近更新时间:2026-06-16 17:51:51

本教程主要介绍如何在CentOS8系统中部署LNMP环境。

背景信息

本案例围绕中小企业与个人用户的网站部署需求展开,核心解决公有云服务器裸机无法运行网站的问题。通过搭建 LNMP(Linux + Nginx + MySQL + PHP)环境,实现企业官网、个人博客等 Web 应用的快速上线与稳定运行。案例结合实际应用场景,梳理了从环境搭建、配置优化到网站部署的全流程,突出 LNMP 环境免费开源、轻量高效、易操作的优势,为同类用户提供可复制、可落地的实践参考。

方案架构:

约束限制

KEC 实例内存不低于 2 GiB。

准备工作

  1. 云服务器需配置公网 IP 与安全组,确保 KEC 实例可被外部访问。

  2. 在 KEC 实例关联的安全组中添加入方向规则,放行 TCP 协议的 80 端口(用于 HTTP 访问)。具体操作请参见添加安全组规则

  3. 登录KEC控制台,在左侧导航栏选择实例,在页面左侧顶部选择目标资源所在的资源组和地域。

  4. 连接KEC实例,执行如下命令,将系统已有的软件包列表和软件更新到最新版本。

sudo dnf update -y

实践流程

  1. 用户浏览器通过公网向 KEC 实例 80 端口发起 HTTP 请求。

  2. Nginx 作为 Web 服务器负责接收并分发请求。如果是静态资源(如 HTML、CSS、图片),直接读取并返回;如果是 PHP 脚本请求(如 .php 文件),则通过 FastCGI 协议将其转发给 PHP-FPM 处理。

  3. PHP-FPM(FastCGI Process Manager)接收并执行 PHP 代码。如果需要与数据库交互,会连接到 MySQL 数据库。

  4. MySQL 负责存储和管理数据,执行 PHP 脚本发来的 SQL 查询,并将结果返回给 PHP-FPM。

  5. PHP-FPM 将执行结果生成 HTML 内容,返回给 Nginx,最终由 Nginx 发送给用户浏览器。

操作步骤

步骤一:安装并配置 Nginx

  1. 连接KEC实例,添加 Nginx 官方源并安装。

    sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
    [nginx-stable]
    name=nginx stable repo
    baseurl=https://nginx.org/packages/centos/8/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    
    sudo dnf -y install nginx
  2. 启动并设置开机自启。

    enable --now 参数会同时完成启动服务和设置开机自启两个操作。

    sudo systemctl enable --now nginx
  3. 验证 Nginx 服务。

    执行 curl http://127.0.0.1,如果终端输出了 Nginx 的欢迎页 HTML 代码,说明安装成功。

步骤二:安装并加固 MySQL

安装MySQL
  1. 添加 MySQL 8.4 YUM 仓库并安装。

    sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
    sudo dnf install -y mysql-server
  2. 启动并设置开机自启。

    sudo systemctl enable --now mysqld
  3. 获取初始 root 密码。获取的密码用于后续步骤重置密码。

    sudo grep 'temporary password' /var/log/mysqld.log
设置安全加固
  1. 执行 sudo mysql_secure_installation,运行加固脚本,根据提示完成以下配置:

  2. 重置 root 账号密码:使用上一步获取的临时密码登录并设置新密码。

    建议设置包含大小写字母、数字和特殊符号,且长度不低于 12 位的强密码。

  3. 移除匿名用户:输入 Y

  4. 禁止 root 远程登录:输入 Y

  5. 删除测试库:输入 Y

  6. 重载权限表:输入 Y

步骤三:安装并配置 PHP

  1. 添加 PHP 源并安装。

    cat > /etc/yum.repos.d/remi.repo << 'EOF'
    [remi]
    name=Remi\'s RPM Repository for Enterprise Linux 8 - x86_64
    baseurl=https://rpms.remirepo.net/enterprise/8/remi/x86_64/
    enabled=1
    gpgcheck=1
    gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024
    
    [remi-safe]
    name=Remi Safe Repository
    baseurl=https://rpms.remirepo.net/enterprise/8/safe/x86_64/
    enabled=1
    gpgcheck=1
    gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024
    EOF
    
    rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi2024
    dnf install -y php php-fpm php-mysqlnd
  2. 启动并设置 PHP-FPM 开机自启。

    sudo systemctl enable --now php-fpm

步骤四:配置 Nginx 支持 PHP 解析

默认情况下,Nginx 仅能处理静态网页(如 HTML、图片)。为支持动态网站(如 WordPress),需配置 Nginx 将 .php 文件的请求转发至 PHP-FPM 进行处理。否则,访问 PHP 页面时会出现文件被直接下载或无法显示的问题。

  1. 备份 Nginx 配置文件。

    sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
  2. 获取 PHP 服务的通信地址。Nginx 通过该通信地址将 PHP 请求转发至 PHP-FPM 进行处理。

    PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php-fpm.d/www.conf | head -n 1)
    echo "$PHP_FPM_LISTEN"
  3. 配置 Nginx 转发规则。根据上一步的输出结果,将 <PHP通信地址> 替换为实际通信地址后执行。

    若输出为文件路径(如 /run/php-fpm/www.sock):通信方式为 Unix Socket,仅限本地通信,性能更好且更安全。PHP 通信地址格式为 unix:文件路径,例如 unix:/run/php-fpm/www.sock
    若输出为 IP:端口(如 127.0.0.1:9000):通信方式为 TCP,支持跨主机通信,适用于 PHP-FPM 与 Nginx 分离部署的场景,可以直接作为 PHP 通信地址。

    sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
    server {
     listen 80;
     server_name localhost;
     root /usr/share/nginx/html;
    
     index index.php index.html index.htm;
    
     location / {
     try_files $uri $uri/ /index.php?$query_string;
     }
    
     location ~ \.php$ {
     fastcgi_pass <PHP通信地址>;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include fastcgi_params;
     }
    
     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
     root /usr/share/nginx/html;
     }
    }
    EOF
  4. 执行 sudo nginx -t 检查配置文件。

    • 如果返回结果中包含关键字 successful,表示配置正确。

    • 如果返回结果中包含 failed,表示配置错误。请检查命令中的路径是否替换正确,或执行以下命令从备份中恢复:

      sudo mv /etc/nginx/conf.d/default.conf.bak /etc/nginx/conf.d/default.conf
  5. 重启 Nginx 使配置生效。

    sudo systemctl restart nginx

步骤五:验证 LNMP 环境

创建测试文件,验证 Nginx 能否解析 PHP,以及 PHP 能否连接到 MySQL 数据库,确保 LNMP 各组件协同工作正常。

Nginx PHP 解析验证
  1. 创建测试文件,生成包含 phpinfo() 函数的文件,用于输出当前 PHP 环境的详细配置。

    echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/phpinfo.php
  2. 浏览器验证:访问 http://<KEC公网IP>/phpinfo.php

    • 成功标志:页面正常渲染并展示 PHP 环境配置信息。

    • 失败标志:显示 File not found 或直接下载了文件。

  3. 清理测试文件。

    验证成功后必须删除该文件。phpinfo 页面包含敏感信息,暴露于公网会带来安全风险。

    sudo rm -f /usr/share/nginx/html/phpinfo.php
PHP 与 MySQL 连通性验证
  1. 创建数据库和用户。

    • 使用 root 账户登录 MySQL:

      sudo mysql -u root -p
    • mysql> 提示符下执行以下命令,创建名为 webapp 的库和 webuser 用户,并授予其对该数据库的所有权限:

      请将 <YourPassword> 替换为一个强密码。

      CREATE DATABASE webapp;
      CREATE USER 'webuser'@'localhost' IDENTIFIED BY '<YourPassword>';
      GRANT ALL PRIVILEGES ON webapp.* TO 'webuser'@'localhost';
      FLUSH PRIVILEGES;
      EXIT;
  2. 创建数据库连接测试文件。将 <YourPassword> 替换为上一步设置的用户密码后执行:

    sudo tee /usr/share/nginx/html/test.php <<-'EOF'
    <?php
    $servername = "localhost";
    $username = "webuser";
    $password = "<YourPassword>";
    $dbname = "webapp";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
     die("数据库连接失败: " . $conn->connect_error);
    }
    echo "数据库连接成功!";
    ?>
    EOF
    • 浏览器验证:访问 http://<KEC公网IP>/test.php。当页面显示 数据库连接成功! 表示测试通过。

    • 清理测试文件:该脚本内包含明文的数据库账号密码,测试通过后必须立即删除,防止凭据泄露。

      sudo rm -f /usr/share/nginx/html/test.php

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈