ПРОЕКТЫ 


  АРХИВ 


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: Fwd: Обработка заголовков протокола Mercurial.



Да, попробовал телнетом постучать прямо на 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@xxxxxxxxx>
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

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.