Re: memcache_key и HTTP Accept-Language

Борис Долгов boris at dolgov.name
Thu Dec 4 19:13:41 MSK 2008


Гм, а там возможны не только ru и en?
Тогда, наверно, можно смотреть по первому, и если его нет, отдавать en.

4 декабря 2008 г. 18:40 пользователь Sergey Shepelev <temotor at gmail.com>написал:

> Да, я тоже думаю, что таких несравнимо мало.
>
> Но может быть accept-language de,en
> а владелец создаст контент для en и de.
> Мы увидим, что ru нету и попробуем взять en. А юзер предпочитает de.
>
> 2008/12/4 Борис Долгов <boris at dolgov.name>:
> > А если просто проверять, начинается ли accept-encoding с ru? Если да -
> > ставить русский, если нет - ставить английский. Думаю, таких, кто будет
> > ходить с броузеров, где какой-нить mn;q=0.9;ru;q=0.8;en;q=0.7,
> несравненно
> > мало, чтобы ими пренебречь.
> >
> > 4 декабря 2008 г. 1:28 пользователь Sergey Shepelev <temotor at gmail.com>
> > написал:
> >>
> >> Спасибо, здорово.
> >> set оказался мощнее чем я думал.
> >>
> >> Только если правильно понимаю, ваш код неправильно обработает случай
> >>
> >> Accept-Language: en;q=0.9,ru;q=0.8
> >>
> >> то есть выберет русский, хотя юзер предпочитает английский. Но
> >> проблема глубже - бекенд не знает своего решения, относительно какой
> >> именно язык будет использован (там есть бекенд второго уровня, который
> >> отдает контент взамен на домен и список языков), поэтому он может
> >> положить в кеш контент по ключу списка языков, например домен#en,ru
> >>
> >> Т.е. что-то вроде
> >>
> >> if ($http_accept_language ~*
> >>
> >>
> "^(\w\w)-?\w?\w?(;q=\*|;q=\d\.\d),?(\w\w)-?\w?\w?(;q=\*|;q=\d\.\d),?(\w\w)-?\w?\w?(;q=\*|;q=\d\.\d),?")
> >> {
> >>  set $hislang "$1,$3,$5"
> >> }
> >>
> >> но нужны все языки, а не первые 3. И что будет, если указаны только
> >> один/два? "en,," "en,ru," ?
> >>
> >> Я понимаю, что больше двух языков в настройках почти никогда не бывает.
> >> Также я вижу несколько прагматичных решений с разными ограничениями,
> >> типа всё-таки брать первые два языка, остальных юзеров обрабатывать
> >> медленными бекендами, благо всё равно запас производительности
> >> большой. Но как всегда хочется чтоб и красиво и быстро и дешево.
> >>
> >> 2008/12/3 Михаил Монашёв <postmaster at softsearch.ru>:
> >> > Здравствуйте, Сергей.
> >> >
> >> > Хост и язык можно регэкспами через set установить
> >> > http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#set
> >> >
> >> > и из эти новых переменных потом формировать $memcached_key:
> >> >
> >> >    set  $myhost  $host;
> >> >    if ($host ~* "^.*\.([^.]+\.[^.]{2-4})$" ) {
> >> >        set  $myhost  $1;
> >> >    }
> >> >    set  $mylang  "en";
> >> >    if ($http_accept_language ~* "ru" ) {
> >> >        set  $mylang  "ru";
> >> >    }
> >> >    $memcached_key "parked#$myhost#$mylang"
> >> >
> >> > SS> Парковка доменов. Имеется маленькая кучка fastcgi бекендов,
> которые
> >> > SS> генерят динамику в зависимости от запрошенного HTTP Host и
> >> > SS> Accept-Language.
> >> > SS> На морде стоит nginx шестой ветки и проксирует всё подряд на
> >> > бекенды.
> >> > SS> Которые либо отдают страничку из кеша, либо генерят и кладут в
> кеш.
> >> >
> >> > SS> Так как бекенды по сравнению с nginx сильно медленные в целом и
> >> > SS> неасинхронные, хочется не проксировать *каждый* запрос на них, а
> >> > SS> задействовать http_memcached_module.
> >> > SS> Не знаю как составить ключ $memcached_key
> >> > "parked#test-host.tld#ru,en"
> >> > SS> из заголовков
> >> >
> >> > SS> Host: test-host.tld
> >> > SS> Accept-Language: ru-ru;q=1.0,en-us;q=0.9,*;q=0.8
> >> >
> >> > SS> хост понятно, это $host. И то, от него надо откусить www. если
> есть.
> >> >
> >> > SS> Уверен, что многие сталкивались с такой задачкой. Есть ли готовые
> >> > рецепты?
> >> >
> >> > SS> Писать свой сишный модуль не подходит.
> >> >
> >> > SS> Решаема ли задача в таких условиях?
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > --
> >> >
> >> > С уважением,
> >> > Михаил Монашёв, SoftSearch.ru
> >> > mailto:postmaster at softsearch.ru
> >> > ICQ# 166233339
> >> > http://michael.mindmix.ru/
> >> > Без бэкапа по жизни.
> >> >
> >> >
> >> >
> >
> >
> >
> > --
> > С уважением, Борис Долгов.
> > icq 77556665
> > e-mail boris at dolgov.name
> >
>



-- 
С уважением, Борис Долгов.
icq 77556665
e-mail boris at dolgov.name
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20081204/abcca494/attachment.html>


More information about the nginx-ru mailing list