Varnish + NGINX:在domain.tld/blog中使用Wordpress作為單獨的後端伺服器,而不是在位置區塊中

Varnish + NGINX:在domain.tld/blog中使用Wordpress作為單獨的後端伺服器,而不是在位置區塊中

我想在用戶每次造訪時提供 WordPress NGINX 後端服務www.domain.tld/blog。我知道我可以使用 Varnish 的不同後端,如下所示:

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

我知道我可以location ^~ /blog {}在 NGINX 中使用單獨的插件,但這有以下缺點:如果我www.domain.tld/blog在 wordpressWP_HOMEWP_SITEURL變數中使用某些插件將無法正常工作。所以我需要/blog作為一個獨立的虛擬主機來提供最後沒有尾隨的 WordPress。

所以,我真正想要實現的是:

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

最主要的是上面的內容blog.domain.tld/some-post應該顯示為www.domain.tld/blog/some-post。但是,blog.domain.tld部落格不應公開訪問,因為這意味著內容重複。

那麼,我怎麼能blog.domain.tld/some-post「解決」www.domain.tld/blog/some-post使用 Varnish 和 NGINX 的問題,同時又讓blog.domain.tld世界無法存取呢?

我希望這是可以理解的:)

PS:我沒有必要使用blog.domain.tld- 這只是一個例子,它也可以是127.0.0.1:8008虛擬主機,沒關係。

答案1

下面的部分vcl_recv將透過重寫後端將看到的 URL 來提供您想要的內容:

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

但是我不明白這些插件是什麼以及為什麼應該容忍它們:)

相關內容