ubuntu 22.04 + nginx + php 8.2-fpm + mariadb 10.11 手动安装更可控、资源占用更低、排障更快,适合单项目、中低流量、预算敏感场景;需卸载旧服务、精确安装指定组件、严格匹配socket路径与权限配置。

直接上结论:用 Ubuntu 22.04 + Nginx + PHP 8.2-FPM + MariaDB 10.11 组合,手动安装比一键包更可控、资源占用更低、后续排查问题更快——尤其适合单项目、中低流量、预算敏感的场景。
为什么不用 LNMP 一键包
一键包(如 lnmp.org 的脚本)确实省事,但默认会装一堆你用不上的东西:pure-ftpd、memcached、redis、多个 PHP 版本共存管理器。这些不仅吃内存(额外 200–400 MB),还会增加攻击面和配置冲突风险。比如你只跑一个 WordPress 站,根本不需要 php8.1-fpm 和 php8.3-fpm 同时监听 socket;而一键包常把 fastcgi_pass 写成 127.0.0.1:9000,在高并发下不如 Unix socket 稳定。
手动装的核心优势是「只装你要的」:nginx、mariadb-server、php8.2-fpm 及必需扩展(php8.2-mysql、php8.2-curl、php8.2-gd、php8.2-mbstring),其余全跳过。
Ubuntu 22.04 下最小化安装命令链
执行前先确认系统干净:
- 卸载可能冲突的旧服务:
sudo apt remove apache2* nginx* php* -y && sudo apt autoremove -y - 更新源并升级:
sudo apt update && sudo apt upgrade -y - 装核心组件(注意版本锁定):
sudo apt install nginx mariadb-server php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip -y - 启动并设开机自启:
sudo systemctl enable nginx mariadb php8.2-fpm && sudo systemctl start nginx mariadb php8.2-fpm
关键点:php8.2-fpm 服务名必须带版本号,Ubuntu 22.04 默认不提供无版本别名(如 php-fpm);漏写会导致 systemctl start php-fpm 报错 Unit php-fpm.service not found。
Nginx 配置里最容易翻车的三个地方
很多部署失败卡在 Nginx 不解析 PHP,根源几乎都出在这三处:
-
root路径末尾不能加斜杠:root /var/www/myapp;✅,root /var/www/myapp/;❌(会导致index.php403 或 404) -
fastcgi_pass必须匹配 PHP-FPM 实际 sock 文件路径:Ubuntu 22.04 + php8.2-fpm 默认是unix:/run/php/php8.2-fpm.sock,不是/var/run/php/php8.2-fpm.sock(后者是软链接,但 Nginx 更认真实路径) -
index顺序影响index.php自动触发:index index.php index.html;✅,index index.html index.php;❌(浏览器访问目录时会优先返回index.html,PHP 入口被绕过)
验证是否生效:在网站根目录放 info.php,内容为 <?php phpinfo(); ?>,然后访问 http://你的IP/info.php。如果显示 PHP 信息页,说明解析通了;如果下载文件或 502,就回头检查上面三点。
MySQL 安全初始化必须做这三步
刚装完 mariadb-server,root 密码为空且允许任意主机连接——这是生产环境大忌。必须立刻执行:
- 运行
sudo mysql_secure_installation,按提示设置 root 密码、禁用匿名用户、禁止 root 远程登录、删除 test 数据库 - 创建专用数据库和用户:
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;,再CREATE USER 'myappuser'@'localhost' IDENTIFIED BY '强密码';,最后GRANT ALL ON myapp.* TO 'myappuser'@'localhost'; FLUSH PRIVILEGES; - 确认用户权限范围:
SELECT User, Host FROM mysql.user;中不应出现'root'@'%'这类宽泛条目
漏掉第二步,后续 PHP 连数据库大概率报 Access denied for user 'root'@'localhost' ——因为新版本 MariaDB 默认关闭 root 本地空密码登录,且不推荐直接用 root 连应用。
真正的难点不在安装,而在权限与路径的精确对应:Nginx worker 进程用户(通常是 www-data)必须对网站目录有读取+执行权,PHP-FPM pool 配置里的 user/group 必须和它一致,否则 403 或 502 就悄无声息地来了。这些细节不会报错提示,只能靠 ls -l 和 ps aux | grep php-fpm 对着查。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











