RockyLinux搭建LNMP
在 Rocky Linux 上手动编译 PHP 环境,核心是先把 Nginx 和 MySQL 装好,再用源码编译 PHP 并让 Nginx 通过 FastCGI 调用它。
本文按零基础可照做的顺序,覆盖依赖安装、编译参数、Nginx 与 PHP 联动、数据库初始化和效果验证,完成后你能得到一个可运行 PHP 页面的 LNMP 环境。
先装编译依赖和 Nginx、MySQL
Rocky Linux 默认软件源里没有 PHP 8 的完整开发包,手动编译前先把编译工具和 Nginx、MySQL 装好。
# 更新系统并安装编译依赖
sudo dnf update -y
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y wget vim epel-release
sudo dnf install -y nginx mariadb-server mariadb
# 安装 PHP 编译所需依赖
sudo dnf install -y libxml2-devel openssl-devel bzip2-devel \
libcurl-devel libjpeg-turbo-devel libpng-devel freetype-devel \
gmp-devel readline-devel libxslt-devel sqlite-devel oniguruma-devel
启动 Nginx 和 MariaDB,并设置开机自启:
sudo systemctl enable --now nginx
sudo systemctl enable --now mariadb
验证服务状态,看到 active (running) 即表示正常:
systemctl status nginx --no-pager
systemctl status mariadb --no-pager
注意:
Rocky Linux 9 默认仓库中 PHP 相关依赖版本可能与旧版不同,
如果 dnf install 提示找不到某个包,
先执行 dnf search 包名 确认实际包名,
不要直接跳过。
下载 PHP 源码并配置编译参数
到 PHP 官方下载页获取稳定版源码包。
本文以 PHP 8.1 系列为例,实际版本号请以官网当前稳定版为准。
cd /usr/local/src
sudo wget https://www.php.net/distributions/php-8.1.27.tar.gz
sudo tar -zxvf php-8.1.27.tar.gz
cd php-8.1.27
配置编译参数。
这里把 PHP 安装到 /usr/local/php,并启用 FPM 和 MySQL 支持:
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx \
--with-mysqli --with-pdo-mysql --with-openssl \
--with-curl --with-zlib --with-gd --with-jpeg \
--with-freetype --enable-mbstring --enable-xml \
--with-libxml --enable-sockets --enable-opcache
配置完成后编译并安装:
make -j$(nproc)
sudo make install
编译时间取决于服务器 CPU 核心数,
通常 10 到 30 分钟。make 报错时优先看第一条 error,
常见原因是缺少某个 -devel 包,
补装后重新执行 ./configure 和 make。
配置 PHP-FPM 与 Nginx 联动
安装完成后复制配置文件和启动脚本:
sudo cp php.ini-production /usr/local/php/etc/php.ini
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
sudo cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.service
创建运行用户并启动 PHP-FPM:
sudo systemctl daemon-reload
sudo systemctl enable --now php-fpm
systemctl status php-fpm --no-pager
确认 PHP-FPM 监听端口,默认是 127.0.0.1:9000:
ss -tlnp | grep 9000
修改 Nginx 站点配置,让 .php 请求交给 PHP-FPM 处理。
编辑 /etc/nginx/nginx.conf 或新建 /etc/nginx/conf.d/default.conf:
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
检查配置并重载:
sudo nginx -t
sudo systemctl reload nginx
nginx -t 返回 syntax is ok 和 test is successful 才算通过,否则按报错行号修改。
初始化数据库并验证运行结果
MariaDB 首次使用需要执行安全初始化:
sudo mysql_secure_installation
按提示设置 root 密码、移除匿名用户、禁止 root 远程登录。
然后登录数据库建一个测试库:
sudo mysql -u root -p
CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4;
EXIT;
在网站根目录创建 PHP 测试文件:
sudo tee /usr/share/nginx/html/info.php <<'EOF'
浏览器访问 http:,
//服务器IP/info.php
能看到 PHP 版本和模块信息页面,
说明 Nginx 已正确调用 PHP-FPM。验证完成后建议删除该文件,
避免暴露环境信息:
sudo rm -f /usr/share/nginx/html/info.php
再写一个连接数据库的测试脚本,确认 PHP 能连上 MariaDB:
sudo tee /usr/share/nginx/html/db.php <<'EOF'
connect_error) {
die('连接失败: ' . $conn->connect_error);
}
echo '数据库连接成功';
EOF
访问该页面显示“数据库连接成功”,说明 LNMP 各组件已打通。
常见报错与避坑提醒
手动编译 PHP 环境最容易卡在依赖和权限上,下面几个问题出现频率较高。
configure: error: Package requirements ... were not met:说明缺少对应开发库,按提示补装xxx-devel后重新运行./configure。- Nginx 访问 PHP 返回 502 Bad Gateway:多半是 PHP-FPM 没启动或端口不一致。用
ss -tlnp | grep 9000确认监听,再检查 Nginx 里fastcgi_pass地址是否一致。 - PHP-FPM 启动失败提示权限不足:确认
www.conf中的user和group与系统实际用户一致,Rocky Linux 上 Nginx 默认用户是nginx。 make过程中内存不足被 kill:编译 PHP 比较吃内存,小内存机器可先加 swap,或去掉-j$(nproc)改用单线程make。- 修改
php.ini后不生效:改完需要重启 PHP-FPM,执行sudo systemctl restart php-fpm,而不是只重载 Nginx。
不要用 root 用户直接运行 PHP-FPM,www.conf 里保持 nginx 用户和组,这是基本安全底线。
几个新手常问的问题
如果只想快速上线,不追求特定 PHP 版本,用 dnf install php php-fpm php-mysqlnd 装仓库版本更省事;
手动编译适合需要指定版本、自定义扩展或学习编译流程的场景。
每次修改 php.ini、www.conf 或 Nginx 配置后,都要重启或重载对应服务,否则改动不会生效。
建议顺序是改 PHP 配置重启 php-fpm,改 Nginx 配置先 nginx -t 再 reload。
LNMP 环境搭好后,
后续新增站点只需在 /etc/nginx/conf.d/ 下新建 .conf 文件,
把 root 指向新目录,
并确保该目录对 nginx 用户可读,
然后 nginx -t && systemctl reload nginx 即可。
整体流程可以概括为:依赖装全、编译参数按需启用、PHP-FPM 与 Nginx 端口对齐、数据库连通性单独验证。
按本文步骤完整执行后,再根据自己的项目扩展 PHP 模块或调整 Nginx 配置,遇到异常优先回看报错信息和高频问题部分。