sakshamgorey/laravel-maintenance-signal

GitHub: sakshamgorey/laravel-maintenance-signal

该 Laravel 扩展包通过在维护模式的 503 响应中添加可配置的 HTTP header,帮助外部 uptime 监控工具区分计划内维护和真正的服务故障。

Stars: 0 | Forks: 0

# Laravel 维护信号 为 Laravel 维护模式响应添加一个可配置的 HTTP header,以便 uptime 监控工具能够区分计划内维护和真正的故障停机。 ## 为什么需要它 普通的 `503 Service Unavailable` 状态是模糊的。外部监控工具无法确切知道应用是处于 Laravel 计划内维护模式,还是真的发生了故障。 不带 header 的 `503` 表示真正的故障停机或未知错误。 带有 header 的 `503` 表示计划内的 Laravel 维护。 该扩展包通过将 Laravel 的维护 middleware 替换为一个小型子类,仅在 Laravel 维护响应中添加该 header。 ## 安装 ``` composer require saksham/laravel-maintenance-signal ``` ## 发布配置 ``` php artisan vendor:publish --tag=maintenance-signal-config ``` ## 用法 ### Laravel 11、12 和 13 在 `bootstrap/app.php` 中,将 Laravel 的默认维护 middleware 替换为该扩展包的 middleware: ``` use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Middleware; use Saksham\MaintenanceSignal\Http\Middleware\PreventRequestsDuringMaintenance as MaintenanceSignalMiddleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { $middleware->use([ \Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks::class, \Illuminate\Http\Middleware\TrustProxies::class, \Illuminate\Http\Middleware\HandleCors::class, MaintenanceSignalMiddleware::class, \Illuminate\Http\Middleware\ValidatePostSize::class, \Illuminate\Foundation\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]); }) ->create(); ``` ### Laravel 10 在 `app/Http/Kernel.php` 中,将: ``` \Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class, ``` 替换为: ``` \Saksham\MaintenanceSignal\Http\Middleware\PreventRequestsDuringMaintenance::class, ``` ## 配置 ``` MAINTENANCE_SIGNAL_ENABLED=true MAINTENANCE_SIGNAL_HEADER=X-Laravel-Maintenance-Mode MAINTENANCE_SIGNAL_VALUE=active ``` 默认配置: ``` return [ 'enabled' => env('MAINTENANCE_SIGNAL_ENABLED', true), 'header' => env('MAINTENANCE_SIGNAL_HEADER', 'X-Laravel-Maintenance-Mode'), 'value' => env('MAINTENANCE_SIGNAL_VALUE', 'active'), ]; ``` ## 响应示例 ``` php artisan down --retry=60 --refresh=15 ``` ``` HTTP/1.1 503 Service Unavailable Retry-After: 60 Refresh: 15 X-Laravel-Maintenance-Mode: active ``` ## Uptime 监控示例 通用逻辑: ``` if status == 503 and header X-Laravel-Maintenance-Mode == active: suppress alert else if status >= 500: alert ``` Better Stack: ``` Treat a 503 response with X-Laravel-Maintenance-Mode: active as planned maintenance. Alert on 5xx responses missing that header. ``` UptimeRobot: ``` Use a keyword/header monitor where available, or route webhook alerts through the generic logic above. ``` Pingdom: ``` Use a custom check or alert integration that inspects response headers before notifying. ``` AI 代理: ``` Agents that triage incidents can treat X-Laravel-Maintenance-Mode: active as planned maintenance instead of an unknown outage. ``` 通用 curl: ``` curl -I https://example.com ``` 预期结果: ``` HTTP/2 503 x-laravel-maintenance-mode: active ``` ## 安全说明 该 header 仅表示应用正有意处于维护模式。它不会泄露密钥、路径、异常详情或服务器内部信息。 ## 测试 ``` composer test ``` ## 许可证 MIT
标签:ffuf, Laravel, OpenVAS, PHP, Syscall, Web开发, 中间件, 系统可用性, 运维监控