在 CentOS 8.2(已停止维护,强烈建议升级至 CentOS Stream 8/9 或 AlmaLinux/Rocky Linux 8+)上安装 Nginx + PHP + MySQL(实际推荐 MariaDB)建站环境,需注意:CentOS 8 已于 2021-12-31 生命周期结束(EOL),官方仓库不可用,且存在严重安全风险。以下步骤基于 启用 EPEL 和 AppStream 仓库的临时可用状态(仅用于学习或离线测试环境),并明确标注风险与现代替代方案。
⚠️ 重要前提声明:
- ✅ 本指南仅适用于已有 CentOS 8.2 系统且无法立即迁移的临时场景;
- ❌ 生产环境严禁使用 EOL 的 CentOS 8(无安全更新、仓库失效、漏洞无法修复);
- ✅ 强烈推荐迁移到:AlmaLinux 8/9、Rocky Linux 8/9 或 CentOS Stream 8/9(免费、RHEL 兼容、长期支持);
- 🔐 MySQL 在 RHEL/CentOS 生态中默认由 MariaDB 替代(兼容 MySQL 协议,Red Hat 官方支持)。
✅ 完整安装步骤(CentOS 8.2,离线/应急场景)
步骤 0:系统准备与风险确认
# 1. 检查系统版本(确认为 CentOS 8.2)
cat /etc/redhat-release
# 输出应为:CentOS Linux release 8.2.2004
# 2. 更新系统(可能失败,因仓库已下线;若失败则跳过,后续手动配置仓库)
sudo dnf update -y
# 3. 【关键】启用 EPEL 和 PowerTools(若未启用)
sudo dnf install -y epel-release
sudo dnf config-manager --set-enabled powertools # CentOS 8 中原 "PowerTools" 仓库名(旧版叫 "BaseOS/Extras")
⚠️ 注意:截至 2024 年,
mirror.centos.org已关闭,需切换为vault.centos.org(仅存档,无安全更新):# 临时替换 baseurl(仅限紧急测试!) sudo sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/CentOS-*.repo sudo dnf clean all && sudo dnf makecache
步骤 1:安装 Nginx
# 安装 Nginx(来自 AppStream)
sudo dnf install -y nginx
# 启动并设置开机自启
sudo systemctl enable nginx
sudo systemctl start nginx
# 开放防火墙(若启用 firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
# 验证:访问 http://你的服务器IP,应显示 "Welcome to nginx on CentOS"
步骤 2:安装 PHP(PHP-FPM 方式,推荐)
CentOS 8 默认提供 PHP 7.2(较旧),可选安装 PHP 7.4(需 EPEL)或使用 Remi 仓库(更推荐,但需额外配置):
✅ 推荐方式:启用 Remi 仓库(提供新版 PHP)
# 安装 Remi 仓库(安全可靠,广泛使用)
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# 启用 PHP 7.4(或 8.0/8.1,根据需求选;7.4 是 CentOS 8 最佳兼容版)
sudo dnf module reset php
sudo dnf module enable php:remi-7.4
# 安装 PHP 及常用扩展
sudo dnf install -y php php-fpm php-cli php-mysqlnd php-gd php-xml php-mbstring php-zip php-opcache
# 配置 PHP-FPM
sudo sed -i 's/^user = apache/user = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/^group = apache/group = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/;listen.owner = nobody/listen.owner = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/;listen.group = nobody/listen.group = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/;listen.mode = 0660/listen.mode = 0660/' /etc/php-fpm.d/www.conf
# 启动 PHP-FPM
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
步骤 3:安装 MariaDB(MySQL 的官方推荐替代)
# 安装 MariaDB(CentOS 8 默认数据库)
sudo dnf install -y mariadb-server mariadb
# 启动并设为开机自启
sudo systemctl enable mariadb
sudo systemctl start mariadb
# 运行安全初始化(设置 root 密码、移除匿名用户等)
sudo mysql_secure_installation
# 按提示操作:设置 root 密码(Y)、删除匿名用户(Y)、禁止远程 root(Y)、删除 test 库(Y)、重载权限(Y)
# 验证连接
mysql -u root -p
# 输入密码后进入 MariaDB shell,输入 `SELECT VERSION();` 确认
💡 提示:如确需 MySQL(非 MariaDB),可从 MySQL 官网 下载
.rpm包手动安装,但不推荐——与系统生态不兼容,且无官方支持。
步骤 4:配置 Nginx 支持 PHP(FastCGI)
编辑默认站点配置:
sudo vim /etc/nginx/conf.d/default.conf
替换全部内容为以下(支持 .php 解析、index.php 优先、安全加固):
server {
listen 80;
server_name localhost;
# 根目录(可按需修改)
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 处理 PHP 脚本
location ~ .php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000; # 或 unix:/run/php-fpm/www.sock(推荐 Unix socket)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问敏感文件
location ~ /.ht {
deny all;
}
}
✅ 优化建议(推荐使用 Unix Socket 提升性能):
# 修改 /etc/php-fpm.d/www.conf:
# 将 listen = 127.0.0.1:9000 改为:
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
# 重启服务
sudo systemctl restart php-fpm nginx
然后将 fastcgi_pass 改为 unix:/run/php-fpm/www.sock。
步骤 5:测试 PHP 与数据库连接
# 创建测试文件
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/info.php
echo "<?php $mysqli = new mysqli('localhost', 'root', '你的MariaDB密码'); echo $mysqli ? 'DB OK' : 'DB ERROR'; ?>" | sudo tee /usr/share/nginx/html/dbtest.php
# 设置正确权限
sudo chown -R nginx:nginx /usr/share/nginx/html/
sudo chmod -R 755 /usr/share/nginx/html/
# 重启服务
sudo systemctl restart nginx php-fpm
访问:
http://your_ip/info.php→ 查看 PHP 信息页http://your_ip/dbtest.php→ 应显示DB OK
✅ 补充:创建建站所需数据库与用户(示例)
# 登录 MariaDB
mysql -u root -p
# 执行以下 SQL:
CREATE DATABASE myweb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON myweb.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
🚫 重要警告与升级建议(必读!)
| 项目 | 说明 |
|---|---|
| ⚠️ CentOS 8 已 EOL | 自 2021-12-31 起无任何安全更新,禁止用于生产环境。继续使用等于裸奔。 |
| ✅ 推荐迁移路径 | → AlmaLinux 8/9(almalinux.org) → Rocky Linux 8/9(rockylinux.org) → CentOS Stream 9(滚动发布,RHEL 9 基础) |
| 🔧 迁移工具 | 使用 migrate2rocky 或 alma-migrate 一键迁移(保留数据) |
| 🌐 现代替代栈 | Nginx + PHP 8.2+ (Remi) + MariaDB 10.11 + Redis(缓存)+ Certbot(HTTPS) |
✅ 附:一键验证脚本(运行后检查服务状态)
#!/bin/bash
echo "=== 服务状态检查 ==="
systemctl is-active nginx && echo "✓ Nginx: running" || echo "✗ Nginx: failed"
systemctl is-active php-fpm && echo "✓ PHP-FPM: running" || echo "✗ PHP-FPM: failed"
systemctl is-active mariadb && echo "✓ MariaDB: running" || echo "✗ MariaDB: failed"
ss -tlnp | grep ':80|:443' &>/dev/null && echo "✓ Port 80 open" || echo "✗ Port 80 closed"
ss -tlnp | grep ':3306' &>/dev/null && echo "✓ Port 3306 open" || echo "✗ Port 3306 closed"
如需我为你生成:
- ✅ AlmaLinux 9 的完整现代化部署脚本(含 HTTPS、Let’s Encrypt、WordPress 一键部署)
- ✅ Docker Compose 版 LEMP 环境(隔离、可移植)
- ✅ 自动化迁移 CentOS 8 → Rocky Linux 8 脚本
请随时告知,我可立即提供 👇
🌟 记住:安全不是功能,而是底线。选择受支持的系统,才是对网站和用户真正的负责。
云服务器