Varnish + NGINX: use Wordpress en domain.tld/blog como servidor backend independiente que no esté en el bloque de ubicación

Varnish + NGINX: use Wordpress en domain.tld/blog como servidor backend independiente que no esté en el bloque de ubicación

Quiero ofrecer un backend de WordPress NGINX cada vez que el usuario lo visite www.domain.tld/blog. Sé que puedo usar diferentes servidores con Varnish como este:

sub vcl_recv {
    if (req.url ~ "^/blog/") {
        set req.backend_hint = wordpress;
    } else {
        set req.backend_hint = default;
    }
}

Sé que podría usar uno separado location ^~ /blog {}en NGINX, pero esto tiene la siguiente desventaja: si uso www.domain.tld/blogen WordPress WP_HOMEy WP_SITEURLvariables algunos complementos no funcionan correctamente. Entonces necesito entregar WordPress sin el final /blogal final como un vhost independiente.

Entonces, lo que realmente quiero lograr es:

User -> www.domain.tld/blog (Varnish) -> blog.domain.tld (Wordpress NGINX)

Lo principal es que el contenido blog.domain.tld/some-postdebe mostrarse como www.domain.tld/blog/some-post. Sin embargo, blog.domain.tldel blog no debe ser accesible públicamente ya que esto significaría contenido duplicado.

Entonces, ¿cómo podría blog.domain.tld/some-post"resolver" www.domain.tld/blog/some-postcon Varnish y NGINX y al mismo tiempo hacer que blog.domain.tldel mundo no sea accesible?

Espero que esto haya sido comprensible :)

PD: No es necesario que lo use blog.domain.tld; esto es solo un ejemplo, también podría ser un 127.0.0.1:8008vhost, no importa.

Respuesta1

La siguiente pieza vcl_recvle proporcionará lo que desea al reescribir la URL que verá el backend:

if (req.http.host == 'domain.tld' || req.http.host == 'www.domain.tld') {
  set req.url = regsub(req.url, "^/blog/", "/");
} 

Sin embargo, no entiendo qué son esos complementos y por qué deberían tolerarse :)

información relacionada