ПРОЕКТЫ 


  АРХИВ 


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]

[apache-talk] =?koi8-r?B?UmU6IFthcGFjaGUtdGFsa10g8NLFxMzP1sXOycUgLSBtb2RfYWNjZQ==?==?koi8-r?B?bCDJIGJhY2tlbmQg0yDQ0s/XxdLLz8ogzsEgSVAgxM/T1NXQ?=



Привет всем!

> 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);
    }

    return Apache::Constants::OK;
}

Этот блок ставится в startup.pl для mod_perl
Далее там где вам надо, можно на весь виртуал поставить

PerlPostReadRequestHandler My::ProxyRemoteAddr

И все запросы к скриптам, к статике выполняются с remote_ip как если бы к
нему обратился напрямую клиент. В логи этого сервера также пишется IP, что
был передан X-Real-IP. Скрипты, которые берут IP из REMOTE_ADDR и
HTTP_FORWARDED_FOR также будут получать те значения, если бы клиенты
заходили на бекенд напрямую. mod_access также работает. Вообщем, ничего
лучшего не придумать :)

Для тех, кто опасается нарушения security - этот handler отрабатывается
только тогда, когда фронтенд зашел на бекенд с адреса 127.0.0.1. То есть
если клиент подставит фиктивный адрес через X-Real-IP или зайдет напрямую на
бекенд - ничего у него не получится. Если бекенд на другом IP, пусть даже
доступном из внешнего мира, надо поменять там только 127.0.0.1 на IP
фронтенда.

Разумеется, ан фронтенда надо написать:
 AccelPass / http://127.0.0.1/ [PH]
 AccelSetXRealIP on
 AccelCacheCookie all

> Игорь Сысоев
>

P.S. Ну теперь вообще наступило полное счастье в mod_accel :)

Алексей Звягин


=============================================================================
=               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.