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;
    }
}

我知道我可以在 NGINX 中使用单独的location ^~ /blog {},但这有以下缺点:如果我www.domain.tld/blog在 wordpress 中使用WP_HOMEWP_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-postblog.domain.tld

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

PS:我没有必要使用它blog.domain.tld- 这只是一个例子,它也可以是一个127.0.0.1:8008vhost,没关系。

答案1

下面的部分vcl_recv将通过重写后端看到的 URL 来提供您想要的内容:

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

但是我不明白这些插件是什么以及为什么应该容忍它们:)

相关内容