适用环境:Alibaba Cloud Linux 3 (Soaring Falcon) · PLATFORM_ID = platform:al8 · rpm -E %{rhel} = 8

升级路径:PHP 8.0.30 (el7.remi) → PHP 8.3.31 (el8.remi)

基础环境:MySQL 8.0.40 · Nginx 1.20.1

🔍 一、一键环境检查

升级前先跑这段命令确认当前状态:

echo "=== PHP ===" && php -v 2>&1 | head -1
echo "=== MySQL ===" && (mysql --version 2>&1 || mariadb --version 2>&1)
echo "=== Nginx ===" && nginx -v 2>&1
echo "=== HTTPS ===" && grep -r "ssl_certificate" /etc/nginx/ 2>/dev/null | grep -v "#"
echo "=== php-fpm ===" && systemctl status php-fpm 2>&1 | head -3
echo "=== PHP扩展 ===" && php -m | grep -E "gd|mbstring|pdo|mysqlnd|sodium|xml" 2>&1

💣 二、踩坑全记录(6 个坑)

1
EPEL / Remi 源安装冲突
现象yum install epel-releaseepel-aliyuncs-release 冲突;Remi 报 system-release(releasever) = 8 不满足
原因阿里云 Linux 3 不是标准 RHEL 8,releasever 匹配不上
解决rpm -ivh remi-release-8.rpm --nodeps --force

2
旧 PHP 是 EL7 包装在 EL8 系统上
现象rpm -qa | grep php 全是 el7.remi 字样;yum module reset php 报”缺失的组或模块”
原因EL7 的 RPM 包不受 EL8 的 dnf module 系统管理
解决rpm -qa | grep php | xargs rpm -e --nodeps 全部卸载后重装

3
Remi 源误加载 EL7 仓库
现象yum repolist | grep remi 显示 “Enterprise Linux 7” 而不是 8
原因之前装了 EL7 版 remi-release,repo 文件指向 EL7 路径
解决删除后重装,或手动写 repo 文件指向 /enterprise/8/php83/x86_64/

4
模块元数据缺失
现象dnf 下载完后报:对于模块软件包没有可用的模块元数据
原因remi-php83 的包标记为模块包,阿里云系统默认没有模块元数据
解决dnf config-manager --enable remi-modular,安装时加 --enablerepo="remi-modular,alinux3-module"

5
gd / mbstring 缺高版本依赖库
现象libgd.so.103: cannot open shared object file / libonig.so.105: cannot open shared object file
原因系统自带 gd-2.2.5(libgd.so.2)和 oniguruma-6.8.2(libonig.so.5),PHP 8.3 需要更高版本
解决dnf install -y gd3php oniguruma5php --enablerepo="remi-safe"

6
升级后网站 404(php-fpm 监听不匹配)
现象所有页面 502/404,Nginx 日志:connect() failed (111: Connection refused)
原因Nginx 转发到 TCP 9000,但新装 php-fpm 默认监听 Unix socket /run/php-fpm/www.sock
解决sed -i 's|^listen = /run/php-fpm/www.sock|listen = 127.0.0.1:9000|' /etc/php-fpm.d/www.conf 然后重启 php-fpm

🚀 三、PHP 8.3 升级步骤(8 步)

1 卸载旧 PHP
systemctl stop php-fpm 2>/dev/null
rpm -qa | grep php | xargs rpm -e --nodeps
2 安装 Remi 源(强制绕过依赖)
rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-8.rpm --nodeps --force
3 配置仓库
dnf config-manager --disable remi-php80
dnf config-manager --enable remi-php83
dnf config-manager --enable remi-modular
4 安装 PHP 8.3 核心
dnf install -y php php-cli php-fpm php-common php-pdo php-mysqlnd php-sodium \
  --disablerepo="*" \
  --enablerepo="remi-php83,remi-modular,alinux3-os,alinux3-updates,alinux3-plus,alinux3-module" \
  --skip-broken
5 安装依赖库
dnf install -y gd3php oniguruma5php \
  --disablerepo="*" \
  --enablerepo="remi-safe,remi-modular,alinux3-os,alinux3-updates,alinux3-plus"
6 安装 gd 和 mbstring 扩展
dnf install -y php-gd php-mbstring \
  --disablerepo="*" \
  --enablerepo="remi-php83,remi-modular,alinux3-os,alinux3-updates,alinux3-plus,alinux3-module"
7 修复 php-fpm 监听
# 确认 Nginx 转发方式
grep "fastcgi_pass" /etc/nginx/nginx.conf

# 改为 TCP 监听(匹配 Nginx 的 127.0.0.1:9000)
sed -i 's|^listen = /run/php-fpm/www.sock|listen = 127.0.0.1:9000|' /etc/php-fpm.d/www.conf
8 启动并验证
systemctl restart php-fpm && systemctl enable php-fpm
php -v
php -m | grep -E "gd|mbstring|pdo|mysqlnd|sodium|xml"
ss -tlnp | grep 9000
systemctl reload nginx

✅ 四、验证清单

检查项 要求 命令 状态
PHP 版本 ≥ 8.3 php -v ✅ 8.3.31
MySQL 版本 ≥ 8.0 mysql --version ✅ 8.0.40
Nginx 运行中 systemctl status nginx
HTTPS 证书已配置 grep ssl_certificate /etc/nginx/nginx.conf
php-fpm 运行中 + 9000 端口 ss -tlnp | grep 9000
PHP 扩展 gd/mbstring/pdo/mysqlnd/sodium php -m

🖥️ 五、服务器速查卡

系统Alibaba Cloud Linux 3 (Soaring Falcon)
PHP8.3.31 (NTS gcc x86_64)
MySQL8.0.40 (Community Server)
Nginx1.20.1
php-fpm127.0.0.1:9000
Web 根目录/usr/share/nginx/html/wordpress

📦 六、仓库速查

仓库 ID 用途 默认状态
alinux3-os 系统基础包 启用
alinux3-updates 系统更新 启用
alinux3-plus 额外包 启用
alinux3-module 模块元数据 启用
remi-php83 PHP 8.3 包 手动启用
remi-modular Remi 模块元数据 手动启用
remi-safe gd3php / oniguruma5php 启用

📝 shitou · 2026-06-10 · 基于实战踩坑整理

One thought on “阿里云服务器升级 PHP 8.3 失败?6个坑全解决”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您的IP地址是:43.175.104.162