Назад | Перейти на главную страницу

Varnish + NGINX: используйте Wordpress в domain.tld / blog как отдельный сервер Backend, а не в блоке местоположения

Я хочу обслуживать серверную часть 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 в 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 блог не должен быть общедоступным, поскольку это может означать дублирование контента.

Итак, как я мог сделать blog.domain.tld/some-post "решиться" на www.domain.tld/blog/some-post с Varnish и NGINX и одновременно blog.domain.tld мир недоступен?

Надеюсь, это было понятно :)

P.S .: Мне не обязательно использовать blog.domain.tld - это всего лишь пример, это также может быть 127.0.0.1:8008 vhost, не важно.

Следующий фрагмент в vcl_recv предоставит то, что вы хотите, переписав URL-адрес, который будет видеть серверная часть:

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

Однако я не понимаю, что это за плагины и почему их следует терпеть :)