我希望每次用户访问时都提供 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;
}
}
我知道我可以在 NGINX 中使用单独的location ^~ /blog {}
,但这有以下缺点:如果我www.domain.tld/blog
在 wordpress 中使用WP_HOME
和WP_SITEURL
变量,某些插件将无法正常工作。所以我需要将 wordpress/blog
作为独立的 vhost 交付,而不在末尾添加尾随。
所以,我真正想要实现的是:
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
博客不应公开访问,因为这意味着重复的内容。
那么,我怎样才能使用 Varnish 和 NGINX进行blog.domain.tld/some-post
“解决”并同时使世界无法访问?www.domain.tld/blog/some-post
blog.domain.tld
我希望这是可以理解的:)
PS:我没有必要使用它blog.domain.tld
- 这只是一个例子,它也可以是一个127.0.0.1:8008
vhost,没关系。
答案1
下面的部分vcl_recv
将通过重写后端看到的 URL 来提供您想要的内容:
if (req.http.host == 'domain.tld' || req.http.host == 'www.domain.tld') {
set req.url = regsub(req.url, "^/blog/", "/");
}
但是我不明白这些插件是什么以及为什么应该容忍它们:)