Ich möchte bei jedem Besuch des Benutzers ein WordPress NGINX-Backend bereitstellen www.domain.tld/blog
. Ich weiß, dass ich mit Varnish verschiedene Backends verwenden kann, wie folgt:
sub vcl_recv {
if (req.url ~ "^/blog/") {
set req.backend_hint = wordpress;
} else {
set req.backend_hint = default;
}
}
Ich weiß, dass ich einen separaten in NGINX verwenden könnte location ^~ /blog {}
, aber das hat folgenden Nachteil: Wenn ich www.domain.tld/blog
in WordPress WP_HOME
Variablen verwende WP_SITEURL
, funktionieren einige Plugins nicht richtig. Ich muss WordPress also ohne das Trailing /blog
am Ende als eigenständigen vhost ausliefern.
Was ich also eigentlich erreichen möchte, ist:
User -> www.domain.tld/blog (Varnish) -> blog.domain.tld (Wordpress NGINX)
Die Hauptsache ist, dass der Inhalt blog.domain.tld/some-post
als angezeigt werden sollte www.domain.tld/blog/some-post
. blog.domain.tld
Der Blog sollte jedoch nicht öffentlich zugänglich sein, da dies zu doppelten Inhalten führen würde.
Wie kann ich also mit Varnish und NGINX blog.domain.tld/some-post
eine „Auflösung“ erreichen und es gleichzeitig für die ganze Welt zugänglich machen?www.domain.tld/blog/some-post
blog.domain.tld
Ich hoffe das war verständlich :)
PS: Für mich ist die Verwendung nicht notwendig blog.domain.tld
– dies ist nur ein Beispiel, es könnte auch ein 127.0.0.1:8008
virtueller Host sein, das ist egal.
Antwort1
Der folgende Teil vcl_recv
liefert das Gewünschte, indem er die URL umschreibt, die das Backend sieht:
if (req.http.host == 'domain.tld' || req.http.host == 'www.domain.tld') {
set req.url = regsub(req.url, "^/blog/", "/");
}
Ich verstehe jedoch nicht, was das für Plugins sind und warum sie toleriert werden sollten :)