Άδειασμα μνήμης cache σε Varnish 3

Τεχνικές και μόνο Συζητήσεις για WEB hosting servers, Mail servers, DNS servers. Όχι αναζήτηση υπηρεσιών εδώ!

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
andreaslll
Δημοσιεύσεις: 680
Εγγραφή: 16 Νοέμ 2011 04:00

Άδειασμα μνήμης cache σε Varnish 3

Δημοσίευση από andreaslll » 03 Νοέμ 2012 00:44

Καλησπέρα. Έχω στήσει Varnish έκδοση 3 και θέλω να αδειάζω τη μνήμη του από την wordpress σελίδα μου χωρίς να εγκαταστήσω κάποιο παραπάνω plugin. Έχω ήδη το w3tc που υποτίθεται ότι υποστηρίζει purge σε Varnish.

Είμαι σχεδόν σίγουρος ότι κάτι δεν έχω ρυθμίσει σωστά σε σχέση με τις ip (localhost ή εξωτερική) όμως ακόμη δεν έχω βρει πως να το κάνω. Ενδεχομένως χρειάζεται να χρησιμοποιήσω κάπου το secret, και δεν το έχω κάνει ακόμη γιατί δεν έχω καταλάβει τι παίζει με αυτό. Αν κάποιος γνωρίζει, ας δώσει ένα χέρι βοήθειας.

Κώδικας: Επιλογή όλων

backend default {
     .host = "127.0.0.1";
     .port = "8080";
}
acl purge {
	 "localhost";
         "127.0.0.1";
}
sub vcl_recv {
   if (req.request == "PURGE") {
     if (!client.ip ~ purge) {
       error 405 "Not allowed.";
     }
     return(lookup);
   }
  if (req.http.Accept-Encoding) {
#revisit this list
    if (req.url ~ "\.(gif|jpg|jpeg|swf|flv|mp3|mp4|pdf|ico|png|gz|tgz|bz2)(\?.*|)$") {
      remove req.http.Accept-Encoding;
    } elsif (req.http.Accept-Encoding ~ "gzip") {
      set req.http.Accept-Encoding = "gzip";
    } elsif (req.http.Accept-Encoding ~ "deflate") {
      set req.http.Accept-Encoding = "deflate";
    } else {
      remove req.http.Accept-Encoding;
    }
  }
  if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
    unset req.http.cookie;
    set req.url = regsub(req.url, "\?.*$", "");
  }
  if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
    set req.url = regsub(req.url, "\?.*$", "");
  }
  if (req.http.cookie) {
    if (req.http.cookie ~ "(wordpress_|wp-settings-)") {
      return(pass);
    } else {
      unset req.http.cookie;
    }
  }
}

sub vcl_fetch {
  if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") {
    return (hit_for_pass);
  }
  if ( (!(req.url ~ "(wp-(login|admin)|login)")) || (req.request == "GET") ) {
    unset beresp.http.set-cookie;
   set beresp.ttl = 1h;
  }
  if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
    set beresp.ttl = 365d;
  }
}

sub vcl_deliver {
# multi-server webfarm? set a variable here so you can check
# the headers to see which frontend served the request
#   set resp.http.X-Server = "server-01";
   if (obj.hits > 0) {
     set resp.http.X-Cache = "HIT";
   } else {
     set resp.http.X-Cache = "MISS";
   }
}
sub vcl_hit {
  if (req.request == "PURGE") {
    set obj.ttl = 0s;
    error 200 "OK";
  }
}

sub vcl_miss {
  if (req.request == "PURGE") {
    error 404 "Not cached";
  }
} 
Αυτό είναι το default.vcl και στο w3tc έχω τσεκάρει το αντίστοιχο checkbox και έχω βάλει τη διεύθυνση 127.0.0.1 στο πεδίο. Χρειάζεται κάτι ακόμη για να δουλέψει;

Σημειώνω ότι όταν πάω να κάνω purge από τη γραμμή εντολών με varnishadm μου βγάζει

