2017 © Pedro Peláez
 

library laravel-varnish

Making Varnish and Laravel play nice together

image

spatie/laravel-varnish

Making Varnish and Laravel play nice together

  • Tuesday, July 31, 2018
  • by Spatie
  • Repository
  • 5 Watchers
  • 164 Stars
  • 5,395 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 18 Forks
  • 0 Open issues
  • 10 Versions
  • 29 % Grown

The README.md

Making Varnish and Laravel play nice together

Latest Version on Packagist run-tests Total Downloads, (*1)

This package provides an easy way to work with Varnish 4 (or 5) in Laravel. It provides a route middleware that, when applied to a route, will make sure Varnish will cache the response no matter what. The package also contains a function to flush the Varnish cache from within the application., (*2)

Support us

, (*3)

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products., (*4)

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall., (*5)

Installation

We assume that you've already installed Varnish on your server. If not read this blogpost to learn how to install it., (*6)

You can install the package via composer:, (*7)

``` bash composer require spatie/laravel-varnish, (*8)


The package will automatically register itself for Laravel 5.5+. If you are using Laravel < 5.5, you also need to add `Varnish\VarnishServiceProvider` to your `config/app.php` providers array: ```php \Spatie\Varnish\VarnishServiceProvider::class

Next if you use Laravel you must publish the config-file with:, (*9)

php artisan vendor:publish --provider="Spatie\Varnish\VarnishServiceProvider" --tag="config"

and if you use Lumen, you must copy config/varnish.php file to your application config folder., (*10)

This is the contents of the published file:, (*11)

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',
];

In the published varnish.php config file you should set the host key to the right value., (*12)

Add the Spatie\Varnish\Middleware\CacheWithVarnish middleware to the route middlewares., (*13)

For Laravel:, (*14)

// app/Http/Kernel.php
protected $routeMiddleware = [
...
   'cacheable' => \Spatie\Varnish\Middleware\CacheWithVarnish::class,
];

If you are using Lumen, you need to load config file before route middleware definition to your bootstrap/app.php:, (*15)

$app->configure('varnish');
$app->routeMiddleware([
...
   'cacheable' => \Spatie\Varnish\Middleware\CacheWithVarnish::class,
]);

Finally, you should add these lines to the vcl_backend_response function in your VCL (by default this is located at /etc/varnish/default.vcl on your server):, (*16)

if (beresp.http.X-Cacheable ~ "1") {
    unset beresp.http.set-cookie;
}

We highly recommend using the VCL provided the varnish-5.0-configuration-templates repo made by Mattias Geniar., (*17)

Usage

Caching responses

The routes whose response should be cached should use the cacheable middleware., (*18)

// 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');

The amount of minutes that Varnish should cache this content can be configured in the cache_time_in_minutes key in the laravel-varnish.php config file. Alternatively you could also use a middleware parameter to specify that value., (*19)


// Varnish will cache the responses of the routes inside the group for 15 minutes Route::group(['middleware' => 'cacheable:15'], function() { ... });

Behind the scenes the middleware will add an X-Cacheable and Cache-Control to the response. Varnish will remove all cookies from Laravel's response. So keep in mind that, because thelaravel_session cookie will be removed as well, sessions will not work on routes were the CacheWithVarnish middleware is applied., (*20)

Clearing cache from Varnish

There's an artisan command to flush the cache. This can come in handy in your deployment script., (*21)

php artisan varnish:flush

Under the hood flushing the cache will call the sudo varnishadm. To make it work without any hassle make sure the command is run by a unix user that has sudo rights., (*22)

You can also do this in your code to flush the cache:, (*23)

(new Spatie\Varnish\Varnish())->flush();

Changelog

Please see CHANGELOG for more information what has changed recently., (*24)

Testing

bash $ composer test, (*25)

Contributing

Please see CONTRIBUTING for details., (*26)

Security

If you've found a bug regarding security please mail security@spatie.be instead of using the issue tracker., (*27)

Credits

License

The MIT License (MIT). Please see License File for more information., (*28)

The Versions

31/07 2018

dev-master

9999999-dev https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

08/02 2018

2.0.2

2.0.2.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

09/09 2017

2.0.1

2.0.1.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

31/08 2017

dev-analysis-qJJBVD

dev-analysis-qJJBVD https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

31/08 2017

2.0.0

2.0.0.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

05/01 2017

1.0.1

1.0.1.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

02/01 2017

1.0.0

1.0.0.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

30/12 2016

0.0.3

0.0.3.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

29/12 2016

0.0.2

0.0.2.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish

09/12 2016

0.0.1

0.0.1.0 https://github.com/spatie/laravel-varnish

Making Varnish and Laravel play nice together

  Sources   Download

MIT

The Requires

 

The Development Requires

spatie laravel-varnish