Ubuntu 16.04下Nginx部署Laravel出现500 HTTP错误求助
解决Laravel启动HTTP 500错误(PHP语法错误篇)
从你提供的Nginx错误日志来看,核心问题是PHP语法解析错误:unexpected '?',这个符号是PHP 7.0才引入的空合并运算符,说明你的服务器上运行的PHP版本低于Laravel项目要求的版本(比如Laravel 5.5及以上需要PHP 7.0+,更高版本要求更高)。之前修改storage权限、清理缓存的操作没解决问题,是因为没触碰到真正的病因。
下面是具体的排查和解决步骤:
1. 检查当前PHP版本
先确认服务器上的PHP版本,运行命令:
php -v
同时还要注意Nginx配置中使用的PHP-FPM版本,有时候CLI和FPM版本可能不一致,你可以在Nginx配置文件(/etc/nginx/sites-enabled/default)里找到类似这样的行:
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
这里的php7.4-fpm就是当前Nginx使用的PHP版本,对比CLI版本是否一致。
2. 升级PHP到符合Laravel要求的版本
根据你的Laravel版本,安装对应的PHP版本:
- 如果是Laravel 8.x:需要PHP 7.3+
- Laravel 9.x:PHP 8.0+
- Laravel 10.x:PHP 8.1+
以Ubuntu系统安装PHP 7.4为例:
# 添加PPA源(如果没有的话) sudo add-apt-repository ppa:ondrej/php sudo apt update # 安装PHP 7.4及所需扩展 sudo apt install php7.4 php7.4-fpm php7.4-mbstring php7.4-xml php7.4-mysql php7.4-curl # 切换Nginx使用的PHP版本 # 修改/etc/nginx/sites-enabled/default中的fastcgi_pass行,改为对应版本的sock路径 # 比如:fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 重启Nginx和PHP-FPM sudo systemctl restart nginx sudo systemctl restart php7.4-fpm
3. 再次验证项目运行
完成升级后,先清除项目缓存(避免旧缓存影响):
cd /home/enthys/workspace/CodeBattles php artisan cache:clear php artisan config:clear
然后访问项目,看是否还出现500错误。如果还有问题,可以再查看Nginx错误日志,确认是否有新的报错。
补充说明
之前修改storage权限的操作是必要的,但只解决了权限类的500错误,这次的问题是PHP版本不兼容导致的语法错误,所以优先级更高。另外,尽量不要用777权限,755给目录,644给文件更安全,你可以这样设置:
sudo chown -R www-data:www-data /home/enthys/workspace/CodeBattles/storage sudo chmod -R 755 /home/enthys/workspace/CodeBattles/storage sudo find /home/enthys/workspace/CodeBattles/storage -type f -exec chmod 644 {} \;
内容的提问来源于stack exchange,提问作者Enthys
相关产品推荐
相关产品推荐

