1. 首页 > 技术教程 > 正文

LNMP 黄金环境安装:高性能 Nginx+MySQL+PHP 部署手册

LNMP 黄金环境安装:高性能 Nginx+MySQL+PHP 部署手册

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

LNMP 黄金环境安装:高性能 Nginx+MySQL+PHP 部署手册的图片

基础环境准备:系统更新与依赖安装

更新系统源并安装编译工具

装 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