在 CentOS Stream 上搭建 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)或 LAMP(Apache + MySQL/MariaDB + PHP)环境时,除了常规的组件安装步骤外,还需特别关注该发行版的滚动更新特性、包管理策略以及安全基线。以下是关键注意事项:
🔹 一、CentOS Stream 的特殊性
- 非传统稳定版:CentOS Stream 是 RHEL 的“上游”滚动测试平台,不承诺长期稳定性(无 LTS),适合开发/测试环境,不建议用于生产核心业务系统。
- 软件版本较新:Nginx、PHP、MySQL 等组件版本通常比 CentOS 7/8 EOL 后的替代方案(如 Rocky/AlmaLinux)更新,需验证兼容性。
- 频繁更新风险:
dnf update可能引入破坏性变更(如 PHP 8.2 → 8.3 升级导致代码不兼容),建议:- 在生产前充分测试;
- 使用
dnf history和systemd快照(配合snapper)做回滚准备; - 考虑锁定关键包版本(见下文)。
🔹 二、LNMP vs LAMP 选型建议
| 维度 | LNMP(推荐优先) | LAMP |
|---|---|---|
| 性能 | Nginx 高并发更优,适合 API/静态资源站 | Apache .htaccess 灵活但内存占用高 |
| 配置复杂度 | 相对简洁,虚拟主机配置集中 | 模块化多,.htaccess 易误配 |
| PHP-FPM 支持 | 原生集成好,动态扩展快 | 需额外配置 mod_php 或 FPM |
| CentOS Stream 适配 | ✅ 官方 repo 及 IUS/EPEL 支持完善 | ⚠️ Apache 模块在 Stream 中偶有滞后 |
💡 建议:新项目首选 LNMP;若必须用
.htaccess重写规则或遗留系统依赖 Apache 模块,再选 LAMP。
🔹 三、关键注意事项
1️⃣ 源管理与软件选择
- 启用 EPEL & Remi 仓库(必做):
sudo dnf install epel-release remi-release -y # Remi 提供新版 PHP(含 8.1/8.2/8.3)、MariaDB 等 sudo dnf config-manager --set-enabled remi-php82 # 按需选择版本 - 避免混用官方源与第三方源:防止依赖冲突(如
mysqlvsmariadb)。 - MariaDB 优先于 MySQL:CentOS Stream 默认使用 MariaDB(社区友好、兼容性好),除非应用明确要求 Oracle MySQL。
2️⃣ 防火墙与安全组
# 开放必要端口(仅允许信任 IP)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=8080/tcp # PHP-FPM 监听(若自定义)
sudo firewall-cmd --reload
- 禁用 SSH 密码登录,改用密钥认证;
- 限制数据库端口(3306)仅本地访问(
bind-address = 127.0.0.1inmy.cnf)。
3️⃣ PHP 配置优化(LNMP/LAMP 通用)
- 关闭危险函数(
php.ini):disable_functions = exec, system, passthru, shell_exec, proc_open, etc. - 调整资源限制(防 DDoS):
max_execution_time = 30 memory_limit = 128M max_input_vars = 1000 - 启用 OPcache(显著提升性能):
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=4000
4️⃣ Nginx/Apache 安全加固
- 隐藏版本号:
server_tokens off;ServerTokens Prod ServerSignature Off - 强制 HTTPS + HSTS(Let’s Encrypt 证书 +
certbot); - 设置安全头(如
Content-Security-Policy,X-Frame-Options); - 禁用目录浏览:
autoindex off;
5️⃣ 备份与监控
- 定期备份:
mysqldump -u root -p --all-databases > /backup/db_$(date +%F).sql tar czf /backup/www_$(date +%F).tar.gz /var/www/html - 监控工具推荐:
htop,nmon(实时资源)fail2ban(防暴力破解)Prometheus + Grafana(深度指标)
🔹 四、避坑指南
| 问题 | 解决方案 |
|---|---|
| PHP 无法连接 MySQL | 检查 pdo_mysql 是否安装;确认 socket 路径匹配(/var/lib/mysql/mysql.sock) |
| Nginx 502 Bad Gateway | 检查 PHP-FPM 进程状态:systemctl status php-fpm;日志 /var/log/php-fpm/error.log |
| Apache 加载失败模块 | 确认模块文件存在且权限正确:ls /usr/lib64/httpd/modules/*.so |
| SELinux 阻止服务通信 | 临时测试:setenforce 0;生产环境应配置策略:semanage fcontext -a ... && restorecon -Rv /path |
🔹 五、替代方案建议(若追求生产级稳定)
若项目对稳定性要求高,建议迁移至:
- Rocky Linux 9 或 AlmaLinux 9(RHEL 下游,完全兼容,长期支持)
- 或使用容器化方案:Docker Compose 部署 LNMP/LAMP(隔离环境,便于迁移)
需要我为你提供一份完整的 LNMP 自动化部署脚本(含安全加固) 或 LAMP 迁移检查清单 吗?
CLOUD技术博