Laravel中如何配置网站维护模式_Laravel开启与关闭维护模式命令【教程】

11次阅读

laravel维护模式通过生成storage/framework/down jsON文件实现全站503拦截,php artisan down可设–message、–retry、–allow参数,php artisan up删除该文件关闭;静态资源、Artisan命令等不受影响。

Laravel中如何配置网站维护模式_Laravel开启与关闭维护模式命令【教程】

维护模式在 Laravel 中不是“页面开关”,而是通过中断请求生命周期实现的全站拦截,php artisan down 生成的是一个带时间戳和可选消息的 storage/framework/down 文件,Laravel 启动时会检查它并提前返回 503 响应。

如何开启维护模式(含自定义消息与重试时间)

默认执行 php artisan down 就会启用维护模式,但生产环境通常需要更精细控制:

  • --message:设置用户看到的提示文本,比如 php artisan down --message="系统升级中,请稍候"
  • --retry:指定 http 响应头 Retry-After 的秒数,浏览器/爬虫可据此延迟重试,例如 --retry=60 表示 60 秒后重试
  • --allow:白名单 IP,允许特定地址绕过维护(调试用),支持单个 IP 或 CIDR,如 --allow=192.168.1.100--allow=10.0.0.0/8

命令执行后,Laravel 会在 storage/framework/down 写入 json 数据,包含 timemessageretryallowed 字段 —— 这个文件是判断依据,不是 html 页面。

如何关闭维护模式

直接运行:

php artisan up

该命令会删除 storage/framework/down 文件。如果文件被手动修改或权限异常导致删除失败,artisan up 仍会报错,此时需手动清理:

  • 确认 storage/framework 目录可写
  • 检查 storage/framework/down 是否存在且非空
  • 必要时用 rm storage/framework/downlinux/macos)或 del storageframeworkdownwindows)手动清除

维护模式下哪些请求仍能访问?

Laravel 默认只拦截应用层请求,以下几类不受影响:

  • 静态资源(public/ 下的 css、JS、图片等),只要 Web 服务器(nginx/apache)配置正确,它们完全绕过 PHP
  • 未经过 public/index.php 的请求,比如直接访问 storage/app/xxx.jpg(若 Web 服务器未禁用)
  • Artisan 命令本身,如 php artisan tinkerphp artisan migrate 等仍可正常运行
  • 如果你在中间件中手动跳过了 CheckForMaintenanceMode,那对应路由也会逃逸(不推荐)

注意:CheckForMaintenanceMode 中间件位于 app/Http/Kernel.php$middleware 数组首位,不可移除或重排位置,否则维护模式失效。

常见问题与绕过陷阱

维护模式不是万能的,容易忽略的关键点:

  • 缓存未清导致前端仍显示旧页面:执行 php artisan view:clearphp artisan config:clear,避免缓存的响应头或视图干扰
  • CDN 或反向代理(如 Nginx)缓存了 503 响应:需主动刷新 CDN 缓存或临时禁用代理缓存逻辑
  • 使用 php artisan down --render="errors::503" 自定义模板时,必须确保该 Blade 模板存在且无语法错误,否则会抛出 ViewNotFoundException
  • 多服务器部署时,down 文件只存在于当前执行命令的机器上 —— 若用负载均衡,需同步该文件或改用集中式维护开关(如 redis 标志位)

真正起作用的只是那个 JSON 文件和框架启动时的一次性检查,别把它当成运行时状态管理工具。

text=ZqhQzanResources