Ich versuche, einen Rubygems Reverse-Proxy mit Varnish 4.1 zu implementieren. Clients in meinem Intranet haben kein allgemeines Outbound-NAT, daher muss Varnis intern alle Redirects verfolgen, vorzugsweise die 302 von rubygems.org und die Antwort vom CDN-Server zwischenspeichern.Folgende Weiterleitungen intern mit Varnish
Hier ist meine default.vcl:
vcl 4.0;
import std;
backend default {
.host = "rubygems.org";
.port = "80";
}
sub vcl_recv {
std.syslog(180, "doing vcl_recv");
std.syslog(180, "req.url = " + req.url);
}
sub vcl_deliver {
std.syslog(180, "doing vcl_deliver");
std.syslog(180, "resp.status = " + resp.status);
if (resp.status == 302) {
set req.url = resp.http.Location;
std.syslog(180, "restarting with req.url = " + req.url);
return(restart);
}
}
sub vcl_backend_fetch {
std.syslog(180, "doing vcl_backend_fetch");
std.syslog(180, "bereq.retries = " + bereq.retries);
}
sub vcl_backend_error {
std.syslog(180, "doing vcl_backend_error");
}
Wenn ich curl -i http://localhost/latest_specs.4.8.gz
, Varnish eine HTTP-503 und protokolliert wirft die folgenden:
varnishd[20384]: doing vcl_recv
varnishd[20384]: req.url = /latest_specs.4.8.gz
varnishd[20384]: doing vcl_backend_fetch
varnishd[20384]: bereq.retries = 0
varnishd[20384]: doing vcl_deliver
varnishd[20384]: resp.status = 302
varnishd[20384]: restarting with req.url = http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
varnishd[20384]: doing vcl_recv
varnishd[20384]: req.url = http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
varnishd[20384]: doing vcl_backend_fetch
varnishd[20384]: bereq.retries = 0
varnishd[20384]: doing vcl_deliver
varnishd[20384]: resp.status = 302
varnishd[20384]: restarting with req.url = http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
varnishd[20384]: doing vcl_recv
varnishd[20384]: req.url = http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
varnishd[20384]: doing vcl_backend_fetch
varnishd[20384]: bereq.retries = 0
varnishd[20384]: doing vcl_deliver
varnishd[20384]: resp.status = 302
varnishd[20384]: restarting with req.url = http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
varnishd[20384]: doing vcl_recv
varnishd[20384]: req.url = http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
varnishd[20384]: doing vcl_backend_fetch
varnishd[20384]: bereq.retries = 0
varnishd[20384]: doing vcl_deliver
varnishd[20384]: resp.status = 302
varnishd[20384]: restarting with req.url = http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
Es ist nicht die neue URL anfordert, auch zu sein scheint nach update req.url und Neustart der Anfrage.