CentOS 7/8手动搭建LNMP环境全指南 1. 项目概述在CentOS系统上搭建LNMPLinuxNginxMySQLPHP环境是Web开发者和运维人员的常见需求。不同于一键安装包通过yum包管理器手动搭建能提供更高的灵活性和可控性特别适合需要定制化配置的生产环境。本文将详细演示在CentOS 7/8系统上使用官方yum源和第三方Remi源构建稳定可靠的LNMP环境。注意本文以CentOS 7为例但会同步说明CentOS 8的差异点。建议服务器内存不低于2GB且已完成系统更新sudo yum update -y。2. 环境准备与依赖检查2.1 系统基础配置首先确认系统版本和架构cat /etc/redhat-release # 查看CentOS版本 uname -m # 确认是x86_64还是arm架构对于国内服务器建议先配置阿里云或清华大学的yum镜像源加速下载# CentOS 7更换阿里源 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo sudo yum makecache2.2 防火墙与SELinux设置LNMP环境需要开放80端口HTTP和3306端口MySQL可选sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps sudo firewall-cmd --reload如果遇到Nginx与PHP-FPM通信问题可能需要调整SELinux策略sudo setsebool -P httpd_can_network_connect 1 # 临时方案 # 或考虑设置为permissive模式 sudo setenforce 03. 组件安装与配置3.1 Nginx安装对于生产环境建议使用Nginx官方源而非EPEL源以获得最新稳定版# CentOS 7添加Nginx官方源 sudo tee /etc/yum.repos.d/nginx.repo -EOF [nginx-stable] namenginx stable repo baseurlhttps://nginx.org/packages/centos/7/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key EOF sudo yum install -y nginx sudo systemctl enable --now nginx验证安装curl -I 127.0.0.1 # 应返回HTTP 200响应3.2 MySQL安装MySQL 8.0是目前推荐版本相比5.7有显著的性能提升sudo rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm sudo yum install -y mysql-community-server # 启动服务 sudo systemctl enable --now mysqld安全初始化重要# 获取临时密码 sudo grep temporary password /var/log/mysqld.log # 运行安全脚本 sudo mysql_secure_installation实操技巧MySQL 8.0默认使用caching_sha2_password认证插件如果遇到客户端兼容性问题可以改用mysql_native_passwordALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密码;3.3 PHP安装通过Remi源安装指定版本的PHP以PHP 7.4为例sudo yum install -y epel-release sudo rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm # 启用特定版本仓库 sudo yum-config-manager --enable remi-php74 sudo yum install -y php php-fpm php-mysqlnd php-opcache php-gd php-mbstring关键配置调整# 修改php-fpm用户为nginx/etc/php-fpm.d/www.conf user nginx group nginx # 优化进程管理根据内存调整 pm dynamic pm.max_children 50 pm.start_servers 5 pm.min_spare_servers 2 pm.max_spare_servers 84. 服务集成与测试4.1 Nginx与PHP-FPM集成编辑Nginx默认站点配置/etc/nginx/conf.d/default.confserver { listen 80; server_name _; root /usr/share/nginx/html; location / { index index.php index.html index.htm; try_files $uri $uri/ 404; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }验证配置并重启服务sudo nginx -t sudo systemctl restart nginx php-fpm4.2 环境验证创建测试文件echo ?php phpinfo(); ? | sudo tee /usr/share/nginx/html/info.php访问 http://服务器IP/info.php 应显示PHP信息页面。测试完成后务必删除该文件sudo rm -f /usr/share/nginx/html/info.php数据库连接测试?php $conn new mysqli(localhost, test_user, password, test_db); if ($conn-connect_error) { die(连接失败: . $conn-connect_error); } echo MySQL连接成功; ?5. 性能调优与安全加固5.1 Nginx优化建议调整worker进程数/etc/nginx/nginx.confworker_processes auto; # 通常设置为CPU核心数 worker_connections 1024; keepalive_timeout 65; gzip on;5.2 PHP-FPM调优根据服务器内存调整进程池设置/etc/php-fpm.d/www.confpm.max_children (总内存MB - 系统预留) / 单个进程内存占用 ; 估算单个进程内存 ; php -r echo memory_get_usage()/1024/1024 . MB\n;5.3 MySQL安全建议禁用LOCAL INFILE功能[mysqld] local-infile0启用查询日志审计[mysqld] log-error/var/log/mysqld.log general_log_file/var/log/mysql-query.log general_log16. 常见问题排查6.1 502 Bad Gateway错误可能原因及解决方案PHP-FPM未运行sudo systemctl status php-fpmSocket权限问题sudo chown nginx:nginx /var/run/php-fpm/php-fpm.sockSELinux限制sudo audit2allow -a查看拒绝日志6.2 MySQL连接问题典型错误caching_sha2_password无法加载 解决方案ALTER USER 用户名主机 IDENTIFIED WITH mysql_native_password BY 密码;6.3 性能瓶颈定位使用工具诊断top -c # 查看CPU/内存占用 mysqladmin proc # 查看MySQL进程 nginx -T # 查看完整Nginx配置我在实际部署中发现CentOS 7默认的PHP 5.4已严重过时而通过Remi源可以无缝升级到PHP 7.x或8.x版本。关键是要确保所有扩展如mysqlnd、opcache与主版本兼容。对于生产环境建议将Nginx和PHP-FPM的error_log设置为notice级别便于监控系统异常。