1. LNMP环境部署概述
作为一个在Linux服务器管理领域摸爬滚打多年的老运维,我深知LNMP环境对于Web开发者的重要性。这套由Linux、Nginx、MySQL和PHP组成的黄金组合,支撑着全球超过40%的网站运行。不同于LAMP架构使用Apache作为Web服务器,LNMP采用Nginx这一高性能的反向代理服务器,在处理高并发请求时表现尤为出色。
记得我第一次搭建LNMP环境时,被各种依赖关系和配置文件搞得焦头烂额。后来经过数十次实践,总结出了一套适合新手的标准化部署流程。本文将分享我在CentOS和Ubuntu两大主流Linux发行版上的实战经验,从系统准备到服务调优,手把手带你避开那些我当年踩过的坑。
2. 环境准备与基础配置
2.1 系统选择与初始化
我推荐使用CentOS 7+或Ubuntu 18.04+作为基础系统,这两个版本都有长期支持且社区资源丰富。以CentOS 7为例,安装完成后首先需要:
# 更新系统 yum update -y # 安装常用工具 yum install -y wget curl vim net-tools重要提示:生产环境务必禁用root远程登录!先创建普通用户并配置sudo权限:
adduser deploy passwd deploy usermod -aG wheel deploy
2.2 防火墙配置
现代Linux系统都默认启用防火墙,需要放行必要端口:
# CentOS 7使用firewalld firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload # Ubuntu使用ufw ufw allow 80/tcp ufw allow 443/tcp ufw enable3. Nginx安装与优化
3.1 多版本安装方案
Nginx官方提供stable和mainline两个版本分支。对于生产环境,我建议使用stable版本:
# CentOS yum install epel-release -y yum install nginx -y # Ubuntu apt install nginx -y如果想使用最新特性,可以从官方源安装mainline版本:
# CentOS cat > /etc/yum.repos.d/nginx.repo <<EOF [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ gpgcheck=0 enabled=1 EOF # Ubuntu apt install curl gnupg2 ca-certificates lsb-release echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list3.2 性能调优关键参数
修改/etc/nginx/nginx.conf中的核心参数:
worker_processes auto; # 自动匹配CPU核心数 worker_connections 1024; # 每个worker最大连接数 keepalive_timeout 65; gzip on; # 启用压缩经验之谈:worker_connections值应根据服务器内存调整,每个连接约消耗10KB内存。8GB内存服务器建议设置为8192。
4. MySQL/MariaDB数据库部署
4.1 版本选择与安装
MySQL 8.0性能提升显著,但兼容性要求高的项目可选择5.7版本。MariaDB作为MySQL分支也是不错的选择:
# CentOS安装MySQL 8.0 yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm yum install mysql-community-server -y # Ubuntu安装MariaDB apt install mariadb-server mariadb-client -y4.2 安全加固
首次安装后必须运行安全脚本:
mysql_secure_installation建议设置:
- 移除匿名用户
- 禁用root远程登录
- 删除测试数据库
- 重载权限表
4.3 性能优化配置
编辑/etc/my.cnf添加:
[mysqld] innodb_buffer_pool_size = 1G # 建议为物理内存的50-70% innodb_log_file_size = 256M max_connections = 200 query_cache_size = 64M5. PHP安装与扩展配置
5.1 多版本PHP管理
不同项目可能需要不同PHP版本,推荐使用Remi源:
# CentOS yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install yum-utils yum-config-manager --enable remi-php74 # 可选7.2/7.3/7.4/8.0 # Ubuntu使用PPA add-apt-repository ppa:ondrej/php apt update apt install php7.4-fpm php7.4-mysql # 可选其他扩展5.2 关键扩展安装
根据项目需求选择扩展:
# 常用扩展 apt install php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip # 性能相关 apt install php7.4-opcache5.3 PHP-FPM优化
调整/etc/php/7.4/fpm/pool.d/www.conf:
pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10计算公式:max_children ≈ 可用内存 / 单个PHP进程内存占用。可通过
ps -ylC php-fpm --sort:rss查看实际占用。
6. 服务集成与测试
6.1 Nginx与PHP-FPM联动
配置Nginx处理PHP请求:
location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }6.2 测试环境
创建测试文件/var/www/html/info.php:
<?php phpinfo(); ?>访问http://服务器IP/info.php应显示PHP信息页面。
7. 常见问题排查
7.1 502 Bad Gateway错误
可能原因及解决方案:
- PHP-FPM未运行 →
systemctl start php-fpm - sock文件权限问题 →
chown nginx:nginx /var/run/php-fpm.sock - Nginx配置错误 → 检查fastcgi_pass路径
7.2 MySQL连接问题
错误:"SQLSTATE[HY000] [2002] Connection refused"
- 检查MySQL是否运行:
systemctl status mysqld - 确认绑定地址:
netstat -tulnp | grep mysql - 检查用户权限:
mysql -u root -p -e "SELECT host,user FROM mysql.user;"
7.3 性能瓶颈分析
使用工具定位问题:
# Nginx访问日志分析 goaccess /var/log/nginx/access.log -a # MySQL慢查询日志 mysqldumpslow /var/log/mysql/mysql-slow.log # PHP进程监控 apt install htop htop -u www-data8. 高级配置技巧
8.1 HTTPS证书配置
使用Let's Encrypt免费证书:
apt install certbot python3-certbot-nginx certbot --nginx -d yourdomain.com自动续期测试:
certbot renew --dry-run8.2 多站点配置
在/etc/nginx/conf.d/创建独立配置文件:
server { listen 80; server_name site1.com; root /var/www/site1; index index.php; # 其他配置... }8.3 备份策略
数据库自动备份脚本示例:
#!/bin/bash mysqldump -u root -pPASSWORD --all-databases | gzip > /backups/mysql_$(date +%Y%m%d).sql.gz find /backups -type f -mtime +30 -delete添加到cron任务:
crontab -e 0 3 * * * /path/to/backup.sh经过这些年的实践验证,这套LNMP部署方案在各类业务场景下都表现稳定。特别是在流量突增的情况下,合理的Nginx和PHP-FPM配置能有效避免服务器崩溃。建议初次部署后使用ab或jmeter进行压力测试,根据实际业务特点调整参数。