Можно ли кешировать мультиязычный сайт с Reverse Proxy без языка в URL?
Сайт поддерживает 3 языка, информация о выбранном пользователем языке хранится в Cookies. То есть, зайдя на страницу /about и меняя язык сайта, пользователь всегда будет на URL /about, никаких префиксов языка не добавляется.
Теперь нужно реализовать кеширование с использованием ReverseProxy (например Varnish или SymfonyReverseProxy).
Как только первый пользователь заходит на сайт, кешируется вся страница с языком EN (по дефолту). Дальше переключение языка не работает, т.к. Varnish изменения в URL не видит, да и URL не меняется же.
Вопрос - как решать такую проблему? Можно ли это обойти?
Погуглив, увидел советы что лучше все-таки указывать в URL язык:
/en/about
/ru/about
/be/about
Тогда Varnish будет кешировать все правильно, и переключение языков заработает вновь.
На сколько я понял, хедер Vary: Accept-language не может здесь помочь, так как он устанавливается браузером и при смене языка через Cookies остается неизменным.
Alex T.: Бывают варианты когда поисковики не нужны, например saas CRM система закрытая формой авторизации. В таком случае кеширование вещь нужная, индексация вещь вредная для безопасности данных.
Автор не пробовал посмотреть какие евенты есть у прокси, наверное есть читать\писать кеш, можно ли повесить лисенер который будет перед чтением, перед записью примешивать к имени кеша язык из куков ?
С технической точки зрения, погуглив, это осуществимо. Теперь хочется понять - а хорошая ли это практика иметь дело с куками на уровне прокси? Или все же вариант, когда язык указан в URL лучше?
Макс: У меня на симфони CRM система и игра. Не там, не там смысла от языка в урле никакого нет. К тому же в обеих системах сидят юзеры с разными языковыми настройками, и тут один решает другому кинуть ссылку, а в ссылке передан язык интерфейса, получается что тот кто получает и открывает ссылку меняет свою локаль. Мне наприер сидя на англоязычном интерфейсе нет никакого смысла при открытии ссылки с карточкой клиента в CRM внезапно получать испанский интерфейс.
Поэтому от языка в урле я и отказался.
Просто висит листенер который чекает куку, если куки нет - чекаю настройки профиля пользователя, если авторизован, если гость то ставлю дефолтный английский.
WarGot: хороший довод по поводу ссылок и языка в урле. Вобщем провел я несколько часов, настроил Apache так, чтобы он брал значение языка из куки, создавал кастомный header "X-Language", и добавил Vary: X-Language. В теории это позволяет делать версии одной страницы для каждого языка, а на практике - страница кешируется, и браузер потом отдает свой локальный кеш, "не пуская" запрос далее до Apache.
Я в полном непонимании как решить эту проблему :) Что-то фундаментальное упущено