siteorigin / laravel-page-cache
将响应缓存为磁盘上的静态文件,以实现快速页面加载。
Requires
- php: >=7.4
- ext-dom: *
- laravel/framework: ^8.0
- siteorigin/laravel-kernel-crawler: ^0.1
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^6.7
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^5.2
Suggests
- illuminate/console: Allows clearing the cache via artisan
This package is auto-updated.
Last update: 2024-09-08 16:09:25 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安装说明。