Bu yazıda WordPress’in düzgün çalışması için Varnish ayarlarında yapmamız gereken değişikliklere bakacağız.
sudo nano /etc/varnish/default.vcl
ile Varnish ayar dosyasını açalım. Aşağıdaki örnek ayar dosyasındaki ayarları uygulayabilirsiniz.
Bu ayar dosyası aşağıdaki özellikleri ekler:
- Tema, yazı önizleme sayfasının düzgün çalışmasını sağlar
- Kuracağımız eklentilerle gerektiği zaman Varnish önbelliğinin boşaltılması için izin sağlar
- Giriş yapılmış kullanıcılara (admin) asla önbellekten sayfa vermez.
- Siteye giren ziyaretçilerin gerçek IP adreslerini nginx’e iletir.
# This is a basic VCL configuration file for varnish. See the vcl(7)
# man page for details on VCL syntax and semantics.
#
# Default backend definition. Set this to point to your content
# server.
#
backend default {
.host = "127.0.0.1";
.port = "8080";
}
acl purge {
"localhost";
"127.0.0.1";
}
#Drop any cookies sent to WordPress.
sub vcl_recv {
# Always cache the following file types for all users.
if ( req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$" ) {
unset req.http.cookie;
}
# Don't serve cached pages to logged in users
if ( req.http.cookie ~ "wordpress_logged_in" || req.url ~ "vaultpress=true" ) {
return( pass );
}
# Allow posts preview
if (req.url ~ "preview=true") {
return(pass);
}
if (!(req.url ~ "wp-(login|admin)")) {
unset req.http.cookie;
}
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
}
# Handle compression correctly. Different browsers send different
# "Accept-Encoding" headers, even though they mostly all support the same
# compression mechanisms. By consolidating these compression headers into
# a consistent format, we can reduce the size of the cache and get more hits.
# @see: http://varnish.projects.linpro.no/wiki/FAQ/Compression
if ( req.http.Accept-Encoding ) {
if ( req.http.Accept-Encoding ~ "gzip" ) {
# If the browser supports it, we'll use gzip.
set req.http.Accept-Encoding = "gzip";
}
else if ( req.http.Accept-Encoding ~ "deflate" ) {
# Next, try deflate if it is supported.
set req.http.Accept-Encoding = "deflate";
}
else {
# Unknown algorithm. Remove it and send unencoded.
unset req.http.Accept-Encoding;
}
}
if (req.http.host == "huse.in") {
set req.http.X-Forwarded-For = client.ip;
return(pass);
}
}
# Drop any cookies WordPress tries to send back to the client.
sub vcl_fetch {
if (!(req.url ~ "wp-(login|admin)")) {
unset beresp.http.set-cookie;
}
if (req.http.host == "huse.in") {
return(hit_for_pass);
}
}
sub vcl_pipe {
# # Note that only the first request to the backend will have
# # X-Forwarded-For set. If you use X-Forwarded-For and want to
# # have it set for all requests, make sure to have:
# # set bereq.http.connection = "close";
# # here. It is not set by default as it might break some broken web
# # applications, like IIS with NTLM authentication.
# return (pipe);
set bereq.http.connection = "close";
if (req.http.X-Forwarded-For) {
set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
}
}
#
sub vcl_pass {
# return (pass);
set bereq.http.connection = "close";
if (req.http.X-Forwarded-For) {
set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
}
}
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return (hash);
}
sub vcl_hit {
# return (deliver);
if (req.request == "PURGE") {
purge;
error 200 "Purged.";
}
}
#
sub vcl_miss {
# return (fetch);
if (req.request == "PURGE") {
purge;
error 200 "Purged.";
}
}