跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Laravel的Maintenance Mode如何对特定IP开放访问? (secret选项)

php artisan down --secret 用于启用维护模式并生成绕过凭证,仅允许携带匹配 ?secret=xxx 参数的请求访问,其他所有请求返回503;该机制基于URL参数校验,不涉及IP、User-Agent等网络信息判断。 什么是
php artisan down --secret
的作用
php artisan down --secret
并不是用来“对特定 IP 开放访问”的功能,它生成的是一个绕过维护模式的临时访问凭证(即 secret token),本质是 URL 后缀校验机制。Laravel 不会根据 IP 白名单做判断,而是检查请求中是否携带了匹配的
secret
参数。 如何用
--secret
实现“仅限自己访问” 虽然不基于 IP,但你可以把 secret 当作私密入口钥匙,只在自己的 浏览器 或调试工具中使用。关键在于:这个 secret 仅在当前维护模式下有效,且每次执行
php artisan down --secret=xxx
都会覆盖旧值。
php artisan down --secret="mydevkey"
启用维护模式,并允许通过
/?secret=mydevkey
访问 访问地址变成类似
https://yoursite.com/?secret=mydevkey
所有其他未带该参数的请求,包括你本机其他标签页、Postman、 curl ,默认返回 503 该 secret 不校验来源 IP、User-Agent 或 Referer,纯靠保密性 —— 所以别写死在代码里或提交到 Git 为什么不能直接靠
--secret
做 IP 限制 Laravel 内置的维护模式中间件
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode
只做两件事:检查
storage/framework/down
文件是否存在,以及比对
request()->input('secret')
是否匹配文件内容。它完全不读取
$_SERVER['REMOTE_ADDR']
或任何网络层信息。 如果你真需要 IP 白名单,必须手动扩展: Comet AI 浏览器 下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。 下载
php artisan down # 然后在 app/Http/Middleware/CheckForMaintenanceMode.php 中重写 handle() 方法(或新建中间件替换): public function handle($request, Closure $next) { if (file_exists($this->downFile)) { $data = json_decode(file_get_contents($this->downFile), true); $allowedIps = $data['allowed_ips'] ?? ['127.0.0.1', '::1'];
    if (! in_array($request->ip(), $allowedIps) && 
        $request->input('secret') !== ($data['secret'] ?? null)) {
        throw new MaintenanceModeException();
    }
}

return $next($request);
} 注意:这要求你自定义维护文件格式(比如写 JSON 而非纯文本),并修改
php artisan down
命令行为(需重写 Artisan 命令或改用 shell 脚本写入)。 容易被忽略的关键点 维护模式的 secret 是明文写在
storage/framework/down
文件里的,只要能读取该文件(比如通过目录遍历、日志泄露、部署脚本误输出),别人就能绕过。生产环境务必确保
storage/
不可 Web 访问,且不要在错误页面或日志中打印该文件内容。

相关文章