varnish-generator

The simple way of generating general vcl file for varnish

Usage no npm install needed!

<script type="module">
  import varnishGenerator from 'https://cdn.skypack.dev/varnish-generator';
</script>

README

varnish vcl generator

Build Status Coverage Status npm Github Releases

Have a try http://aslant.site/varnish-generator/!

Installation

$ npm install varnish-generator -g

RUN

varnish-generator -c ./examples/config.json -t ./examples/default.vcl

varnishConfig

  • name The varnish instance's name

  • varnish The varnish version, support '4' and '5', default is '5'

  • stale The seconds of stale, default is 3

  • version The vcl version , default is new Date().toISOString()

  • timeout The timeout setting for all directors

    • connect The connect timeout, default is 2

    • firstByte The firstByte timeout, default is 5

    • betweenBytes The betweenBytes timeout, default is 2

  • urlPassList The url match(RegExp) the setting will be pass

  • hisForPassTTL The hit for pass ttl

  • hash The hash setting

  • directors Director list, Array

    • name The director's name

    • prefix The prefix of the url for the director, optional

    • host The host for the director, optional

    • type The algorithm of load balance, it can be 'fallback', 'hash', 'random', 'round_robin'. The default is 'round_robin'

    • timeout The director timeout setting, if not set , it will be use the global timeout setting

      • connect The connect timeout

      • firstByte The firstByte timeout

      • betweenBytes The betweenBytes timeout

    • backends The backend list, Array

      • ip The ip of backend

      • port The port of backend

      • weight The weight of backend, it's used for random and hash

{
  "name": "varnish-test",
  "stale": 2,
  "varnish": "4",
  "timeout": {
    "connect": 1,
    "firstByte": 2,
    "betweenBytes": 2
  },
  "urlPassList": [
    "cache-control=no-cache"
  ],
  "hisForPassTTL": 300,
  "hash": [
    "req.url",
    [
      "req.http.host",
      "server.ip"
    ]
  ],
  "directors": [
    {
      "name": "timtam",
      "prefix": "/timtam",
      "type": "fallback",
      "timeout": {
        "connect": 1,
        "firstByte": 1,
        "betweenBytes": 1
      },
      "backends": [
        {
          "ip": "127.0.0.1",
          "port": 3000
        },
        {
          "ip": "127.0.0.1",
          "port": 3010
        }
      ]
    },
    {
      "name": "dcharts",
      "prefix": "/dcharts",
      "host": "dcharts.com",
      "type": "hash",
      "hashKey": "req.http.cookie",
      "backends": [
        {
          "ip": "127.0.0.1",
          "port": 3020,
          "weight": 5
        },
        {
          "ip": "127.0.0.1",
          "port": 3030,
          "weight": 3
        }
      ]
    },
    {
      "name": "vicanso",
      "host": "vicanso.com",
      "type": "random",
      "backends": [
        {
          "ip": "127.0.0.1",
          "port": 3040,
          "weight": 10
        },
        {
          "ip": "127.0.0.1",
          "port": 3050,
          "weight": 5
        }
      ]
    },
    {
      "name": "aslant",
      "backends": [
        {
          "ip": "127.0.0.1",
          "port": 8000
        }
      ]
    }
  ]
}

How to use varnish better?

Please read my suggestion about using varnish.

How the cache of varnish is created?

How to run

varnishd -f ./default.vcl -p default_ttl=0 -p default_grace=1800 -p default_keep=10 -a :8001 -F

Using docker

docker pull vicanso/varnish

docker run -v $HOME/default.vcl:/etc/varnish/default.vcl -p 8001:80 -d --restart=always vicanso/varnish

License

MIT