Varnish + NGINX: Verwenden Sie Wordpress in domain.tld/blog als separaten Backend-Server, nicht im Standortblock.

Varnish + NGINX: Verwenden Sie Wordpress in domain.tld/blog als separaten Backend-Server, nicht im Standortblock.

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/blogin WordPress WP_HOMEVariablen verwende WP_SITEURL, funktionieren einige Plugins nicht richtig. Ich muss WordPress also ohne das Trailing /blogam 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-postals angezeigt werden sollte www.domain.tld/blog/some-post. blog.domain.tldDer 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-posteine „Auflösung“ erreichen und es gleichzeitig für die ganze Welt zugänglich machen?www.domain.tld/blog/some-postblog.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:8008virtueller Host sein, das ist egal.

Antwort1

Der folgende Teil vcl_recvliefert 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 :)

verwandte Informationen