On Wed, 13 Feb 2002, Ilya Basalaev wrote:
> On Wed, 13 Feb 2002, Alexey Zvyagin wrote:
>
> > Привет всем!
> >
> > > mod_realip не подходит для mod_access. Для этого лучше взять
> > > http://develooper.com/code/mpaf/
> >
> > Спасибо!
> > Именно этот модуль и подсказал более элегантное решение для бекенда, на
> > котором установлен mod_perl
> >
> > use Apache::Constants ();
> > sub My::ProxyRemoteAddr ($) {
> > my $r = shift;
> >
> > # we'll only look at the X-Forwarded-For header if the requests
> > # comes from our proxy at localhost
> > return Apache::Constants::OK unless ($r->connection->remote_ip eq
> > "127.0.0.1");
> >
> > if (my ($ip) = $r->header_in('X-Real-IP') =~ /^(\d+\.\d+\.\d+\.\d+)$/o)
> > {
> > $r->connection->remote_ip($ip);
>
> Если я не ошибаюсь, то это решение некорректно.
> После пристального перечитывания документации по mod_realip, я
> действительно нашел там, что
>
> ---
> Модуль изменяет IP адрес клиента в поле r->connection->remote_ip
> на адрес, заданный в заголовке "X-Real-IP" или на последний адрес,
> заданный в заголовке "X-Forwarded-For".
>
> [...skipped...]
>
> Нужно заметить, что эта замена никак не влияет на модули mod_access и
> mod_status, поскольку они используют поле r->connection->remote_addr.
> ---
>
> Но тогда, видимо, его и нужно менять в Вашем модуле. А то, что меняется
> сейчас, с успехом может делать и mod_realip.
Дело в том, что
$r->connection->remote_ip($ip);
совсем не тоже самое, что
r->connection->remote_ip = ip;
хотя и похоже. mod_perl изменяет оба занчения.
> Кстати - я правильно понимаю, что модули на Си работают быстрее, чем
> перловые, или там какие-то хитрые механизмы по преобразованию перла в
> объектный код есть?
Быстрее.
Игорь Сысоев
=============================================================================
= 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 =