1. LNMP环境搭建概述
在Linux服务器上搭建LNMP(Linux+Nginx+MySQL+PHP)环境是Web开发者的必备技能。这套组合以其高性能、低资源消耗的特点,成为中小型网站的首选方案。我曾在多个生产环境中部署过LNMP,实测Nginx的并发处理能力比传统Apache高出3-5倍,特别是在处理静态资源时优势更为明显。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与系统配置
2.1 操作系统选择与优化
推荐使用CentOS 7/8或Ubuntu 20.04 LTS作为基础系统。我习惯使用CentOS,因为其稳定性经过长期验证。安装完成后需要做以下基础配置:
- 更新系统:
yum update -y(CentOS)或apt update && apt upgrade -y(Ubuntu) - 关闭SELinux:编辑
/etc/selinux/config,设置SELINUX=disabled - 配置防火墙:开放80、443端口
bash复制
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload
注意:生产环境建议保留SELinux,但需要额外配置策略规则,新手可以先禁用简化配置过程。
2.2 软件源配置
为获取最新稳定版软件,建议添加EPEL和Remi源(CentOS):
bash复制yum install epel-release -y
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
对于Ubuntu系统,可以使用以下PPA源:
bash复制add-apt-repository ppa:ondrej/php
apt update
3. Nginx安装与配置
3.1 安装Nginx
CentOS系统:
bash复制yum install nginx -y
systemctl start nginx
systemctl enable nginx
Ubuntu系统:
bash复制apt install nginx -y
systemctl start nginx
systemctl enable nginx
安装完成后访问服务器IP,应该能看到Nginx欢迎页面。
3.2 基础配置优化
编辑/etc/nginx/nginx.conf,建议修改以下参数:
nginx复制worker_processes auto; # 自动匹配CPU核心数
worker_connections 1024; # 每个worker进程最大连接数
keepalive_timeout 65;
gzip on; # 开启压缩
创建虚拟主机配置:
bash复制vim /etc/nginx/conf.d/example.com.conf
内容示例:
nginx复制server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
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;
}
}
测试配置并重载:
bash复制nginx -t
systemctl reload nginx
4. MySQL数据库安装
4.1 安装MySQL 8.0
CentOS系统:
bash复制yum install mysql-server -y
systemctl start mysqld
systemctl enable mysqld
Ubuntu系统:
bash复制apt install mysql-server -y
systemctl start mysql
systemctl enable mysql
4.2 安全配置
运行安全脚本:
bash复制mysql_secure_installation
建议设置:
- 设置root密码
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 立即生效权限表
4.3 性能优化
编辑/etc/my.cnf(或/etc/mysql/my.cnf),添加:
ini复制[mysqld]
innodb_buffer_pool_size = 1G # 根据内存调整,建议分配50-70%内存
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
重启MySQL使配置生效:
bash复制systemctl restart mysqld
5. PHP安装与配置
5.1 安装PHP 8.2
CentOS系统:
bash复制yum install php82 php82-php-fpm php82-php-mysqlnd php82-php-opcache php82-php-gd -y
Ubuntu系统:
bash复制apt install php8.2-fpm php8.2-mysql php8.2-gd php8.2-mbstring -y
5.2 配置PHP-FPM
编辑/etc/php-fpm.d/www.conf(路径可能因版本不同):
ini复制user = nginx
group = nginx
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
启动PHP-FPM:
bash复制systemctl start php-fpm
systemctl enable php-fpm
5.3 性能优化
编辑/etc/php.ini:
ini复制opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
6. 环境验证与测试
6.1 创建测试文件
在网站根目录创建info.php:
bash复制echo "<?php phpinfo(); ?>" > /var/www/html/info.php
访问http://服务器IP/info.php,应该能看到PHP信息页面,检查是否包含MySQL和Nginx相关信息。
6.2 数据库连接测试
创建测试脚本db_test.php:
php复制<?php
$conn = new mysqli('localhost', 'root', '你的密码');
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "MySQL连接成功";
?>
7. 常见问题排查
7.1 502 Bad Gateway错误
可能原因:
- PHP-FPM未运行:
systemctl status php-fpm - Nginx与PHP-FPM通信问题:检查
fastcgi_pass配置 - SELinux限制:
setsebool -P httpd_can_network_connect 1
7.2 MySQL连接问题
错误排查步骤:
- 检查MySQL服务状态:
systemctl status mysqld - 验证用户权限:
mysql -u root -p后执行SELECT Host,User FROM mysql.user; - 检查防火墙设置
7.3 性能调优建议
- Nginx:启用HTTP/2,调整worker_processes和worker_connections
- MySQL:优化innodb_buffer_pool_size,启用慢查询日志
- PHP:调整opcache设置,使用最新稳定版
8. 安全加固措施
- 定期更新软件:
yum update或apt upgrade - 配置Nginx防止DDoS:
nginx复制limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; - MySQL安全:
- 定期备份
- 使用专用用户而非root
- 启用SSL连接
9. 进阶配置
9.1 HTTPS配置
使用Let's Encrypt免费证书:
bash复制yum install certbot python3-certbot-nginx -y
certbot --nginx -d example.com
自动续期测试:
bash复制certbot renew --dry-run
9.2 多PHP版本共存
通过Remi源安装多个PHP版本:
bash复制yum install php74 php74-php-fpm -y
配置Nginx使用特定版本:
nginx复制fastcgi_pass 127.0.0.1:9074; # PHP7.4监听端口
9.3 数据库主从复制
主库配置:
ini复制[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
从库配置:
ini复制[mysqld]
server-id=2
relay-log=mysql-relay-bin
read-only=1
10. 维护与监控
-
日志分析:
- Nginx访问日志:
/var/log/nginx/access.log - PHP错误日志:
/var/log/php-fpm/error.log
- Nginx访问日志:
-
监控工具推荐:
- htop:实时监控系统资源
- nginx-status:Nginx状态监控
- mysqltuner.pl:MySQL优化建议
-
备份策略:
bash复制# 数据库备份 mysqldump -u root -p --all-databases > backup.sql # 网站文件备份 tar -czvf web_backup.tar.gz /var/www/html
在实际运维中,我发现定期检查Nginx错误日志能提前发现很多潜在问题。建议每周至少检查一次日志文件,特别是当网站流量出现异常波动时。对于MySQL,使用pt-query-digest分析慢查询日志可以显著提升数据库性能。
