Varnish + NGINX: Use Wordpress em domain.tld/blog como servidor backend separado, não no bloco de localização

Varnish + NGINX: Use Wordpress em domain.tld/blog como servidor backend separado, não no bloco de localização

Quero servir um back-end wordpress NGINX sempre que o usuário visitar www.domain.tld/blog. Eu sei que posso usar backends diferentes com o Varnish assim:

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

Eu sei que poderia usar um separado location ^~ /blog {}no NGINX, mas isso tem a seguinte desvantagem: Se eu usar www.domain.tld/blogno wordpress WP_HOMEe WP_SITEURLvariáveis ​​alguns plugins não funcionam corretamente. Portanto, preciso entregar o wordpress sem o final /blogno final como um vhost independente.

Então, o que eu realmente quero alcançar é:

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

O principal é que o conteúdo blog.domain.tld/some-postseja exibido como www.domain.tld/blog/some-post. Porém, blog.domain.tldo blog não deve ser acessível publicamente, pois isso significaria conteúdo duplicado.

Então, como eu poderia blog.domain.tld/some-post"resolver" www.domain.tld/blog/some-postusar Varnish e NGINX e, ao mesmo tempo, tornar blog.domain.tldo mundo não acessível?

Espero que isso tenha sido compreensível :)

PS: Não é necessário usar blog.domain.tld- isso é apenas um exemplo, também pode ser um 127.0.0.1:8008vhost, não importa.

Responder1

A peça a seguir vcl_recvfornecerá o que você deseja, reescrevendo o URL que o back-end verá:

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

No entanto, não entendo o que são esses plug-ins e por que devem ser tolerados :)

informação relacionada