当前位置: 首页 > news >正文

CentOS 7.9手动搭建LNMP环境全攻略

1. 项目概述

在CentOS系统上搭建LNMP(Linux+Nginx+MySQL+PHP)环境是Web开发者和运维人员的常见需求。相比一键安装脚本,通过yum手动安装能更好地控制组件版本和配置细节,特别适合需要定制化环境的生产场景。

我最近在CentOS 7.9上为电商项目搭建LNMP环境时,发现网上教程要么过于简单要么版本老旧。经过多次实践,总结出一套稳定可靠的安装方案,重点解决三个核心问题:

  1. 如何通过官方源安装最新稳定版组件
  2. Nginx与PHP-FPM的高效协作配置
  3. MySQL的安全加固措施

提示:建议使用至少2GB内存的服务器,避免因资源不足导致安装失败或性能问题。

2. 环境准备与系统配置

2.1 系统更新与基础配置

首先通过SSH连接服务器,执行系统更新确保所有软件包为最新版本:

sudo yum update -y sudo yum install -y epel-release # 安装EPEL扩展源

设置时区并同步时间:

sudo timedatectl set-timezone Asia/Shanghai sudo yum install -y chrony sudo systemctl enable --now chronyd

2.2 防火墙与SELinux配置

放行必要端口并设置防火墙规则:

sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload

对于SELinux,建议保持启用但调整策略:

sudo setsebool -P httpd_can_network_connect 1 sudo semanage port -a -t http_port_t -p tcp 9000 # 为PHP-FPM放行端口

3. 组件安装与配置

3.1 Nginx安装与优化

添加Nginx官方源并安装:

sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/centos/7/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key EOF sudo yum install -y nginx

关键配置调整(/etc/nginx/nginx.conf):

worker_processes auto; # 自动匹配CPU核心数 worker_connections 1024; keepalive_timeout 65; gzip on; # 启用压缩

启动服务并测试:

sudo systemctl enable --now nginx curl -I 127.0.0.1 # 应返回HTTP 200

3.2 MySQL 8.0安全部署

添加MySQL官方源并安装:

sudo rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm sudo yum install -y mysql-community-server

安全加固步骤:

  1. 获取临时密码:sudo grep 'temporary password' /var/log/mysqld.log
  2. 运行安全脚本:sudo mysql_secure_installation
  3. 创建应用专用用户:
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'Complex@Password123'; GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost'; FLUSH PRIVILEGES;

性能优化建议(/etc/my.cnf):

[mysqld] innodb_buffer_pool_size = 1G # 建议为内存的50-70% innodb_log_file_size = 256M max_connections = 200

3.3 PHP 7.4/8.0安装与调优

通过Remi源安装指定版本PHP:

sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm sudo yum-config-manager --enable remi-php80 # 或remi-php74 sudo yum install -y php php-fpm php-mysqlnd php-opcache

关键配置(/etc/php-fpm.d/www.conf):

listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10

OPcache优化(/etc/php.d/10-opcache.ini):

opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60

4. 服务集成与测试

4.1 Nginx与PHP-FPM集成

创建专用站点配置(/etc/nginx/conf.d/php-site.conf):

server { listen 80; server_name example.com; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }

测试配置并重载:

sudo nginx -t sudo systemctl reload nginx sudo systemctl restart php-fpm

4.2 环境验证

创建测试脚本/var/www/html/info.php:

<?php phpinfo(); $conn = new mysqli('localhost', 'app_user', 'Complex@Password123'); if ($conn->connect_error) { die("MySQL连接失败: " . $conn->connect_error); } echo "LNMP环境验证通过!"; ?>

访问测试后务必删除:

sudo rm -f /var/www/html/info.php

5. 常见问题排查

5.1 502 Bad Gateway错误

可能原因及解决方案:

  1. PHP-FPM未运行:sudo systemctl status php-fpm
  2. Socket权限问题:
    sudo chown nginx:nginx /var/run/php-fpm/php-fpm.sock sudo chmod 660 /var/run/php-fpm/php-fpm.sock
  3. SELinux限制:
    sudo audit2allow -a # 查看拒绝日志 sudo setsebool -P httpd_execmem 1

5.2 MySQL连接问题

典型错误排查:

# 检查服务状态 sudo systemctl status mysqld # 测试本地连接 mysql -u app_user -p # 检查错误日志 sudo tail -50 /var/log/mysqld.log

5.3 性能优化建议

