Честно говоря, до сих пор не понял как в точности работают различные сочетания location, rewrite, break и last, хотя уже много раз перечитывал документацию.<br>Проблему удалось решить следующим хаком:<br><br>server {<br> server_name .<a href="http://hg.pydev.ru">hg.pydev.ru</a>;<br>
<br> location / { <br> if ($request_method = POST) {<br> rewrite (.*) /__post$1 last;<br> } <br> if ($request_method != POST) {<br> rewrite (.*) /__get$1 last;<br> } <br>
} <br><br> location ~ ^/__get {<br> rewrite ^/__get(.*) $1 break;<br> include fastcgi_params;<br> fastcgi_param PATH_INFO $uri;<br> fastcgi_param SCRIPT_NAME ''; <br>
<br> fastcgi_pass unix:/var/run/www/hg.pydev.ru.sock;<br> } <br><br> location ~ ^/__post {<br> auth_basic "closed site";<br> auth_basic_user_file /web/hg.passwd;<br> rewrite ^/__post(.*) $1 break;<br>
include fastcgi_params;<br> fastcgi_param PATH_INFO $uri;<br> fastcgi_param SCRIPT_NAME ''; <br> fastcgi_param REMOTE_USER $remote_user;<br><br> fastcgi_pass unix:/var/run/www/hg.pydev.ru.sock;<br>
} <br>}<br><br><br><div class="gmail_quote">23 января 2009 г. 15:59 пользователь Igor Sysoev <span dir="ltr"><<a href="mailto:is@rambler-co.ru">is@rambler-co.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Thu, Jan 22, 2009 at 03:16:21PM +0300, Борис Долгов wrote:<br>
<br>
> А что если сделать поведение настраиваемым? Ведь есть случаи, когда надо и<br>
> первое, и второе.<br>
<br>
</div>Тут есть два варианта:<br>
<br>
1) разрешить proxy_pass в limit_except:<br>
<br>
proxy_pass ...<br>
<br>
limit_except GET {<br>
proxy_pass ...<br>
}<br>
<br>
2) наследовать proxy_pass/fastcgi_pass/memcached_pass и вводить директиву,<br>
запрещающее наследование:<br>
<br>
proxy_pass ...<br>
<br>
limit_except GET {<br>
default_handler;<br>
}<br>
<br>
default_handler в данном случае означает цепочу обработчиков статики:<br>
<br>
ngx_http_random_index_module<br>
ngx_http_index_module<br>
ngx_http_autoindex_module<br>
ngx_http_dav_module<br>
ngx_http_gzip_static_module<br>
ngx_http_static_module<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
> 22 января 2009 г. 11:35 пользователь Igor Sysoev <<a href="mailto:is@rambler-co.ru">is@rambler-co.ru</a>> написал:<br>
><br>
> > On Thu, Jan 22, 2009 at 06:11:59AM +0600, Grigoriy wrote:<br>
> ><br>
> > > Здравствуйте. Помогите, пожалуйста, настроить mercurial & nginx - уже<br>
> > > всю голову сломал.<br>
> > > Я нашёл в рассылке эту тему: <a href="http://www.lexa.ru/nginx-ru/msg20780.html" target="_blank">http://www.lexa.ru/nginx-ru/msg20780.html</a><br>
> > > Делаю как там написано - всё работает (с авторизацией).<br>
> > > Но, авторизация на GET запросы мне не нужна, только на POST (изменение<br>
> > данных).<br>
> > ><br>
> > > Добавляю в конфиг следующие строки:<br>
> > > limit_except GET {<br>
> > > auth_basic "closed site";<br>
> > > auth_basic_user_file /web/hg.passwd;<br>
> > > }<br>
> > ><br>
> > > Получаю неработающий push:<br>
> > > lorien@lorien:/tmp/foo$ hg push<br>
> > > pushing to <a href="http://hg.pydev.ru/foo" target="_blank">http://hg.pydev.ru/foo</a><br>
> > > searching for changes<br>
> > > http authorization required<br>
> > > realm: closed site<br>
> > > user: lorien<br>
> > > password:<br>
> > > abort: HTTP Error 404: Not Found<br>
> > ><br>
> > > Подскажите, как это побороть?<br>
> > ><br>
> > > Здесь можно посмотреть полный конфиг server секции:<br>
> > <a href="http://dumpz.org/4938/" target="_blank">http://dumpz.org/4938/</a><br>
> > > Для запуска использую такой скрипт: <a href="http://dumpz.org/4939/" target="_blank">http://dumpz.org/4939/</a><br>
> ><br>
> > Проблема в том, что fastcgi_pass не наследуется в limit_except.<br>
> > Из-за этого запрос обрабатывается как статический файл.<br>
> > В случае proxy_pass это проблема решается добвалением proxy_pass внутрь<br>
> > limit_except. Для fastcgi_pass это на данный момент не разрешается.<br>
> ><br>
> > В общем, я пока в раздумьях - наследовать proxy_pass/fastcgi_pass в<br>
> > limit_except или нет.<br>
> ><br>
> ><br>
> > --<br>
> > Игорь Сысоев<br>
> > <a href="http://sysoev.ru" target="_blank">http://sysoev.ru</a><br>
> ><br>
> ><br>
><br>
><br>
> --<br>
> С уважением, Борис Долгов.<br>
> icq 77556665<br>
> e-mail <a href="mailto:boris@dolgov.name">boris@dolgov.name</a><br>
<br>
</div></div>--<br>
<div><div></div><div class="Wj3C7c">Игорь Сысоев<br>
<a href="http://sysoev.ru" target="_blank">http://sysoev.ru</a><br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>WBR, Grigoriy Petukhov<br><a href="http://web-brains.com">http://web-brains.com</a><br>