sgpatil/laravel-varnish

让 Varnish 和 Laravel 相互配合

1.0.2 2017-04-25 07:17 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:35:12 UTC


README

Latest Version on Packagist Build Status SensioLabsInsight Quality Score StyleCI Total Downloads

此包提供了一种在 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-CacheableCache-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)。请参阅许可文件以获取更多信息。