LNMP 黄金环境安装:高性能 Nginx+MySQL+PHP 部署手册
跑个 WordPress 或者 Laravel 项目,LNMP 组合是绕不开的。别问为什么非要用这个组合,生产环境里 Nginx 处理静态资源、MySQL 存数据、PHP 跑逻辑,各司其职,稳定性和性能都比 Apache+PHP 那套老搭配强太多。主机选这篇 Linux 教程直接带你实操,从零开始装一套能扛压力的 LNMP 黄金环境。

基础环境准备:系统更新与依赖安装
更新系统源并安装编译工具
装 LNMP 之前,先把系统基础打好。CentOS 7/8 或者 Ubuntu 22.04 都行,但别用太老的版本,否则 PHP 7.4 以上版本都装不上去。
CentOS/RHEL 系列
yum update -y
yum install -y gcc gcc-c++ make automake autoconf wget curl tar
Ubuntu/Debian 系列
apt update -y
apt install -y build-essential libssl-dev wget curl tar
关闭防火墙和 SELinux(开发环境)
生产环境按需配置,但本地测试或初期调试时,先关掉这些拦路虎。
临时关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭 SELinux
setenforce 0
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
Nginx 编译安装与性能调优
下载源码并编译
Nginx 稳定版本目前是 1.24.x,别用主线版,坑多。编译时加上 `–with-http_ssl_module` 和 `–with-http_gzip_static_module` 两个核心模块。
下载 Nginx 1.24.0
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
配置编译参数
./configure –prefix=/usr/local/nginx \
–with-http_ssl_module \
–with-http_gzip_static_module \
–with-http_stub_status_module
编译并安装
make -j$(nproc) && make install
优化 Nginx 工作进程
编辑 `/usr/local/nginx/conf/nginx.conf`,把 `worker_processes` 改成 CPU 核心数,`worker_connections` 改成 1024 以上。
查看 CPU 核心数
grep -c processor /proc/cpuinfo
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
在 events 块前添加
worker_processes 4; # 改成你的核心数
events {
worker_connections 2048;
}
**老鸟叮嘱**:`worker_connections` 别超过系统最大文件打开数,用 `ulimit -n` 查看当前值,如果小于 65535,先执行 `ulimit -n 65535` 再启动 Nginx。
MySQL 8.0 安装与安全加固
使用通用二进制包安装
别用 yum 装 MySQL,版本旧、路径乱。直接下载官方二进制包,干净利落。
下载 MySQL 8.0.35
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
mv /usr/local/mysql-8.0.35-linux-glibc2.12-x86_64 /usr/local/mysql
创建 MySQL 用户
useradd -r -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql
初始化数据库
初始化 MySQL 数据目录
/usr/local/mysql/bin/mysqld –initialize –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data
记下最后输出的临时 root 密码,比如:A temporary password is generated for root@localhost: xxxxxxxx
启动 MySQL
/usr/local/mysql/bin/mysqld_safe –user=mysql &
安全配置
连上 MySQL 后,立刻改密码、删匿名用户、禁止 root 远程登录。
登录 MySQL
/usr/local/mysql/bin/mysql -uroot -p
输入刚才的临时密码
执行安全脚本
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘YourNewStrongPassword123!’;
DELETE FROM mysql.user WHERE User=”;
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;
exit
PHP 8.2 安装与扩展配置
编译 PHP 并集成 Nginx
PHP 8.2 性能比 7.4 提升 20% 以上,建议直接上。编译时带上 `–enable-fpm` 才能和 Nginx 配合。
下载 PHP 8.2.12
wget https://www.php.net/distributions/php-8.2.12.tar.gz
tar -zxvf php-8.2.12.tar.gz
cd php-8.2.12
配置编译参数
./configure –prefix=/usr/local/php \
–with-config-file-path=/usr/local/php/etc \
–enable-fpm \
–with-mysqli \
–with-pdo-mysql \
–with-openssl \
–with-zlib \
–enable-mbstring \
–enable-gd
编译安装
make -j$(nproc) && make install
配置 PHP-FPM
复制配置文件
cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
修改 PHP-FPM 用户
vim /usr/local/php/etc/php-fpm.d/www.conf
将 user 和 group 改为 nginx(如果 Nginx 用户是 nginx)
user = nginx
group = nginx
启动 PHP-FPM
/usr/local/php/sbin/php-fpm
验证 PHP 和 Nginx 协同
创建测试文件 `/usr/local/nginx/html/info.php`,内容如下:
php
<?php
phpinfo();
然后访问 `http://你的服务器IP/info.php`,看到 PHP 信息页面就说明 LNMP 黄金环境安装成功了。
**老鸟叮嘱**:生产环境一定要删掉 `info.php`,否则服务器信息会暴露给攻击者。
常见排障与性能检查
Nginx 503 错误处理
如果访问时返回 503,通常是 PHP-FPM 没启动或 socket 路径不对。检查 `/usr/local/php/etc/php-fpm.d/www.conf` 中的 `listen` 配置,默认是 Unix Socket 还是 TCP 端口。
检查 PHP-FPM 是否运行
ps aux | grep php-fpm
查看日志
tail -f /usr/local/php/var/log/php-fpm.log
MySQL 连接超时
WordPress 报“数据库连接错误”,先看 MySQL 是否在监听,默认端口 3306。
检查 MySQL 端口
netstat -tlnp | grep 3306
如果没监听,检查 MySQL 配置文件 /etc/my.cnf 中的 bind-address
改为 0.0.0.0 允许远程连接(谨慎使用)
FAQ
LNMP 环境安装后网站访问很慢怎么办?
先排查 PHP-FPM 进程数,`ps aux | grep php-fpm | wc -l`,如果太少(比如不到 5),修改 `pm.max_children` 为 20 以上。另外检查 Nginx 是否开启了 gzip 压缩。
Nginx 和 Apache 哪个更适合生产环境?
Nginx 处理高并发静态资源比 Apache 强很多,内存占用也低。如果跑动态 PHP 应用,Nginx+PHP-FPM 是主流,Apache 的 mod_php 模式已经过时。
MySQL 8.0 的 root 密码忘记怎么重置?
停止 MySQL 服务,用 `–skip-grant-tables` 启动,再用 `UPDATE mysql.user SET authentication_string=” WHERE User=’root’;` 清空密码,然后正常重启并设置新密码。
编译 PHP 时报错“configure: error: mcrypt not found”怎么办?
mcrypt 扩展在 PHP 7.2 以后被移除,建议用 `openssl` 或 `sodium` 替代。如果非要装,需要先安装 `libmcrypt-devel`,但不推荐。
如何快速检查 LNMP 各组件版本?
执行 `nginx -v`、`mysql –version`、`php -v` 就能看到。如果命令找不到,确认环境变量里是否加了路径。
LNMP 环境安装后需要开启 BBR 吗?
可以开,但 BBR 主要优化网络延迟,对数据库查询和 PHP 执行速度没直接影响。如果 VPS 网络丢包严重,BBR 会有改善。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9430.html 商家投稿邮箱:zhujixuanblog@qq.com
