siteorigin/laravel-page-cache

将响应缓存为磁盘上的静态文件,以实现快速页面加载。

0.1.3 2021-03-09 11:46 UTC

README

Laravel Page Cache 是一个静态页面缓存包。它深受 Joseph Silber 的 Page Cache 包的启发,并从中分叉出来。这个包采取了略微不同的方向,因此您应该检查两者以确定哪个更适合您。

如果您将此包与 我们的预取 Turbolinks 包、快速 CDN 和用于您网站任何动态组件的 Livewire 结合使用,那么您可以得到一个动态网站,具有静态网站的速度,而无需离开 Laravel。

安装

发布到 Packagist 后将提供安装说明。

您可以使用以下方式发布配置文件。

php artisan vendor:publish --provider="SiteOrigin\PageCache\PageCacheServiceProvider" --tag="config"

默认情况下,缓存文件存储在您的应用程序存储公共路径中。因此,您需要确保它与您的实际公共路径链接。为此,只需运行 php artisan storage:link。您可以在此处了解更多信息 here

Web 服务器配置

您需要告诉您的 web 服务器去查找

中间件

您可以通过向 web 中间件组 添加 \SiteOrigin\PageCache\Middleware\CacheResponse::class 来将页面缓存添加到所有您的 web 路由中。

您还可以使用 page-cache 别名来将缓存添加到单个路由中。例如以下内容

Route::get('/', function () {
    return view('welcome');
})->name('home')->middleware('cache.headers:public;max_age=2628000;etag', 'page-cache');

page-cache 别名已为您注册,因此您不需要再次添加此内容。

缓存查询字符串

此包也支持缓存查询字符串。这对于缓存分页 URL 特别有用。默认情况下,它支持分页查询字符串,但如果您想缓存其他内容,则可以添加自定义配置。

验证查询字符串

验证每个请求并返回除了 200 响应之外的内容非常重要,如果请求未正确形成,这可以防止攻击者通过大量请求随机查询字符串 URL 来填充您的服务器磁盘。

例如,对于分页 URL,如果页码超出范围,则应返回 404。

public function index(Request $request)
{
    $articles = Article::simplePaginate(5);

    return view('articles.index', [
        'articles' => $articles->count() ? $articles : abort(404)
    ]);
}

默认页面缓存已确保 page 查询字符串参数是整数。

禁用分页缓存

如果您不想缓存分页 URL,您可以在 page-cache.php 配置文件中禁用此功能。

将以下行更改为 false 'cache_pagination' => true,

缓存自定义查询字符串 URL

如果您想缓存自定义查询字符串 URL,您可以在 page-cache.php 配置文件中将自定义正则表达式添加到 'query_patterns' => [ ... ]

与列表中任何一个表达式匹配的查询字符串都将被缓存。你应在查询字符串中尽可能多地执行验证,并在控制器中进行额外的验证。如果请求似乎无效,则返回 404

使用自定义磁盘

默认情况下,此包的服务提供程序将注册一个指向 storage_path('app/public/page-cache')page-cache 本地磁盘。您可以通过在 filesystems.php 中添加自己的 page-cache 磁盘来更改此行为。

在我亲自测试之后,我会更新这一部分,但您可以使用它将缓存页面存储在云存储中,然后使用多源CDN检查云存储中的缓存文件,只有在未找到时才向您的web服务器发送请求。这可能与Fastly的多个后端URL重写一起实现。

控制台命令

清除页面缓存

使用 php artisan page-cache:clear 清除整个页面缓存。您还可以使用 --touch 选项重新抓取网站以预热缓存。

刷新页面

使用 php artisan page-cache:refresh 刷新网站上每个页面。这将仅遍历所有现有的缓存页面并刷新已更改的任何页面。

安装说明

运行 php artisan page-cache:install:apache 以获取PHP安装说明,或运行 php artisan page-cache:install:nginx 以获取Nginx安装说明。