走啊走
加油

在 CentOS 8.2 64位系统中安装 Nginx + PHP + MySQL 建站的完整步骤是什么?

服务器价格表

在 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-nginx
sudo certbot --nginx -d yourdomain.com
PHP 安全 编辑 /etc/php.ini
expose_php = Off
display_errors = Off
allow_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 等)
立即行动

  1. 备份网站数据与数据库(mysqldump -u root -p mysite > mysite.sql
  2. 迁移至 AlmaLinux 8(1:1 二进制兼容 CentOS)
  3. 在新系统上用 dnf module enable php:remi-8.1 安装 PHP 8.1+,获得长期支持。

需要我为你生成 AlmaLinux 8 迁移指南WordPress 一键部署脚本SSL 自动化配置模板,请随时告知! 🌐