memcache_key и HTTP Accept-Language
Dmitriy MiksIr
miksir at maker.ru
Thu Dec 4 20:18:32 MSK 2008
Sergey Shepelev пишет:
> Я к сожалению, не работал с map никогда, есть ньюанс, что бекенд может
> отдать для
map - это в общем хеш. Ключом будет Accept-Language, значнием - некая
переменная, которую уже к ключу приклеете.
http://sysoev.ru/nginx/docs/http/ngx_http_map_module.html
>
> Accept-Language: en;q=0.9,ru;q=0.8
>
> сейчас русский контент (потому что другого нет, несмотря на
> предпочтение юзера), а через полчаса - английский, потому что клиент
> добавил настройки для английского языка.
> Это не помешает использовать map?
Задача map тут одна - свести 30+ разнообразных Accept-Language к
меньшему количеству ключей. Т.е. если у нас поддерживается 4 языка, то
сводим к четырем значениям. Так как в nginx нет встроенного средства
получить из Accept-Language список языков в указанном приоритете, то
приходится делать это руками. Второй вариант - парсить на встроенном
перле и ставить эту переменную.
Далее, самый простой вариант - что бы для каждого из 4-х языков лежала
нужная страница. Минусы - кеш увеличится в 4 раза,плюсы - не нужно
делать fallback если страница в мемкеше не найдена. Так как с fallback
до конца не ясно - а какой ключ запрашивать дальше.
Если падать всегда на дефолный язык, то проблем не будет, правда тогда
получится косяк - запрашивает человек fr;q=0.5, en - а у нас в кеше нет
en страницы, но есть fr... но после ошибки поиска en странцы мы падаем в
дефаултный язык, который ru.
А как падать не на дефолтный, а на "следующий ожидаемый".. мне в голову
пока не приходит.
ИМХО, тут самый красивый по быстродействию вариант будет перековырять
сам мемкеш, что бы он сам определял, какой же ключ отдать на основе
переданной строчки из Accept-Language.
More information about the nginx-ru
mailing list