> > Вот тестовая схема, которая работает на 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;
> }
Ok, все эти штучки-дрючки с index.asp и вообще с Apache::ASP для нас
пройденный этап (сейчас мы просто используем чистые Apache perl
handler, где таких проблем нет), но у нас куча сайтов написанных с
использованием этой технологии (штук 20) и
переделывать-пересматривать-тестировать старый shit, который
работает - не хочется, да и бонус этот с редиректом подзапросов нам,
видимо, не нужен.
Может в mod_accel сделать опцию при компиляции - включать эту фичу или
не включать. Каждый раз патчить патч к mod_rewrite при выходе нового
mod_accel не хочется :)
> Игорь Сысоев
> 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
=
>
=============================================================================
= 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 =