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 で別の を使用できることはわかっていますが、これには次の欠点があります。 wordpressと変数でlocation ^~ /blog {}使用すると、一部のプラグインが正しく動作しません。そのため、スタンドアロンの vhost として、末尾のなしで wordpress を配信する必要があります。www.domain.tld/blogWP_HOMEWP_SITEURL/blog

つまり、私が実際に達成したいのは次のことです。

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。これは単なる例であり、vhost でも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/", "/");
} 

しかし、それらのプラグインが何であるか、そしてなぜそれらを許容する必要があるのか​​理解できません :)

関連情報