sgpatil / laravel-varnish
让 Varnish 和 Laravel 相互配合
Requires
- php: ^5.5
- illuminate/console: ^5.2
- illuminate/http: ^5.2
Requires (Dev)
- orchestra/testbench: ^3.3.4
- phpunit/phpunit: 5.*
This package is not auto-updated.
Last update: 2024-09-20 19:35:12 UTC
README
此包提供了一种在 Laravel 中轻松使用 Varnish 4(或 5)的方法。它提供了一个路由中间件,当应用于路由时,将确保 Varnish 无条件地缓存响应。该包还包含一个从应用程序内部清除 Varnish 缓存的功能。
Postcardware
您可以自由使用此包(它是MIT 许可),但如果它进入您的生产环境,我们非常感谢您从您的家乡寄给我们一张明信片,说明您正在使用我们的哪些包。
我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。
最佳明信片将被发布在我们的网站上开源页面。
安装
我们假设您已经在服务器上安装了 Varnish。如果没有,请阅读这篇博客文章以了解如何安装它。
您可以通过 composer 安装此包
composer require spatie/laravel-varnish
首先:注册服务提供者
// config/app.php 'providers' => [ ... Spatie\Varnish\VarnishServiceProvider::class, ];
接下来,您必须使用以下命令发布配置文件
php artisan vendor:publish --provider="Spatie\Varnish\VarnishServiceProvider" --tag="config"
这是已发布文件的 内容
return [ /* * The hostname this Laravel app is listening to. */ 'host' => 'example.com', /* * The location of the file containing the administrative password. */ 'administrative_secret' => '/etc/varnish/secret', /* * The port where the administrative tasks may be sent to. */ 'administrative_port' => 6082, /* * The default amount of minutes that content rendered using the `CacheWithVarnish` * middleware should be cached. */ 'cache_time_in_minutes' => 60 * 24, /* * The name of the header that triggers Varnish to cache the response. */ 'cacheable_header_name' => 'X-Cacheable', ];
在发布的 laravel-varnish.php 配置文件中,您应将 host 键设置为正确的值。
将 Spatie\Varnish\Middleware\CacheWithVarnish 中间件添加到路由中间件
// app/Http/Kernel.php protected $routeMiddleware = [ ... 'cacheable' => \Spatie\Varnish\Middleware\CacheWithVarnish::class, ];
最后,您应在 VCL 中的 vcl_backend_response 函数中添加以下行(默认情况下,此文件位于服务器上的 /etc/varnish/default.vcl)
if (beresp.http.X-Cacheable ~ "1") {
unset beresp.http.set-cookie;
}
我们强烈建议使用由 mattiasgeniar/varnish-5.0-configuration-templates 仓库提供的 VCL,该仓库由 Mattias Geniar 创建。
用法
缓存响应
应缓存响应的路由应使用 cacheable 中间件。
// your routes file //will be cached by Varnish Route::group(['middleware' => 'cacheable'], function() { Route::get('/', 'HomeController@index'); Route::get('/contact', 'ContactPageController@index'); }); //won't be cached by Varnish Route::get('do-not-cache', 'AnotherController@index');
Varnish 应缓存此内容的分钟数可以在 laravel-varnish.php 配置文件中的 cache_time_in_minutes 键中配置。或者,您也可以使用中间件参数指定该值。
// Varnish will cache the responses of the routes inside the group for 15 minutes Route::group(['middleware' => 'cacheable:15'], function() { ... )};
幕后,中间件将为响应添加 X-Cacheable 和 Cache-Control。Varnish 将从 Laravel 的响应中删除所有 cookie。因此,请记住,由于 laravel_session cookie 也会被删除,因此在应用了 CacheWithVarnish 中间件的路由上,会话将无法工作。
从 Varnish 中清除缓存
有一个 artisan 命令可以清除缓存。这可以在部署脚本中派上用场。
php artisan varnish:flush
您也可以在代码中这样做以清除缓存
(new Spatie\Varnish\Varnish())->flush();
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
测试
$ composer test
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 freek@spatie.be 联系我们,而不是使用问题跟踪器。
鸣谢
关于 Spatie
Spatie 是一家总部位于比利时的安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
许可
MIT许可证(MIT)。请参阅许可文件以获取更多信息。