Re: Fwd: Обработка заголовков протокола Mercurial.
Eugene Mamin
thedzhon на gmail.com
Ср Янв 25 09:47:04 UTC 2012
Да, попробовал телнетом постучать прямо на hg serve, получил ту же 500-ую
от меркуриала :)
В конфигурации задал следующие директивы, чтобы максимально приблизить
заголовки:
proxy_http_version 1.1;
proxy_set_header Host $host;
Теперь имеем такие данные (логи tcpdump):
http://ftp.dzhon.in/nginx_ -- запрос hg pull через nginx
http://ftp.dzhon.in/hg__ -- запрос hg pull напрямую к hg serve.
2012/1/25 Ruslan Ermilov <ru на nginx.com>
> On Wed, Jan 25, 2012 at 11:15:04AM +0400, Eugene Mamin wrote:
> > Вот лог самого nginx (нас интересует ?cmd=batch):
> > http://ftp.dzhon.in/nginx_error.log
> > Вот лог tcpdump -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) -
> > ((tcp[12]&0xf0)>>2)) != 0)': http://ftp.dzhon.in/nginx_dump
>
> От клиента к nginx:
> GET /concorde?cmd=batch HTTP/1.1
> Accept-Encoding: identity
> host: hg.dzhon.in
> vary: X-HgArg-1
> accept: application/mercurial-0.1
> user-agent: mercurial/proto-1.0
>
> От nginx к mercurial:
> GET /concorde?cmd=batch HTTP/1.0
> Host: mercurial_backend
> Connection: close
> Accept-Encoding: identity
> vary: X-HgArg-1
> accept: application/mercurial-0.1
> user-agent: mercurial/proto-1.0
>
> Поменялось: значение заголовка Host, версия HTTP и как
> следствие соединение стало не keepalive. Вроде как
> ничего страшного. Я думаю, но не уверен, что проблема
> в том, что по протоколу в запросе должно быть поле
> "X-HgArg1: cmds=...", но его почему-то нет, клиент,
> судя по tcpdump'у, его не посылает, а nginx его выдумать
> сам не может.
>
> Чтобы это подтвердить, можно подсоединиться к mercurial
> вручную (telnet/nc), и послать ему первый GET запрос.
> По идее вернёт тот же 500, по той же причине. Если вдруг
> не вернёт, а отработает нормально, попытаться найти в
> чём проблема, постепенно превращая первый запрос во
> второй.
>
> Если же и на первый запрос Mercurial вернёт 500, значит
> от клиента приходит "кривой" запрос, и чтобы попытаться
> понять, в чём же дело, нужно проанализировать разницу в
> заголовках запросов/ответов, с и без nginx.
>
> > 2012/1/25 Ruslan Ermilov <ru на nginx.com>
> >
> > > On Wed, Jan 25, 2012 at 09:24:50AM +0400, Eugene Mamin wrote:
> > > > 2012/1/25 Andrey N. Oktyabrski <ano на bestmx.ru>
> > > >
> > > > > On 25.01.12 07:12, Eugene Mamin wrote:
> > > > >
> > > > >> Могу лишь утверждать, что без nginx сам mercurial работает.
> > > > >>
> > > > > А он и с nginx работает:
> > > > >
> > > >
> > > > Привел конфигурацию к такому виду:
> > > > http://pastebin.com/TNvKpEgp
> > > >
> > > > Как следствие, получаю все тот же результат:
> > > > D:\Projects\CMaked\concorde>hg pull --debug
> > > > using http://hg.dzhon.in/concorde
> > > > sending capabilities command
> > > > pulling from http://hg.dzhon.in/concorde
> > > > query 1; heads
> > > > sending batch command
> > > > abort: HTTP Error 500: Internal Server Error
> > > >
> > > > Важно отметить, что это происходит только если клиентской машиной
> > > является
> > > > Windows. Но опять же, убираем посредника nginx и все работает.
> > >
> > > Было бы здорово увидеть заголовки до и после nginx.
> > > Тогда сразу бы стало понятно, в чём разница.
> > > Можно это сделать через tcpdump или wireshark на
> > > стороне Linux, или же средствами самого nginx.
> > >
> > > Если отлаживать средствами nginx, то отладочный лог
> > > лучше будет включить только для соединений с проблемным
> > > Windows-хостом. Как это сделать, написано тут:
> > > http://nginx.org/ru/docs/debugging_log.html
> > >
> > > _______________________________________________
> > > nginx-ru mailing list
> > > nginx-ru на nginx.org
> > > http://mailman.nginx.org/mailman/listinfo/nginx-ru
> > >
>
> > _______________________________________________
> > nginx-ru mailing list
> > nginx-ru на nginx.org
> > http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
> --
> Ruslan Ermilov
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20120125/4aee8d51/attachment-0001.html>
Подробная информация о списке рассылки nginx-ru