我想在用戶每次造訪時提供 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_HOME
和WP_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/", "/");
}
但是我不明白這些插件是什麼以及為什麼應該容忍它們:)