Κώδικας: Επιλογή όλων

Authentication required

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Άδειασμα μνήμης cache σε Varnish 3

Δημοσίευση από Cha0s » 03 Νοέμ 2012 14:42

Καταρχήν απόσο γνωρίζω το W3TC δεν αδειάζει την cache αλλά κάνει purge την cache στα συγκεκριμένα urls όπου γίνονται αλλαγές (πχ add/edit ενός post).

Ωστόσο κοιτώντας πρόχειρα τον κώδικα του Varnish.php στο W3TC δεν ξέρω αν στέλνει το request στο localhost για το οποίο είναι ρυθμισμένο να κάνει accept το VCL σου.

Δοκίμασε στο VLC σου στο acl purge να προσθέσεις και το hostname του μηχανήματος σου, καθώς και το domain του site σου καλού κακού και ξαναδοκίμασε μήπως παίξει έτσι.

Γενικά όταν στέλνεις το method PURGE τσεκάρει από πια IP ήρθε και βάση αυτού κάνει το authentication οπότε το secret απόσο καταλαβαίνω δεν χρειάζεται για το συγκεκριμένο πράγμα με το συγκεκριμένο VCL.


Btw στο δικό μου installation του varnish δεν έχω πρόβλημα με το varnishadm.
Δεν μου ζητάει authentication.

Με τι options τρέχεις τον Varnish;


Εδώ έχει αρκετές πληροφορίες ίσως κάτι βοηθήσει :)
https://www.varnish-software.com/static ... ation.html

andreaslll
Δημοσιεύσεις: 680
Εγγραφή: 16 Νοέμ 2011 04:00

Άδειασμα μνήμης cache σε Varnish 3

Δημοσίευση από andreaslll » 03 Νοέμ 2012 15:52

Thanks για την απάντηση, θα τα δοκιμάσω μόλις βρω χρόνο και θα επανέλθω.

andreaslll
Δημοσιεύσεις: 680
Εγγραφή: 16 Νοέμ 2011 04:00

Άδειασμα μνήμης cache σε Varnish 3

Δημοσίευση από andreaslll » 04 Νοέμ 2012 22:44

Δοκίμασα αυτά που μου είπες, είδα τις πληροφορίες στο link, έκανα κάποιες ακόμα αλλαγές στο congifuration και πάλι δεν έγινε κάτι.

Το varnish το τρέχω με τις επιλογές

Κώδικας: Επιλογή όλων

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,128m"
Δοκίμασα επίσης στο w3tc να ορίσω το admin port 6082 -μπας και του φταίει αυτό- στη διεύθυνση του varnish και έβγαζε σφάλμα μόλις άλλαζα κάποιο άρθρο.

Μέχρι στιγμής ο μόνος τρόπος που ξέρω για να κάνω purge τη μνήμη για μια σελίδα είναι να κάνω restart την υπηρεσία χάνοντας όλες τις σελίδες.

andreaslll
Δημοσιεύσεις: 680
Εγγραφή: 16 Νοέμ 2011 04:00

Άδειασμα μνήμης cache σε Varnish 3

Δημοσίευση από andreaslll » 04 Νοέμ 2012 23:19

Βρήκα ότι αν τρέξω την εντολή

Κώδικας: Επιλογή όλων

varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret ban.url ".*"
μπορώ να κάνω ban (με ορολογία varnish 2 purge δηλαδή) σε όλα τα url μαζί.

Είναι μια πρόοδος!

Αυτό που θέλω τώρα είναι να εστιάζω σε συγκεκριμένο url. Ό,τι βρήκα από το net δεν μου δούλεψε μέχρι τώρα
πχ

Κώδικας: Επιλογή όλων

varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret "ban req.http.host == tositemou.gr && req.url ~ ^tralalalalala/$"
ή
varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret ban.url "^tositemou.gr/$"

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Άδειασμα μνήμης cache σε Varnish 3

Δημοσίευση από Cha0s » 04 Νοέμ 2012 23:37

