在 CentOS 8.2(已停止维护,强烈建议升级至 CentOS Stream 8/9 或 AlmaLinux/Rocky Linux 8+)上安装 Nginx + PHP + MySQL(现为 MariaDB)建站环境需注意:CentOS 8.2 于 2020 年 5 月发布,其官方支持已于 2021 年 12 月 31 日终止,且默认仓库(BaseOS/AppStream)已归档,dnf 直接安装可能失败。以下提供 兼容、安全、可落地的完整步骤,包含关键适配与替代方案。
⚠️ 重要前提提醒:
- ✅ 推荐迁移:CentOS 8 已 EOL,生产环境请立即迁移到 AlmaLinux 8、Rocky Linux 8 或 CentOS Stream 8(长期支持)。
- ⚠️ 若必须使用 CentOS 8.2(如离线测试环境),需切换至 Vault 镜像源(已归档仓库)并禁用不可用模块(如
php:7.2模块已废弃)。 - 🐘 MySQL 官方不提供 CentOS 8 的原生 RPM(仅社区版 MariaDB),故本指南使用 MariaDB 10.3(CentOS 8 默认数据库)。
- 🧩 PHP 推荐使用 Remi 仓库(提供最新稳定版 PHP 7.4/8.0),避免系统自带过时的 PHP 7.2(EOL)。
✅ 完整安装步骤(CentOS 8.2 环境)
🔹 步骤 1:更新系统 & 切换至 Vault 镜像源(必需!)
# 备份原 repo
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/backup/
# 配置 Vault 镜像源(适用于 8.2.2004)
sudo tee /etc/yum.repos.d/CentOS-Vault.repo << 'EOF'
[base]
name=CentOS-8.2 - Base
baseurl=http://vault.centos.org/8.2.2004/BaseOS/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1
repo_gpgcheck=1
[appstream]
name=CentOS-8.2 - AppStream
baseurl=http://vault.centos.org/8.2.2004/AppStream/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1
repo_gpgcheck=1
EOF
# 清理缓存并更新
sudo dnf clean all
sudo dnf makecache
sudo dnf update -y
🔹 步骤 2:安装 EPEL 与 Remi 仓库(获取新版 PHP)
# 安装 EPEL(扩展包)
sudo dnf install -y epel-release
# 启用 PowerTools(编译依赖所需)
sudo dnf config-manager --set-enabled powertools
# 安装 Remi 仓库(PHP 7.4 或 8.0)
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# 启用 PHP 7.4(推荐,稳定且兼容性好;如需 PHP 8.0,替换 remi-74 → remi-80)
sudo dnf module reset php
sudo dnf module enable php:remi-74
🔹 步骤 3:安装 Nginx、MariaDB、PHP 及扩展
# 安装核心组件
sudo dnf install -y nginx mariadb-server php php-cli php-fpm php-mysqlnd
php-gd php-xml php-mbstring php-zip php-opcache php-json php-curl
# 启动并设为开机自启
sudo systemctl enable nginx mariadb php-fpm
sudo systemctl start nginx mariadb php-fpm
🔹 步骤 4:配置 MariaDB(安全初始化)
# 运行安全脚本(设置 root 密码、删除匿名用户等)
sudo mysql_secure_installation
# 按提示操作:设 root 密码(记牢!)、Y/Y/Y/Y/Y
# (可选)创建网站专用数据库和用户(示例)
sudo mysql -u root -p << 'EOF'
CREATE DATABASE mysite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON mysite.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EOF
🔹 步骤 5:配置 PHP-FPM
# 编辑 PHP-FPM 主配置(关键:监听方式改为 socket 提升性能)
sudo sed -i 's/^listen = .*/listen = /run/php-fpm/www.sock/' /etc/php-fpm.d/www.conf
sudo sed -i 's/^;listen.owner = .*/listen.owner = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/^;listen.group = .*/listen.group = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/^;listen.mode = .*/listen.mode = 0660/' /etc/php-fpm.d/www.conf
# 设置 PHP 进程用户组匹配 Nginx
sudo sed -i 's/^user = .*/user = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/^group = .*/group = nginx/' /etc/php-fpm.d/www.conf
# 重启服务
sudo systemctl restart php-fpm
🔹 步骤 6:配置 Nginx 虚拟主机(支持 PHP)
# 创建网站根目录
sudo mkdir -p /var/www/mysite
sudo chown -R $USER:nginx /var/www/mysite
sudo chmod -R 775 /var/www/mysite
# 创建 Nginx 配置文件
sudo tee /etc/nginx/conf.d/mysite.conf << 'EOF'
server {
listen 80;
server_name localhost;
root /var/www/mysite;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 处理 PHP 请求
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# 安全:禁止执行上传目录中的 PHP
location ~ .(php|phar)$ {
deny all;
}
}
# 禁止访问敏感文件
location ~ /.(htaccess|htpasswd|env|git|svn) {
deny all;
}
}
EOF
# 测试配置并重载
sudo nginx -t && sudo systemctl reload nginx
🔹 步骤 7:部署测试页(验证环境)
# 创建 info.php 测试文件
sudo tee /var/www/mysite/index.php << 'EOF'
<?php
phpinfo();
?>
EOF
# 调整 SELinux(若启用)——允许 Nginx 访问网络和文件
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_read_user_content 1
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/mysite(/.*)?"
sudo restorecon -Rv /var/www/mysite
# 开放防火墙端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
🔹 步骤 8:验证访问
- 在浏览器中访问服务器 IP 或域名:
http://your_server_ip/ - 应看到 PHP 信息页(确认 PHP 7.4 + OPcache + MySQLnd 已启用)
- 检查 MySQL 连接(在
index.php中添加测试代码):<?php $mysqli = new mysqli("localhost", "webuser", "StrongPass123!", "mysite"); echo $mysqli->connect_error ? "MySQL Error" : "MySQL OK"; ?>
🛡️ 生产环境加固建议(必做!)
| 项目 | 建议操作 |
|---|---|
| SELinux | 保持 enforcing 模式,用 audit2why 分析拒绝日志 |
| 防火墙 | 仅开放 80/443,关闭 SSH 密码登录(改用密钥) |
| HTTPS | 使用 Certbot 自动申请 Let's Encrypt 免费证书:sudo dnf install -y certbot python3-certbot-nginxsudo certbot --nginx -d yourdomain.com |
| PHP 安全 | 编辑 /etc/php.ini:expose_php = Offdisplay_errors = Offallow_url_fopen = Off(除非必要) |
| 自动更新 | sudo dnf install -y dnf-automatic → 配置 /etc/dnf/automatic.conf |
❌ 常见问题解决
- Nginx 502 Bad Gateway:检查
php-fpm.sock权限(属主应为nginx:nginx,权限660)及 SELinux 上下文 - PHP 无法连接 MySQL:确认
php-mysqlnd已安装,且mysqli.default_socket = /var/lib/mysql/mysql.sock(或用localhost触发 socket 连接) - Vault 源无法访问:尝试镜像站
https://mirrors.aliyun.com/centos-vault/8.2.2004/(需替换 repo URL) - Remi 模块冲突:运行
dnf module list php查看可用流,再dnf module reset php && dnf module enable php:remi-74
📌 最终建议(严肃提醒)
🔴 CentOS 8.2 不再接收任何安全更新,存在严重漏洞风险(如 OpenSSL、glibc、kernel 等)。
✅ 立即行动:
- 备份网站数据与数据库(
mysqldump -u root -p mysite > mysite.sql)- 迁移至 AlmaLinux 8(1:1 二进制兼容 CentOS)
- 在新系统上用
dnf module enable php:remi-8.1安装 PHP 8.1+,获得长期支持。
需要我为你生成 AlmaLinux 8 迁移指南、WordPress 一键部署脚本 或 SSL 自动化配置模板,请随时告知! 🌐
CLOUD云计算