Laravel上线需将项目放非Web可访问路径(如/var/www/myapp),Nginx root指向public目录,配置必含try_files、SCRIPT_FILENAME和fastcgi_split_path_info三行,运行composer install --no-dev --optimize-autoloader,确保.env为production且APP_DEBUG=false,清空config/cache,检查storage与bootstrap/cache权限、PHP扩展及日志。

怎么把 Laravel 项目传到服务器上才不会报错
核心是别直接 git clone 到 web 根目录,也别用 php artisan serve 上线。Laravel 必须走 Web 服务器(Nginx/Apache)+ PHP-FPM,且 public/ 才是真实入口,其他目录不能被 Web 访问。
- 上传前先在本地运行
composer install --no-dev --optimize-autoloader,删掉vendor/再传,避免 dev 包污染生产环境 - 把整个项目放非 web 可访问路径(如
/var/www/myapp),再让 Nginx 的root指向/var/www/myapp/public - 务必检查
.env文件:数据库、APP_KEY、APP_ENV=production、APP_DEBUG=false—— 漏改任意一项都可能白屏或泄露敏感信息 - 上传后立刻跑
php artisan config:clear和php artisan cache:clear,否则缓存的本地配置还在生效
Laravel 500 错误但没日志?查哪几个地方
不是代码写错了,大概率是权限、扩展或环境变量问题。Laravel 默认把错误吞掉,APP_DEBUG=false 下只返回通用 500 页面,连错误堆栈都不给。
- 先看 PHP 错误日志:Nginx 下通常是
/var/log/php-fpm/www-error.log,Apache 下是/var/log/apache2/error.log - 确认
storage/和bootstrap/cache/目录可写:chown -R www-data:www-data storage bootstrap/cache(用户组按实际 Web 进程用户调整) - 检查是否装了
mbstring、openssl、pdo_mysql等扩展:php -m | grep -E 'mbstring|openssl|pdo' -
.env里如果用了未定义的变量(比如DB_HOST=后面空着),php artisan config:cache会静默失败,导致后续全崩
Nginx 配置里最容易漏写的三行
只配 root 和 index 不够,Laravel 路由全靠重写,少一行就 404。
-
try_files $uri $uri/ /index.php?$query_string;—— 必须有,否则除首页外所有路由都找不到 -
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;—— 用$realpath_root而不是$document_root,避免 symlink 权限问题 -
fastcgi_split_path_info ^(.+\.php)(/.+)$;—— 不加这行,带 PATH_INFO 的请求(比如某些 API)会进错脚本
完整片段不用抄,但上面三行缺一不可;复制网上配置时,重点盯这三处有没有被删掉或写错。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
上线后队列、定时任务、文件上传全失效?
这些功能不依赖 Web 请求生命周期,得单独配,而且默认根本没启动。
- 队列:必须手动起
php artisan queue:work,推荐用 Supervisor 管理进程,别用&放后台 —— 断开终端就挂 - 定时任务:Laravel 自己不跑
scheduler,要在系统 crontab 里加一行:* * * * * cd /var/www/myapp && php artisan schedule:run >> /dev/null 2>&1 - 文件上传失败?检查
php.ini的upload_max_filesize和post_max_size,Nginx 还要加client_max_body_size 20M;
这些都不是“部署完就自动好”的功能,漏配一个,对应模块就静默瘫痪,而且不容易一眼发现。










