Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fwd: Обработка заголовков протокола Mercurial.
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@xxxxxxxxx>
>
> > On Wed, Jan 25, 2012 at 09:24:50AM +0400, Eugene Mamin wrote:
> > > 2012/1/25 Andrey N. Oktyabrski <ano@xxxxxxxxx>
> > >
> > > > 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@xxxxxxxxx
> > http://mailman.nginx.org/mailman/listinfo/nginx-ru
> >
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
--
Ruslan Ermilov
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|