Laravel 10 运行失败的直接原因是 PHP 版本低于 8.1 或关键扩展(如 mbstring、openssl、pdo)缺失,Vultr CentOS 7 默认镜像仅含 PHP 5.4–7.3,须通过 Remi 仓库手动安装 PHP 8.1+ 及完整扩展,并正确配置 php-fpm、Nginx 权限与防火墙。

直接原因通常是 PHP 版本或扩展缺失,不是 Laravel 本身的问题——Vultr 的 CentOS 7 默认镜像几乎肯定不满足 Laravel 10 的最低运行要求。
PHP 版本低于 8.1 会直接拒绝启动
Laravel 10 强制要求 PHP ≥ 8.1。CentOS 7 自带的 php 包(来自 base repo)最高只到 5.4,即使启用了 EPEL,也默认提供的是 PHP 7.2 或 7.3。用 php -v 查出来的结果如果低于 8.1,composer create-project laravel/laravel 可能中途退出,或者装完后访问直接报 ParseError 或空白页。
- 必须手动安装 PHP 8.1+:推荐使用 Remi 仓库(比 Webtatic / IUS 更活跃、更新及时)
- 执行顺序不能错:
sudo yum install epel-release→sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm→sudo yum-config-manager --enable remi-php81→sudo yum install php php-cli php-fpm php-mysqlnd php-curl php-gd php-mbstring php-xml php-zip php-bcmath php-opcache - 装完务必验证:
php -v和php -m | grep -E 'mbstring|openssl|pdo'
composer create-project 卡住或报 extension 错误
常见现象是提示 The following PHP extensions are required but are not installed: ctype, mbstring, openssl, ...,说明虽然 PHP 装了,但关键扩展没启用或没装全。
- Remi 仓库中,
php-mbstring、php-xml等必须显式安装,不会随php主包自动拉取 - 检查
php.ini路径:php --ini,确认加载的配置文件里没有extension=行被注释掉(尤其是mbstring和openssl) - Vultr 实例常禁用 SELinux,但若开启,需额外放行:
sudo setsebool -P httpd_can_network_connect 1,否则 Composer 无法连 Packagist
Nginx 访问返回 500 或下载 index.php
这不是 Laravel 错,是 PHP-FPM 没接上。Vultr 的 CentOS 7 镜像默认不启动 php-fpm,也不配置 Nginx 与之通信。
- 启动服务:
sudo systemctl start php-fpm并sudo systemctl enable php-fpm - Nginx 配置中
fastcgi_pass必须匹配 PHP-FPM 监听地址:默认是unix:/var/run/php-fpm/www.sock(非127.0.0.1:9000),且该 socket 文件属主应为nginx或www-data - 检查 socket 权限:
ls -l /var/run/php-fpm/www.sock,若属主不是 Nginx 运行用户(通常是nginx),需改/etc/php-fpm.d/www.conf中的user、group和listen.owner
storage 和 bootstrap/cache 权限始终不对
哪怕你 chown -R nginx:nginx 过,重启 PHP-FPM 后权限又变回 root:root——因为 PHP-FPM 子进程默认以 apache 用户跑,而 Vultr 镜像里这个用户可能不存在或未同步。
- 统一设为
nginx用户:sudo chown -R nginx:nginx storage bootstrap/cache - 在
/etc/php-fpm.d/www.conf中明确设置:user = nginx、group = nginx、listen.owner = nginx、listen.group = nginx - 重启生效:
sudo systemctl restart php-fpm nginx - 别用
777,Nginx worker 进程只需读+执行(目录)和读写(文件),755/644配合正确属主更稳
最易被忽略的一点:Vultr 的 CentOS 7 镜像默认关闭防火墙(firewalld),但有些预装脚本会偷偷打开它,且未放行 80/443 端口——curl -I http://localhost 能通,但从外网 curl 不通,第一反应总去查 Nginx,其实只是端口被拦了。


















