В RoR есть вроде спец опция отключающая его механизмы оптимизации работы с мемкешд после чего он должен писать без выкрутасов. Дебагали след образом - мемкеш демон запущен с -vv чтоб видеть запросы и ответы, запросы давали правда вместо telnet по nc вроде. В общем получается что nginx выдаёт приблизительно то же что и nc, попробую ковырять API рубивское
<br><br><br><div><span class="gmail_quote">04.06.07, <b class="gmail_sendername">Boguk Maxim</b> <<a href="mailto:astar@rambler-co.ru">astar@rambler-co.ru</a>> написал(а):</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>
<div dir="ltr" align="left"><font size="2">Я бы попробовал руками сделать telnet
memcached_server memcached_ip<br>и сделать руками<br>get имя_ключа<br><br>И
посмотреть есть там лишние символы в начале данных или нет.<br><br>То как
сериализует и десериализует RoR данные для memcached знает только он и его
авторы. Не<span> </span>исключено что в первые
несколько байт идут какие то служебные флаги/данные про которые nginx ничего не
знает.<br><br>Я сильно подозреваю что проблема именно в этом.<br><br>PS: если не
секрет каким образом проводился 'дебаг мемкаши' ?</font></div>
<div> </div>
<div><font size="2"></font> </div>
<blockquote style="border-left: 2px solid rgb(0, 0, 255); padding-left: 5px; margin-left: 5px; margin-right: 0px;">
<div dir="ltr" align="left" lang="ru">
<hr>
<font face="Tahoma" size="2"><b>From:</b> <a href="mailto:owner-nginx-ru@mail.sysoev.ru" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">owner-nginx-ru@mail.sysoev.ru</a>
[mailto:<a href="mailto:owner-nginx-ru@mail.sysoev.ru" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">owner-nginx-ru@mail.sysoev.ru</a>] <b>On Behalf Of </b>TDz
TDz<br><b>Sent:</b> Sunday, June 03, 2007 7:18 PM<br><b>To:</b>
<a href="mailto:nginx-ru@sysoev.ru" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">nginx-ru@sysoev.ru</a><br><b>Subject:</b> Re: bugreport: при чтении из memcached
препендятся случайные символы<br></font><br></div><div><span class="e" id="q_112f5ee5a82ee4c3_1">
<div></div>Лицезреть проблему можно на <a href="http://test.avaxhome.ru/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://test.avaxhome.ru/</a><br>Там почти всё
из мемкеши и соответственно кракозябли везде, ситуация не меняется при
использовании apt-get версий nginx/memcached <br>Данные в мемкеш пишет само
приложение (Ruby on Rails), оно же читает их верно оттуда (без символов),
дебаг мемкаши тоже никаких сомволов лишних не показал<br>Вот
конфиг:<br><br>user www-data;<br>worker_processes
8;<br><br>error_log
logs/error.log;<br>pid
logs/nginx.pid;<br><br>events {<br> worker_connections
2048;<br> use epoll;<br>}<br><br>http
{<br> include
/etc/nginx/mime.types;<br> default_type
application/octet-stream; <br><br> access_log
off;<br><br>
sendfile on;<br>
tcp_nopush on;<br><br>
keepalive_timeout 65;<br>
tcp_nodelay
on;<br> gzip off;<br><br><br> ##
rails settings<br> upstream mongrel <br>
{<br> server <a href="http://172.16.0.2:8000" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.2:8000</a>;<br>
server <a href="http://172.16.0.2:8001" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.2:8001</a>;<br>
server <a href="http://172.16.0.2:8002" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.2:8002</a>
;<br> server <a href="http://172.16.0.2:8003" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.2:8003</a>;<br>
server <a href="http://172.16.0.1:8000" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.1:8000</a>;<br>
server <a href="http://172.16.0.1:8001" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.1:8001</a>;<br>
server <a href="http://172.16.0.1:8002" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.1:8002</a>;<br>
server <a href="http://172.16.0.1:8003" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.1:8003</a>;<br>
}<br><br> server<br>
{<br> listen
80;<br> server_name <a href="http://test.avaxhome.ru" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">test.avaxhome.ru</a>;<br><br>
# setting for backend proxying<br>
proxy_set_header Host
$http_host;<br> proxy_set_header
X-Real-IP $remote_addr;<br>
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
<br> proxy_intercept_errors
off;<br><br><br> # static
content<br> location ~*
^/(javascripts|stylesheets|images)/.*$
{<br> root
/srv/www/localhost/avaxhome/current/public;<br>
expires 30d; <br>
}<br><br><br> # fully dynamic
content<br> location ~*
^/(private_messages|news_mgr|search|login|comments).*$
{<br>
proxy_pass <a href="http://mongrel" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mongrel</a>;
break;<br> }
<br><br><br><br> # cached dynamic
content<br> location /
{<br>
default_type
text/html;<br><br>
# POST requests always go to
backend<br>
if ($request_method = POST )
{<br>
proxy_pass <a href="http://mongrel" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mongrel</a>;
break;<br>
}<br><br>
set $memcached_key
$uri;<br>
memcached_pass <a href="http://172.16.0.2:11211" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">172.16.0.2:11211</a>;<br><br>
error_page 404 = /backend; #key not found
<br>
error_page 502 = /backend; #mem not
responding<br>
}<br><br><br> # backend
settings<br> location = /backend
{<br>
internal;<br>
proxy_pass <a href="http://mongrel" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mongrel</a>;<br>
}<br> }<br>}<br><br><br>
<div><span class="gmail_quote">03.06.07, <b class="gmail_sendername">Igor
Sysoev</b> <<a href="mailto:is@rambler-co.ru" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">is@rambler-co.ru</a>>
написал(а):</span>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On
Sun, Jun 03, 2007 at 08:42:48AM +0400, Vladimir V. Perepelitsa
wrote:<br><br>> А случаем у тебя не Client-Transfer-Encoding: chunked?
<br><br>Да, похоже на чанки. В конце ответа всегда должен быть виден
0.<br>Вопрос в том, как эти ответы попали в memcached.<br><br>> On
6/1/07, TDz TDz <<a href="mailto:tdz@modestus.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">tdz@modestus.org</a>> wrote: <br>>
>Хеллоу хотел сообщить о странном поведении nginx<br>> >после
перехода на более новую версию nginx при чтении напрямую из
memcached<br>> >перед самой информацией выдаются 2 случайных символа,
для каждой страницы <br>> >они не меняются при рефреше но от страницы
к странице отличаются<br>> ><br>> >nginx version:
nginx/0.5.20<br>> >built by gcc 4.1.2 20061115 (prerelease) (Debian
4.1.1-21 ядро <a href="http://2.6.20.4" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">2.6.20.4</a><br>> >оптимизация
под Opteron) из нестандартных configure arguments:<br>>
>--with-cc-opt=-O3<br>> ><br>> >Ошибок в логе на этот счёт
нет. Проверял данные в мемкеше чистые<br>> ><br>> >Я откачусь на
более старую версию - если это не known issue подскажите<br>>
>какие<br>> >параметры нужно снять для анализа
проблемы<br><br><br>--<br>Игорь Сысоев<br><a href="http://sysoev.ru" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://sysoev.ru
</a><br><br></blockquote></div><br></span></div></blockquote></div>
</blockquote></div><br>