ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: memcache_key и HTTP Accept-Language


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: memcache_key и HTTP Accept-Language
  • From: "Sergey Shepelev" <temotor@xxxxxxxxx>
  • Date: Fri, 5 Dec 2008 15:17:58 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=gzq1Y3UMjJQw+cwpym5d8ebgWfad+7LqQUCA4ZdLTLs=; b=VI2xqmeuyhO2bjMFPglE0ZYyaBg5Tuw6BCCLi26nSxv2sEab+OFNK2K9zcHB6qvbJt aw7a6zvdbMTbMi8ycx0lOI3/srG0RgbyCgfRyfCdB1c9GCVGMcZs7EBYsBh9WSdEkWwZ D5oua6oszPe7W31ShXL2kuL3/kN2zIIpFWq8Q=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=UvMZcA5fhCQv/zGkCkxJGUk0r5ThuB6f9F5erIm1RkFO4Lf1ltkNpkN8FYMkbaF6Rn +egKMU24v+xXH4iBPVjplymMwyMLPLrZMI9QZpoCval2AtNehrHY2wFGPxuJSDDKwPtF t4I1tuTq3og/tEtvhOrF3f2UgIoIC+1p3Nv2I=
  • In-reply-to: <6611330.6291228468633652.JavaMail.root@xxxxxxxxxxxxxx>
  • References: <2d8fb9950812040910u699c616cieeace0070ff5258f@xxxxxxxxxxxxxx> <6611330.6291228468633652.JavaMail.root@xxxxxxxxxxxxxx>

Отпишусь на следущей неделе когда будет тестовая нагрузка.

2008/12/5 Valery Kholodkov <valery+nginxru@xxxxxxxxxxx>:
>
> Я ошибся. Читать, конечно же, "Поэтому выбор en верен".
>
> Я просто слежу за ходом Ваших мыслей и пытаюсь выяснить, сможете ли Вы найти 
> элегантное решение существующими средствами.
>
> ----- Исходное сообщение -----
> От: "Sergey Shepelev" <temotor@xxxxxxxxx>
> Кому: nginx-ru@xxxxxxxxx
> Отправленные: Четверг, 4 Декабрь 2008 г 18:10:58 GMT +01:00 Амстердам, 
> Берлин, Берн, Вена, Рим, Стокгольм
> Тема: Re: memcache_key и HTTP Accept-Language
>
> Я написал de,en для краткости.
> В этом (accept-language de,en) случае у юзера сломанный бравзер,
> потому что формат заголовка не соблюдён, если вы хотите придираться.
> Перефразируем это в
>
> Accept-Language: de;q=0.9,en;q=0.7
>
> и поведение не меняется, юзер предпочитает de.
>
> 2008/12/4 Valery Kholodkov <valery+nginxru@xxxxxxxxxxx>:
>>
>> В этом случае пользователь не предпочитает de, а предпочитает в равной 
>> степени как de, так и en. Поэтому выбор de верен.
>>
>> ----- Исходное сообщение -----
>> От: "Sergey Shepelev" <temotor@xxxxxxxxx>
>> Кому: nginx-ru@xxxxxxxxx
>> Отправленные: Четверг, 4 Декабрь 2008 г 16:40:38 GMT +01:00 Амстердам, 
>> Берлин, Берн, Вена, Рим, Стокгольм
>> Тема: Re: memcache_key и HTTP Accept-Language
>>
>> Да, я тоже думаю, что таких несравнимо мало.
>>
>> Но может быть accept-language de,en
>> а владелец создаст контент для en и de.
>> Мы увидим, что ru нету и попробуем взять en. А юзер предпочитает de.
>>
>> 2008/12/4 Борис Долгов <boris@xxxxxxxxxxx>:
>>> А если просто проверять, начинается ли accept-encoding с ru? Если да -
>>> ставить русский, если нет - ставить английский. Думаю, таких, кто будет
>>> ходить с броузеров, где какой-нить mn;q=0.9;ru;q=0.8;en;q=0.7, несравненно
>>> мало, чтобы ими пренебречь.
>>>
>>> 4 декабря 2008 г. 1:28 пользователь Sergey Shepelev <temotor@xxxxxxxxx>
>>> написал:
>>>>
>>>> Спасибо, здорово.
>>>> 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@xxxxxxxxxxxxx>:
>>>> > Здравствуйте, Сергей.
>>>> >
>>>> > Хост и язык можно регэкспами через 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@xxxxxxxxxxxxx
>>>> > ICQ# 166233339
>>>> > http://michael.mindmix.ru/
>>>> > Без бэкапа по жизни.
>>>> >
>>>> >
>>>> >
>>>
>>>
>>>
>>> --
>>> С уважением, Борис Долгов.
>>> icq 77556665
>>> e-mail boris@xxxxxxxxxxx
>>>
>>
>> --
>> Regards,
>> Valery Kholodkov
>>
>
> --
> Regards,
> Valery Kholodkov
>


 




Copyright © Lexa Software, 1996-2009.