Nginx工作进程调整:

worker_processes 4; # 匹配CPU核心数 worker_rlimit_nofile 65535;

PHP-FPM进程管理优化(高流量场景):

pm = static pm.max_children = 100 # 根据内存调整:(总内存 - 系统占用) / 单个进程内存

6. 进阶配置与维护

6.1 日志管理配置

Nginx日志切割(/etc/logrotate.d/nginx):

/var/log/nginx/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }

PHP-FPM慢日志记录(/etc/php-fpm.d/www.conf):

slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 5s

6.2 安全加固措施

关键安全配置:

  1. 禁用危险PHP函数:
    disable_functions = exec,passthru,shell_exec,system,proc_open,popen
  2. 限制PHP访问目录:
    open_basedir = /var/www/html:/tmp
  3. Nginx防注入规则:
    location ~* \.(php|asp|aspx|jsp)$ { deny all; }

6.3 备份与恢复方案

MySQL定时备份脚本(/usr/local/bin/mysql_backup.sh):

#!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR="/backup/mysql" mkdir -p $BACKUP_DIR mysqldump -u root -pYourPassword --all-databases | gzip > "$BACKUP_DIR/full_$DATE.sql.gz" find $BACKUP_DIR -type f -mtime +30 -delete

设置定时任务:

sudo chmod +x /usr/local/bin/mysql_backup.sh (crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/mysql_backup.sh") | crontab -

这套方案已在多个生产环境稳定运行,关键点在于:使用官方源保证组件兼容性,精细化的服务配置确保性能,严格的安全设置防范风险。对于需要多版本PHP的场景,可以通过Remi源灵活切换PHP版本。

http://www.jsqmd.com/news/1239445/

相关文章:

  • Qt C++实现MODBUS TCP从站:工业数据采集实战指南
  • 西蓝花矮砧密植:水肥一体化系统铺设全指南,你值得收藏
  • Edge浏览器高效插件精选与配置指南
  • 可交换性在统计证据聚合中的应用与实操指南
  • 江诗丹顿广州**售后服务中心2026年7月最新网点地址与客服热线全解析 - 江诗丹顿官方服务中心
  • OpenClaw与飞书集成:低代码自动化实践指南
  • Transformer架构演进与工程实践解析
  • 苏州万国回收价格查询与各大平台实测**2026年7月最新数据) - 诚收名表回收平台
  • Unity蓝牙开发终极指南:从协议选型到跨平台实战避坑
  • 2026年7月百达翡丽厦门**网点地址更新:客户服务与售后热线全公开 - 百达翡丽服务中心
  • 多层感知器(MLP)原理与PyTorch实践指南
  • 分布式:数据复制
  • 百达翡丽**服务项目及价格查询|全部地址与客服热线**信息通告(2026年7月最新) - 百达翡丽官方售后中心
  • 智能座舱与AI终端模式切换:精密滑动开关选型与验证
  • C# WinForm高频数据可视化:ScottPlot 5实时绘图性能优化实战
  • “编程第三时代“,测试人该怎么接招
  • 国际计费系统Sharding-Proxy迁移实践与优化
  • 网易MuMu模拟器ARM版性能优化与安装指南
  • PyTorch 迁移学习实战:ResNet18 实现 20 类食物图像分类(完整可运行代码)
  • C++单元测试集成Valgrind:自动化内存泄漏检测实战指南
  • 浪琴中国**售后服务中心|最新网点地址及电话**信息通知(2026年7月最新) - 浪琴服务中心
  • 2026甄选:重庆到营口物流品牌的专业能力与技术变革 - 甄选服务推荐
  • 亲身探访上海江诗丹顿**售后服务中心|最新电话和**维修地址(2026年7月最新) - 江诗丹顿服务中心
  • 7月上海WAIC具身智能展馆:机器人场景增多,技术应用现新趋势,“卖铲人”先寻商机!
  • (81页PPT)DELL企业数据架构数据治理顶层规划方案(附下载方式)
  • 亲身到店探访苏州亨得利**名表服务中心|电话和完整地址(2026年7月更新) - 亨得利官方
  • C++实现D* Lite动态路径规划算法与MATLAB接口封装实战
  • 【限时公开】头部短视频团队内部字幕特效工作流:3分钟生成电影级AI字幕动效(含私有模型权重配置)
  • MuMu模拟器多开性能优化全攻略
  • Ubuntu系统安装与配置JDK17的完整指南