LNMP环境部署笔记

一、LNMP架构概述

1.1 什么是LNMP

LNMP是指一组通常组合在一起使用的开源软件的缩写,分别代表:

  • L:Linux操作系统

  • N:Nginx Web服务器

  • M:MySQL/MariaDB数据库

  • P:PHP编程语言

这是目前互联网上非常流行的一种网站服务器架构,特别适用于中小型网站服务。

1.2 LNMP工作原理

LNMP架构中各个组件协同工作的流程如下:

  1. 请求传递:用户发送HTTP请求,首先到达Nginx

  2. 请求分发:Nginx作为前端服务器,负责处理静态资源(HTML、图片、CSS等);如果是PHP动态页面请求,Nginx会将请求通过FastCGI协议转发给PHP-FPM处理

  3. PHP处理:PHP-FPM接收请求,执行PHP代码,如需数据库交互则连接MySQL

  4. 数据库交互:MySQL执行SQL查询,将结果返回给PHP

  5. 响应返回:PHP将处理结果返回给Nginx,Nginx组合成完整HTTP响应返回给用户

与LAMP的区别:在LAMP中,PHP是作为Apache的模块运行;而在LNMP中,PHP是一个独立服务(PHP-FPM),Nginx通过FastCGI与PHP-FPM通信。

二、环境准备

2.1 系统要求

  • 操作系统:Linux(本文以Ubuntu 22.04/24.04为例)

  • 硬件建议:内存不低于2 GiB以保证流畅体验

  • 公网IP:确保服务器有公网IP或已绑定弹性IP

2.2 安全组/防火墙配置

在云服务器控制台的安全组中添加入方向规则,允许以下端口:

  • 80端口:HTTP访问

  • 443端口:HTTPS访问(如需)

  • 22端口:SSH连接

2.3 更新系统

bash

复制代码
# Ubuntu/Debian系统
sudo apt update -y && sudo apt upgrade -y

三、安装Nginx

3.1 通过APT安装

bash

复制代码
# 安装Nginx
sudo apt install -y nginx

# 启动Nginx并设置开机自启
sudo systemctl enable --now nginx

# 查看Nginx版本
sudo nginx -v

3.2 验证安装

bash

复制代码
# 本地测试
curl http://127.0.0.1

如果看到Nginx欢迎页面的HTML代码,说明安装成功。

3.3 通过浏览器测试

在浏览器中访问服务器公网IP,应看到Nginx欢迎页面。

四、安装MySQL

4.1 安装MySQL

bash

复制代码
# Ubuntu 20.04及以上版本默认安装MySQL 8.0
sudo apt install -y mysql-server

# 查看MySQL版本
sudo mysql -V

4.2 启动MySQL

bash

复制代码
sudo systemctl enable --now mysql

4.3 MySQL安全配置

运行安全强化脚本,建议按照提示完成以下配置:

bash

复制代码
sudo mysql_secure_installation

配置选项:

  • 设置root密码:建议设置强密码(大小写字母+数字+特殊符号,长度≥12)

  • 移除匿名用户:输入 Y

  • 禁止root远程登录:输入 Y

  • 删除测试数据库:输入 Y

  • 重载权限表:输入 Y

4.4 设置/修改root密码

Ubuntu系统MySQL默认使用auth_socket认证,需手动设置密码:

bash

复制代码
# 首次登录MySQL(无需密码)
sudo mysql -u root

# 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的新密码';
FLUSH PRIVILEGES;
EXIT;

# 之后登录需要使用密码
mysql -u root -p

五、安装PHP

5.1 安装PHP及扩展

bash

复制代码
# 安装PHP-FPM和MySQL扩展
sudo apt install -y php-fpm php-mysql

# 如需更多扩展,可一并安装
sudo apt install -y php-curl php-gd php-mbstring php-xml php-zip

5.2 查看PHP版本

bash

复制代码
php -v

5.3 启动PHP-FPM

bash

复制代码
# 启动PHP-FPM(版本号根据实际安装版本调整)
sudo systemctl enable --now php8.1-fpm

# 查看PHP-FPM状态
sudo systemctl status php8.1-fpm

六、配置Nginx支持PHP

6.1 修改Nginx默认配置文件

bash

复制代码
sudo vim /etc/nginx/sites-available/default

6.2 配置文件内容

将配置文件修改为以下内容:

nginx

复制代码
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    
    # 网站根目录
    root /var/www/html;
    
    # 默认首页文件(将index.php放在最前面)
    index index.php index.html index.htm index.nginx-debian.html;
    
    server_name _;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    # 处理PHP请求
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # 禁止访问.ht文件
    location ~ /\.ht {
        deny all;
    }
}

6.3 重启Nginx

bash

复制代码
# 测试配置语法
sudo nginx -t

# 重启Nginx
sudo systemctl restart nginx

七、测试LNMP环境

7.1 创建PHP测试文件

bash

复制代码
sudo vim /var/www/html/info.php

添加以下内容:

php

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

7.2 通过浏览器测试

在浏览器中访问 http://你的服务器IP/info.php,如果能看到PHP信息页面,说明LNMP环境搭建成功。

7.3 测试数据库连接

创建测试文件:

bash

复制代码
sudo vim /var/www/html/test_db.php

添加以下内容(替换密码为你的MySQL密码):

php

复制代码
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "你的MySQL密码";

$conn = new mysqli($servername, $username, $password);

if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "MySQL连接成功\n";

$conn->close();
?>

访问 http://你的服务器IP/test_db.php,如果显示"MySQL连接成功",说明PHP与MySQL通信正常。

相关推荐
小红卒2 小时前
Go语言安全开发学习笔记5:tls反弹shell升级到C2指令执行马
笔记·学习·网络安全·golang
猹叉叉(学习版)2 小时前
【ASP.NET CORE】 9. 托管服务
数据库·笔记·后端·c#·asp.net·.netcore
做cv的小昊5 小时前
大语言模型系统:【CMU 11-868】课程学习笔记02——GPU编程基础1(GPU Programming Basics 1)
人工智能·笔记·学习·语言模型·llm·transformer·agent
日更嵌入式的打工仔12 小时前
个人笔记3
笔记
天外来鹿13 小时前
Map/Set/WeakMap/WeakSet学习笔记
前端·javascript·笔记·学习
菩提小狗13 小时前
第23天:安全开发-PHP应用&后台模块&Session&Cookie&Toke_笔记|小迪安全2023-2024|web安全|渗透测试|
笔记·安全·php
HuDie34014 小时前
黑马多模态AIGC课程笔记
笔记·aigc
leixj02514 小时前
SVN学习笔记
笔记·学习·svn
小陈phd14 小时前
多模态大模型学习笔记(十三)——transformer学习之位置编码
人工智能·笔记·transformer