2
votes

I would like to use Varnish for Symfony and for my eZ Platform CMS.I have followed this tutorial to set up my Varnish : http://book.varnish-software.com/4.0/chapters/Getting_Started.html#exercise-install-varnish

So I have the following working server :

  • Varnish listening on port 80
  • Varnish Uses backend on localhost:8080

  • Apache listening on localhost:8080

I have also setted up my eZ Platform ezplatform.yml and ezplatform.conf, to disable the default cache and enable varnish (I guess).

I added these two line to ezplatform.conf folling the documentation https://doc.ez.no/display/TECHDOC/Using+Varnish:

SetEnv USE_HTTP_CACHE 0 
SetEnv TRUSTED_PROXIES "0.0.0.0"

I put 0.0.0.0 for Varnish server IP address because netstat -nlpt retreive me the following addresses for Varnish servers :

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11151/varnishd      
tcp        0      0 127.0.0.1:1234          0.0.0.0:*               LISTEN      11151/varnishd  

So I guess this is the right value. Then, I added the following lines to my ezplatform.yml (checked the documentation above) :

ezpublish:
    http_cache:
        purge_type: http
    siteaccess:
        list: [site]
        groups:
            http_cache:
              purge_servers: 0.0.0.0:80

Varnish and httpd restarted well. Then, I checked if Varnish was used by local website, checking the HTTP headers, and I got this :

Via: "1.1 varnish-v4"
X-Varnish: "32808"

Which is, I guess, a good progress. Anyaway, In the Symfony profiler, I still have the following intels :

Cache Information
   Default Cache    default
   Available Drivers    Apc, BlackHole, FileSystem, Memcache, Redis, SQLite
   Total Requests   349
   Total Hits   349
Cache Service: default
   Drivers  FileSystem
   Calls    349
   Hits     349
   Doctrine Adapter     false
   Cache In-Memory  true

Is it normal to still get this ? Shouldn't it be something like Default Cache : varnish instead of default ? How can I check if my Varnish is currently working on my site instead of the symfony default cache ?

Btw, here is my vcl file :

#
# This is an example VCL file for Varnish.
#
# It does not do anything by default, delegating control to the
# builtin VCL. The builtin VCL is called when there is no explicit
# return statement.
#
# See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/
# and https://www.varnish-cache.org/trac/wiki/VCLExamples for more examples.

# Marker to tell the VCL compiler that this VCL has been adapted to the
# new 4.0 format.
vcl 4.0;
import directors;

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_init {
    new backs = directors.hash();
    backs.add_backend(default, 1);
}

sub vcl_recv {
    # Happens before we check if we have this in cache already.
    #
    # Typically you clean up the request here, removing cookies you don't need,
    # rewriting the request, etc.
    set req.http.X-cookie = req.http.cookie;
    if (!req.http.Cookie ~ "Logged-In") {
         unset req.http.Cookie;
    }
    if (req.url ~ "\.(png|gif|jpg|png|css|js|html)$") {
         unset req.http.Cookie;
    }
}

sub vcl_backend_response {
    # Happens after we have read the response headers from the backend.
    #
    # Here you clean the response headers, removing silly Set-Cookie headers
    # and other mistakes your backend does.
}

sub vcl_deliver {
    # Happens when we have all the pieces we need, and are about to send the
    # response to the client.
    #
    # You can do accounting or modifying the final object here.
}

Even if it is not finish, I don't get how the Symfony default cache is still working, since I have disabled it in the configuration file.

Thank you for your help.

1

1 Answers

0
votes

if you see something like

Via: "1.1 varnish-v4"
X-Varnish: "32808"

your varnish is working. Why disable the symfony cache though? You can use both... Might or might not make sense. That pretty much depends on the program logic.

If you want to gain more insight into your varnish during developement you can add the following lines:

sub vcl_deliver {
  if (obj.hits > 0) { # Add debug header to see if it's a HIT/MISS
    set resp.http.X-Cache = "HIT";
  } else {
    set resp.http.X-Cache = "MISS";
  }
  # show how ofthe the object created a hit so far (reset on miss)
  set resp.http.X-Cache-Hits = obj.hits;
}