Το Varnish support του W3TC δεν το έχω δοκιμάσει καθόλου να είμαι ειλικρινής.

Σε Wordpress δοκίμασα πρόσφατα το 'WordPress Varnish as a Service' για την διαχείριση της Cache.
Είναι αυτόνομο δεν επηρεάζει απόσο καταλαβαίνω το W3TC σε κάτι.
Ααν και με τον varnish μπροστά δεν χρειάστηκε το W3TC ή κάτι άλλο αντίστοιχο σε δικά μου setups. Τραβάει όλο το ζόρι ο varnish οπότε το page caching σε επίπεδο php δεν έχει ιδιαίτερη χρήση.

Δεν δουλεύει ωστόσο out of the box. Είναι buggy απότι καταλαβαίνω.
Δεν κρατάει σωστά τα στοιχεία για τον varnish στην βάση.

Δεν είναι δύσκολο όμως να το κάνεις να παίξει.

Με ένα phpMyAdmin ή όποιο άλλο εργαλείο σε βολεύει μπορείς να κάνεις manually edit τα πεδία στην database και θα ξεκινήσει να σου δουλεύει το purge σε κάθε νέο post/comment κλπ.

Ας υποθέσουμε αρχικά ότι έχεις το installation του varnish με τα παρακάτω στοιχεία:

Admin port: 6082
Admin ip: 127.0.0.1 / localhost
Secret: xxxxxxxxxxx

Το VCL σου μου φαίνεται οκ δεν νομίζω να χρειαστεί κάποια αλλαγή.
Τα περι Purge δεν θα χρειαστούν ωστόσο. Το plugin θα μιλάει απευθείας με τον varnish μεσω του admin port.
Αλλά άστα προς το παρόν δεν ενοχλούν.

Εγκαθιστάς το plugin στο wordpress και το κάνεις activate.

Πας στην database του wordpress, στον πίνακα wp_options (ή ότι άλλο prefix έχεις αντί για wp_) και ενημερώνεις τις παρακάτω εγγραφές με τα παρακάτω στοιχεία.
Όπου xxxxxxxx το Secret.

Κώδικας: Επιλογή όλων

	-option_name-		-option_value-

wpvarnish_addr				127.0.0.1
wpvarnish_port				6082
wpvarnish_secret			xxxxxxxxxxx
wpvarnish_timeout			1
wpvarnish_use_version		3
wpvarnish_use_adminport		1
wpvarnish_server			1

wpvarnish_addr_1			127.0.0.1
wpvarnish_port_1			6082
wpvarnish_secret_1			xxxxxxxxxxx
wpvarnish_timeout_1			1
wpvarnish_use_adminport_1	6082
wpvarnish_use_version_1		3
wpvarnish_server_1			1

Αν πας μετά στο admin του wordpress στο Settings > Varnish aaS θα πρέπει λογικά να σου έχει συμπληρωμένα τα στοιχεία για τον server 1.

Δοκίμασε να πατήσεις 'Test Connection to Varnish'

Και θα πρέπει να σου επιστρέψει κάτι τέτοιο:

Κώδικας: Επιλογή όλων

INFO - Testing Server 1
OK - Connection to Server
INFO - Using Admin Port
OK - Authentication
OK - Cache flush
Αν όλα έχουν πάει καλά, όλο το frontend γίνεται cache από τον varnish για μία ώρα και γίνεται expire η cache όταν γινεται νέο post/comment κλπ.

Αν το τεστ δουλεύει αλλά και πάλι δεν σου cachάρει (btw πως το τσεκάρεις; Με firebug; ) μάλλον φταίει κάτι στο VCL σου ή κάποιο widget από 3rd party site μπορεί να επηρεάζει με τίποτα cookies.

Αν δεν δουλεύει ούτε το τεστ πόσταρε τι θα σου βγάλει να το δούμε :)

Απάντηση

Επιστροφή στο “Apache, IIS, DNS Servers”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες