ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] =?koi8-r?B?UmU6IFthcGFjaGUtdGFsa10gUmU6IFthcGFjaGUtdGFsa10g/tTPLQ==?==?koi8-r?B?1M8gzsXIz9LP28XFINTXz9LJ1NPRIFttb2RfcmV3cml0ZSArIG1vZA==?==?koi8-r?B?X2FjY2VsXQ==?=



On Fri, 11 Oct 2002, BeerBong wrote:

> Вот тестовая схема, которая работает на mod_proxy и не работает на
> mod_accel - проверено.
> 
> httpd.conf
> ------------------
> <VirtualHost>
>    ServerName test_server
>    DocumentRoot /usr/web/test_server/data
>    <IfModule mod_dir.c>
>      DirectoryIndex index.html index.asp
>    </IfModule>
>    <IfModule !mod_perl.c>
>      RewriteEngine On
>      RewriteRule ^(.*\.asp)$ http://test_server:81$1 [P,L]
>    </IfModule>
>    <IfModule mod_perl.c>
>     PerlModule Apache::Test
>     <Location /index.asp>
>      SetHandler perl-script
>      PerlHandler Apache::Test
>     </Location>
>    </IfModule>
> </VirtualHost>

Эта схема работает следующим образом. mod_dir пытается найти индекс для "/"
и последовательно делает сабреквесты для index.html (опаньки) и
index.asp (файл с таким именем нашёлся). Как я уже писал, стандартный
mod_rewrite игнорирует прокированные правила для сабреквестов.

Найдя индекс, mod_dir делает внутренний редирект на /index.asp.
Так как это уже не сабреквест, то он обрабатывается mod_rewrite'ом
и в результате уходит к бэкенду.

Я считаю эту схему неправильной, так как работает она только тогда, когда
DocumentRoot фронтенда и бэкенда совпадают. Если же их разнести, то
на фронтенде придётся дублировать ирерахию пустых каталогов бэкенда
и в каждый из них помещать пустой index.asp.

> Когда index.asp отсутвует - действительно не срабатывает, но как
> только мы его туда кладем сервер на запрос "/" выдает "Hello from
> backend!" на mod_proxy и продолжает говорить Forbidden на mod_accel.

Что подтверждает мои слова выше.
На мой взгляд, лучше добавить правило, которое бы прокидывало запросы,
кончающиеся на "/", на бэкенд, и уже бэкенд искал бы для них индексы.
Или же сразу же прокидывать их на индексы.

> А если поведение непатченного mod_rewrite отличается достаточно
> сильным образом от патченного, то это скорее баг чем фича...

mod_accel патчит mod_rewrite на предмет проксирования сабреквестов,
но это не необходимость, а бонус. То есть, для mod_accel это
непринципиально. Если это не нужно, то достаточно убрать #ifndef/#endif
из mod_rewrite:

        if (r->main != NULL &&
            (p->flags & RULEFLAG_IGNOREONSUBREQ ||
#ifndef MOD_ACCEL
             p->flags & RULEFLAG_PROXY          ||
#endif
             p->flags & RULEFLAG_FORCEREDIRECT    )) {
            continue;
        }


Игорь Сысоев
http://sysoev.ru

=============================================================================
=               Apache-Talk@lists.lexa.ru mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =



 




Copyright © Lexa Software, 1996-2009.