上线 Laravel 必须用 Nginx/Apache + PHP-FPM,核心是权限、路径、伪静态和环境配置四件事:确保 PHP ≥ 8.1 且启用必要扩展;网站根目录指向 public/;配置 Laravel 伪静态规则;重置 .env 并执行 config:cache 等缓存清理命令。

直接上生产环境前,php artisan serve 肯定不能用,宝塔面板里必须用 Nginx/Apache + PHP-FPM 托管 Laravel,核心是权限、路径、伪静态和环境配置四件事。
确认宝塔 PHP 版本和扩展是否满足 Laravel 要求
Laravel 10+ 要求 PHP ≥ 8.1,且必须启用 openssl、pdo、mbstring、tokenizer、xml、ctype、json、zip(如果要用 php artisan storage:link 或压缩包部署)。
- 在宝塔「软件商店」→「PHP 管理」里点进你选的 PHP 版本 →「安装扩展」勾选上述模块,重启 PHP-FPM
-
php -v和php -m | grep -E "openssl|pdo|mbstring"可在终端验证(宝塔终端或 SSH 进去执行) - 若用 Laravel Scout + Algolia 或队列 + Redis,还得额外装
redis扩展,并确保宝塔已部署 Redis 服务
上传代码并设置正确的网站根目录
Laravel 的 Web 入口是 public/ 目录,不是项目根目录。宝塔新建站点时,「网站目录」必须指向 /www/wwwroot/your-site.com/public,而不是 /www/wwwroot/your-site.com。
- 上传完整 Laravel 项目(含
.env、composer.json等)到/www/wwwroot/your-site.com - 在宝塔「网站」→「设置」→「网站目录」中,把「运行目录」改为
/public(这是最稳妥方式,比手动改根路径更可靠) - 别忘了改完后点击「保存」,否则 Nginx 配置不会重载
- 如果用
storage:link命令生成软链接,需在 SSH 中进入项目根目录执行:cd /www/wwwroot/your-site.com && php artisan storage:link,并确保storage/和bootstrap/cache/可写(宝塔文件管理器右键「权限」设为 755,属主保持 www)
配置 Nginx 伪静态规则(关键!否则 404)
宝塔默认不带 Laravel 伪静态,必须手动加。否则除首页外所有路由都 404。
- 在「网站」→「设置」→「伪静态」选项卡中,选择「Laravel 5」(它适配 Laravel 5–11,规则通用)
- 若没这个选项,粘贴以下规则(注意替换
your-site.com为实际域名):
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # 或 unix:/tmp/php-cgi.sock,看你的 PHP 版本监听方式
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
- 保存后「重载配置」,再测试访问
/login或自定义路由是否正常 - 如果用了 Vue Router history 模式或前端 SPA 嵌套,需额外加一条
location ^~ /api/ { ... }把 API 请求明确转发给 PHP,避免被前端路由劫持
.env 和缓存必须重置,不能复用本地配置
上传后第一件事不是刷新页面,而是改 .env 并清空所有缓存。本地开发的 .env 通常含 APP_DEBUG=true、DB_HOST=127.0.0.1、REDIS_HOST=127.0.0.1,但生产环境数据库/Redis 往往不在本机,且 APP_DEBUG=true 会泄露敏感信息。
- 修改
/www/wwwroot/your-site.com/.env:确保APP_ENV=production、APP_DEBUG=false、APP_URL=https://your-site.com - 数据库填宝塔「数据库」里创建的实际库名、用户名、密码(不要用 root)
- 执行命令清缓存(在 SSH 中进入项目根目录):
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan route:clear - 再执行
php artisan config:cache(这步必须做,否则.env修改不生效) - 如果用了 Horizon 或队列,还要跑
php artisan horizon:publish(若用 Horizon)和php artisan queue:work --daemon(需配合 Supervisor 管理进程)
最容易漏的是 config:cache 和 storage/ 目录权限——前者导致 .env 不生效,后者让日志写不进 storage/logs/,查错时一片空白。










