Мне нужно реализовать сотни перенаправлений URL-адресов, и я не совсем уверен, где лучше всего и наиболее эффективно реализовать блок перенаправления: на сервере Varnish или на сервере Nginx. Архитектура проиллюстрирована ниже:
Я склонен реализовать ее на сервере Varnish, поскольку это первый порт захода после CDN.
Сообщите, пожалуйста, о слабых местах или потенциальных проблемах с этим. Спасибо.
На самом деле я думаю, вам следует реализовать перенаправления в nginx. Вот почему:
Varnish действительно может создавать синтетические перенаправления , но он должен пройти длинную цепочку сравнений if
для каждого запроса, которая становится медленнее, чем больше перенаправлений вы добавляете. . Это O ( n ).
В nginx вы должны создать карту
старых и новых URL-адресов, как показано ниже. Поскольку карта
хранится в хэш-таблицах, поиск выполняется намного быстрее, примерно O (журнал n ). Разница не важна при нескольких редиректах, но после сотен она может стать заметной. После 57 000 он будет очень медленным в лаке.
Кроме того, лак теперь может кэшировать перенаправления, вместо того, чтобы синтетически воссоздавать их каждое. запрос.
Настройка в nginx выглядит так: вы создаете карту
старых и новых URL-адресов, например:
map $uri $new_uri {
/sofa.html /living/sofas/
/beds.html /bedroom/beds/
}
Затем в блоке server
, который будет выполнять перенаправления, вы просто добавляете тест, чтобы увидеть, соответствует ли один из URL-адресов, и перенаправляете, если он совпал:
if ($new_uri) {
return 301 $new_uri;
}