Я хочу обслуживать бэкенд 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
не доступным для всего мира?
Надеюсь, это было понятно :)
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/", "/");
}
Однако я не понимаю, что это за плагины и почему их следует терпеть :)