一、LNMP架构概述
1.1 什么是LNMP
LNMP是指一组通常组合在一起使用的开源软件的缩写,分别代表:
-
L:Linux操作系统
-
N:Nginx Web服务器
-
M:MySQL/MariaDB数据库
-
P:PHP编程语言
这是目前互联网上非常流行的一种网站服务器架构,特别适用于中小型网站服务。
1.2 LNMP工作原理
LNMP架构中各个组件协同工作的流程如下:
-
请求传递:用户发送HTTP请求,首先到达Nginx
-
请求分发:Nginx作为前端服务器,负责处理静态资源(HTML、图片、CSS等);如果是PHP动态页面请求,Nginx会将请求通过FastCGI协议转发给PHP-FPM处理
-
PHP处理:PHP-FPM接收请求,执行PHP代码,如需数据库交互则连接MySQL
-
数据库交互:MySQL执行SQL查询,将结果返回给PHP
-
响应返回: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通信正常。