在 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 自带 dnf(替代 yum),默认仓库已启用 EPEL;
⚠️ MySQL 官方 RPM 不直接支持 CentOS 8(因依赖冲突),Red Hat 生态推荐使用 MariaDB(完全兼容、开箱即用)
⚠️ PHP 默认版本为 7.2(较旧),生产环境建议升级至 PHP 7.4 或 8.0+(需启用 PowerTools/CRB 及 EPEL 扩展源)。

以下为安全、稳定、符合 Red Hat 最佳实践的完整步骤(含基础安全加固与常见问题规避):


✅ 前置准备(以 root 执行)

# 1. 更新系统并安装基础工具
dnf update -y
dnf install -y epel-release dnf-utils vim wget curl net-tools

# 2. 启用 CodeReady Builder (CRB) 仓库(原 PowerTools)——提供编译依赖和新版 PHP
dnf config-manager --set-enabled crb

# 3. 安装常用依赖(避免后续编译失败)
dnf groupinstall -y "Development Tools"

🌐 一、安装 Nginx(官方稳定版)

# 添加官方 Nginx 仓库(确保最新稳定版,非系统默认的旧版)
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

# 清理缓存并安装
dnf clean all
dnf install -y nginx

# 启动并设开机自启
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

# 验证:curl http://localhost 或访问服务器 IP,应见 "Welcome to nginx!"

💡 提示:Nginx 默认配置位于 /etc/nginx/nginx.conf,站点配置建议放在 /etc/nginx/conf.d/*.conf


🐘 二、安装 MariaDB(MySQL 的完全兼容替代)

# CentOS 8 默认仓库提供 MariaDB 10.3(稳定可靠)
dnf install -y mariadb-server mariadb

# 启动并设开机自启
systemctl enable --now mariadb

# 运行安全初始化(设置 root 密码、禁用匿名用户等)
mysql_secure_installation
# 按提示操作:y → 设置强密码 → y → y → y → y

# 验证连接
mysql -u root -p -e "SELECT VERSION();"

⚠️ 注意:若必须用 Oracle MySQL,请从 dev.mysql.com 下载 RHEL 8 兼容 RPM(如 mysql80-community-release-el8-*.noarch.rpm),但需手动解决依赖(如 libtirpc),不推荐新手使用


☕ 三、安装 PHP 7.4(推荐 LTS 版本,比系统默认 7.2 更安全)

# 启用 EPEL + CRB 后,安装 PHP 7.4(来自 EPEL)
dnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-opcache

# 配置 PHP-FPM(关键!)
sed -i 's/^user = apache/user = nginx/' /etc/php-fpm.d/www.conf
sed -i 's/^group = apache/group = nginx/' /etc/php-fpm.d/www.conf
sed -i 's/;listen.owner = nobody/listen.owner = nginx/' /etc/php-fpm.d/www.conf
sed -i 's/;listen.group = nobody/listen.group = nginx/' /etc/php-fpm.d/www.conf
sed -i 's/;listen.mode = 0660/listen.mode = 0660/' /etc/php-fpm.d/www.conf

# 启动 PHP-FPM
systemctl enable --now php-fpm

✅ 验证 PHP:创建测试文件

echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php
chown nginx:nginx /usr/share/nginx/html/info.php

访问 http://你的IP/info.php,确认显示 PHP 信息页(注意:上线前务必删除!)


🔧 四、配置 Nginx 支持 PHP(FastCGI)

编辑默认站点配置:

vim /etc/nginx/conf.d/default.conf

替换 location / 块为以下内容(支持 .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(更高效)
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # 禁止访问敏感文件
    location ~ /.(ht|git|svn|bak|swp)$ {
        deny all;
    }
}

✅ 推荐使用 Unix Socket(性能更好):
fastcgi_pass 改为:fastcgi_pass unix:/run/php-fpm/www.sock;
并确保 /etc/php-fpm.d/www.conflisten = /run/php-fpm/www.sock 已取消注释且权限正确(已通过前面 sed 设置)。

重载配置:

nginx -t && systemctl reload nginx

🧪 五、测试建站环境(WordPress 示例)

# 安装 unzip(解压 WordPress)
dnf install -y unzip

# 下载并解压 WordPress(中文版)
cd /usr/share/nginx/html
rm -rf *
wget https://cn.wordpress.org/latest-zh_CN.zip
unzip latest-zh_CN.zip
mv wordpress/* . && rmdir wordpress
chown -R nginx:nginx /usr/share/nginx/html/

# 创建 WordPress 数据库(替换 YOUR_DB_NAME, YOUR_DB_USER, YOUR_PASSWORD)
mysql -u root -p -e "
CREATE DATABASE wp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON wp_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
"

# 访问 http://你的IP 开始 WordPress 安装向导

🔐 六、基础安全加固(必做!)

# 1. 禁用 PHP 显示错误(生产环境)
sed -i 's/expose_php = On/expose_php = Off/' /etc/php.ini
sed -i 's/display_errors = On/display_errors = Off/' /etc/php.ini

# 2. 限制 Nginx 用户权限
echo "user nginx;" > /etc/nginx/nginx.conf.d/user.conf

# 3. 启用 SELinux(CentOS 8 默认启用,确认状态)
sestatus  # 应为 enabled & enforcing
# 若需允许 Nginx 连接网络(如远程 DB):
setsebool -P httpd_can_network_connect 1

# 4. 配置防火墙仅开放必要端口
firewall-cmd --permanent --remove-service=dhcpv6-client  # 移除无关服务
firewall-cmd --reload

📌 常见问题与解决方案

问题 原因 解决
502 Bad Gateway PHP-FPM 未运行 / socket 权限错误 systemctl status php-fpm;检查 /var/log/php-fpm/www-error.log;确认 listen.owner/group = nginx
Access denied for user MySQL 用户权限或 host 错误 创建用户时用 'wp_user'@'localhost'(非 %),或检查 skip-networking 是否关闭
File not found(PHP) root 路径不匹配或 SCRIPT_FILENAME 错误 确保 Nginx rootfastcgi_param SCRIPT_FILENAME 中路径一致
SELinux 阻止访问 setsebool -P httpd_can_network_connectdb 1(若连远程 DB) ausearch -m avc -ts recent | audit2why 查具体原因

🚨 重要提醒(安全与合规)

  • CentOS 8 已于 2021-12-31 终止支持(EOL),不再接收安全更新 → 立即迁移至 CentOS Stream 8/9、AlmaLinux 8/9 或 Rocky Linux 8/9
  • ✅ 生产环境务必:
    • 使用 Let’s Encrypt 配置 HTTPS(certbot --nginx
    • 设置强密码(数据库、PHPMyAdmin 等)
    • 定期备份数据库(mysqldump -u user -p db_name > backup.sql
    • 禁用未使用的 PHP 模块(如 php-ldap, php-snmp

需要我为你生成:

  • ✅ 自动化部署脚本(bash)
  • ✅ SSL + HTTPS + HTTP/2 配置指南
  • ✅ WordPress 一键安装 + 安全加固清单
  • ✅ 迁移到 Rocky Linux 9 的平滑升级方案?

欢迎随时提出 👇

未经允许不得转载:CLOUD云枢 » 在 CentOS 8.2 64位系统中安装 Nginx + PHP + MySQL 建站的完整步骤是什么?